[FFmpeg-user] The transcoded file can't see the video played by the JW player which used the VAAPI to transcode file to the FLV format.

Mark Thompson sw at jkqxz.net
Mon Dec 5 17:52:29 EET 2016


On 05/12/16 12:51, Archer Chang wrote:
> I use the VAAPI HW ACCEL to transcode file to the FLV format that the
> command as follows.
> 
> ffmpeg -vaapi_device /dev/dri/renderD128 -hwaccel vaapi
> -hwaccel_output_format vaapi -hwaccel_lax_profile_check -i infile.mkv  -vf
> "format=nv12|vaapi,hwupload" -c:v h264_vaapi -c:a aac -ac 2 -ar 44100
> *outfile1.flv*
> 
> The transcoded file(outfile.flv) only can hear the audio but no video that
> played by the JW player.  But when I transcode the file to the MKV and make
> the stream copy to the FLV format and
> this file can be played normally by the JW player. The command as follows.
> 
> ffmpeg -vaapi_device /dev/dri/renderD128 -hwaccel vaapi
> -hwaccel_output_format vaapi -hwaccel_lax_profile_check -i infile.mkv  -vf
> "format=nv12|vaapi,hwupload" -c:v h264_vaapi -c:a aac -ac 2 -ar 44100
>  outfile.mkv
> ffmpeg -i outfile.mkv  -c:v copy -c:a copy  *outfile2.flv*
> 
> I try to use the flv parser utility to find out the difference between the
> outfile1.flv and the outfile2.flv.
> Seems the Video Tag1 were different. the content as follows.
> 
> outfile1.flv (transcode using the ffmpeg directly with VAAPI)
> 09 00 00 05 00 00 00 00 00 00 00 17 00 00 00 00
> 
> outfile2.flv(mke the stream copy from transcoded file)
> 09 00 00 30 00 00 00 00 00 00 00 17 00 00 00 00
> 01 6E 00 28 FF E1 00 1A 67 6E 00 28 A6 CD 94 07
> 80 22 7E 5C 04 40 00 00 FA 40 00 2E E0 03 C6 0C
> 65 80 01 00 06 68 EB E3 CB 22 C0
> 
> I not familiar with the video transcoding. I trace the flvenc.c seems the
> par->extradata_size would be 0 when use the VAAPI to transcode the file to
> the FLV directly,
> And it has some value which makes stream copy or use SW transcode
> 
> ffmpeg  -i infile.mkv   -c:v libx264 -c:a aac -ac 2 -ar 44100  *outfile.flv
>  (can be played  normally by JW Player)*

Is this JW player something which can only play streams with global headers, then?

If so, try applying <https://git.libav.org/?p=libav.git;a=commit;h=0cf86fabfa5820596cca2cfead63c6f8df76c3f2> and see if it works.

(This is on the assumption that you are using a packed-header VAAPI driver like i965, if you are using a whole-stream driver like mesa/gallium then it isn't really fixable.)

- Mark


More information about the ffmpeg-user mailing list