Make video codec and scale configurable#833
Conversation
|
@kolyakrasnik FYI |
| } | ||
| args.push( | ||
| '-vcodec', this.opts.videoType, | ||
| '-y', this.videoPath |
There was a problem hiding this comment.
Should we make changeable the video path to an arbitrary extension like .avi?
Since:
$ ffmpeg -f mjpeg -r 10 -i http://localhost:9100 -vcodec mjpeg -y sample.mp4
=> Can get broken video. We cannot play the video even we change the extension of sample.mp4 to .avi
$ ffmpeg -f mjpeg -r 10 -i http://localhost:9100 -vcodec mjpeg -y sample.avi
=> Can get playable video
$ ffmpeg -f mjpeg -r 10 -i http://localhost:9100 -vcodec mjpeg -f mjpeg -y sample
=> Can get broken video, but we cannot play the video even we add .avi to sample file.
There was a problem hiding this comment.
I'm trying not to over engineer it. If the file is returned as base-64 encoded then the user is free to set any extension. And even if one sets mp4 instead of avi then video players are still able to play it properly, since they only care about the header information.
There was a problem hiding this comment.
I understood.
It was because when I ran https://github.com/appium/ruby_lib_core/pull/164/files#diff-a09385fd21af58063384116d47f91d91R27 ,
def test_start_recording_screen
to_path = 'recorded_file_ios.avi'
@@driver.start_recording_screen video_type: 'mjpeg'
sleep 3 # second
@@driver.stop_and_save_recording_screen to_path
endI was not able to play recorded_file_ios.avi by QuickTime. The templorary file in /var/folders/y6/524wp8fx0xj5q1rf6fktjrb00000gn/T/20181021-40254-ug067c.gg8l/appium_3febaf.mp4 which created in Appium server side also was not.
The stop_and_save_recording_screen is simply store decoded base64 data into a file as below.
def stop_and_save_recording_screen(file_path)
base64data = execute(:stop_recording_screen, {}, {})
File.open(file_path, 'wb') { |f| f << Base64.decode64(base64data) }I was able to play the result like below under this PR.
def test_start_recording_screen
to_path = 'recorded_file_ios.mp4'
@@driver.start_recording_screen video_type: 'libx264'
sleep 3 # second
@@driver.stop_and_save_recording_screen to_path
endBy changing this.videoPath to use .avi format instead of .mp4 in my local, I could get playable video, recorded_file_ios.avi, with the former scenario. (ffmpeg changes headers following exported file, I guess since we can get an error like Unable to find a suitable output format for 'sample' when we do not set output file properly.) So, I read options like -f if we could get a file which does not depend on the extention of file output.
There was a problem hiding this comment.
Quicktime is not very smart. I'd rather use VLC or Mplayer ;)
But anyway, you see it is possible to change the extension locally in your case, so this should not be an issue.
There was a problem hiding this comment.
Yeah, I was able to play it by VLC.
ah..
Addresses appium/appium#11677