[FFmpeg-user] Feeding FFMPEG from buffer in c code RAW H264 to MP4 wrapping, or named fifo?

abraxas1 abraxas1 at gmail.com
Thu May 11 03:41:22 EEST 2017


-report is very cool, sorry for wasting your attention, and mine, with
terrible logs.
i have piped the raw h264 to a file and this command converts is
successfully.
 ffmpeg -report -re -framerate 30 -y -f h264 -i orbi_0148.cam1.h264 -c:v
copy -an -video_size 1920x1080 -f mp4 orbi_0148.cam1-1.mp4

 i then try to launch this command from my program with the same options,
and also with many several options.
my program doesn't mess with ffmpegs output files anymore.
i close the fifos at the end of video recording and that's all.
and don't get any file created and get this output, which i don't
understand at all.
(the successful command line output follows the execv() output)
thanks,
(execv output with options -report -y -i /tmp/fifocam3.h264 -c:v copy -an
-video_size 1920x1080 -f mp4 /media/sd-card/orbi_0140.cam3.mp4)


root at arm:/home/orbi# cat ffmpeg-20170511-001941.log
ffmpeg started on 2017-05-11 at 00:19:41
Report written to "ffmpeg-20170511-001941.log"
Command line:
/usr/bin/ffmpeg -report -y -i /tmp/fifocam3.h264 -c:v copy -an -video_size
1920x1080 -f mp4 /media/sd-card/orbi_0140.cam3.mp4
ffmpeg version 2.8.11-0ubuntu0.16.04.1 Copyright (c) 2000-2017 the FFmpeg
developers
  built with gcc 5.4.0 (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.4) 20160609
  configuration: --prefix=/usr --extra-version=0ubuntu0.16.04.1
--build-suffix=-ffmpeg --toolchain=hardened
--libdir=/usr/lib/arm-linux-gnueabihf
--incdir=/usr/include/arm-linux-gnueabihf --cc=cc --cxx=g++ --enable-gpl
--enable-shared --disable-stripping --disable-decoder=libopenjpeg
--disable-decoder=libschroedinger --enable-avresample --enable-avisynth
--enable-gnutls --enable-ladspa --enable-libass --enable-libbluray
--enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite
--enable-libfontconfig --enable-libfreetype --enable-libfribidi
--enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame
--enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp
--enable-libschroedinger --enable-libshine --enable-libsnappy
--enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora
--enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack
--enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi
--enable-openal --enable-opengl --enable-x11gr  libavutil      54. 31.100 /
54. 31.100
  libavcodec     56. 60.100 / 56. 60.100
  libavformat    56. 40.101 / 56. 40.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 40.101 /  5. 40.101
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.101 /  1.  2.101
  libpostproc    53.  3.100 / 53.  3.100
Splitting the commandline.
Reading option '-report' ... matched as option 'report' (generate a report)
with argument '1'.
Reading option '-y' ... matched as option 'y' (overwrite output files) with
argument '1'.
Reading option '-i' ... matched as input url with argument
'/tmp/fifocam3.h264'.
Reading option '-c:v' ... matched as option 'c' (codec name) with argument
'copy'.
Reading option '-an' ... matched as option 'an' (disable audio) with
argument '1'.
Reading option '-video_size' ... matched as AVOption 'video_size' with
argument '1920x1080'.
Reading option '-f' ... matched as option 'f' (force format) with argument
'mp4'.
Reading option '/media/sd-card/orbi_0140.cam3.mp4' ... matched as output
url.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option report (generate a report) with argument 1.
Applying option y (overwrite output files) with argument 1.
Successfully parsed a group of options.
Parsing a group of options: input url /tmp/fifocam3.h264.
Successfully parsed a group of options.
Opening an input file: /tmp/fifocam3.h264.
[h264 @ 0xf249a0] Format h264 probed with size=2048 and score=51
[h264 @ 0xf249a0] Before avformat_find_stream_info() pos: 0 bytes
read:32768 seeks:0
[h264 @ 0xf25460] Current profile doesn't provide more RBSP data in PPS,
skipping
[h264 @ 0xf25460] bytestream overread -4
[h264 @ 0xf25460] bytestream overread -4
[h264 @ 0xf25460] bytestream overread -4
[h264 @ 0xf25460] bytestream overread -4
[h264 @ 0xf25460] bytestream overread -10
[h264 @ 0xf25460] error while decoding MB 112 28, bytestream -10
[h264 @ 0xf25460] concealing 4737 DC, 4737 AC, 4737 MV errors in P frame
[h264 @ 0xf25460] Frame num gap 7 5



/////// successful command line run
 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
root at arm:/home/orbi# ffmpeg -report -re -framerate 30 -y -f h264 -i
orbi_0148.cam1.h264 -c:v copy -an -video_size 1920x1080 -f mp4
orbi_0148.cam1-1.mp4

root at arm:/home/orbi# cat ffmpeg-20170511-002629.log
ffmpeg started on 2017-05-11 at 00:26:29
Report written to "ffmpeg-20170511-002629.log"
Command line:
ffmpeg -report -re -framerate 30 -y -f h264 -i orbi_0148.cam1.h264 -c:v
copy -an -video_size 1920x1080 -f mp4 orbi_0148.cam1-1.mp4
ffmpeg version 2.8.11-0ubuntu0.16.04.1 Copyright (c) 2000-2017 the FFmpeg
developers
  built with gcc 5.4.0 (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.4) 20160609
  configuration: --prefix=/usr --extra-version=0ubuntu0.16.04.1
--build-suffix=-ffmpeg --toolchain=hardened
--libdir=/usr/lib/arm-linux-gnueabihf
--incdir=/usr/include/arm-linux-gnueabihf --cc=cc --cxx=g++ --enable-gpl
--enable-shared --disable-stripping --disable-decoder=libopenjpeg
--disable-decoder=libschroedinger --enable-avresample --enable-avisynth
--enable-gnutls --enable-ladspa --enable-libass --enable-libbluray
--enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite
--enable-libfontconfig --enable-libfreetype --enable-libfribidi
--enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame
--enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp
--enable-libschroedinger --enable-libshine --enable-libsnappy
--enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora
--enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack
--enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi
--enable-openal --enable-opengl --enable-x11gr  libavutil      54. 31.100 /
54. 31.100
  libavcodec     56. 60.100 / 56. 60.100
  libavformat    56. 40.101 / 56. 40.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 40.101 /  5. 40.101
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.101 /  1.  2.101
  libpostproc    53.  3.100 / 53.  3.100
Splitting the commandline.
Reading option '-report' ... matched as option 'report' (generate a report)
with argument '1'.
Reading option '-re' ... matched as option 're' (read input at native frame
rate) with argument '1'.
Reading option '-framerate' ... matched as AVOption 'framerate' with
argument '30'.
Reading option '-y' ... matched as option 'y' (overwrite output files) with
argument '1'.
Reading option '-f' ... matched as option 'f' (force format) with argument
'h264'.
Reading option '-i' ... matched as input url with argument
'orbi_0148.cam1.h264'.
Reading option '-c:v' ... matched as option 'c' (codec name) with argument
'copy'.
Reading option '-an' ... matched as option 'an' (disable audio) with
argument '1'.
Reading option '-video_size' ... matched as AVOption 'video_size' with
argument '1920x1080'.
Reading option '-f' ... matched as option 'f' (force format) with argument
'mp4'.
Reading option 'orbi_0148.cam1-1.mp4' ... matched as output url.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option report (generate a report) with argument 1.
Applying option y (overwrite output files) with argument 1.
Successfully parsed a group of options.
Parsing a group of options: input url orbi_0148.cam1.h264.
Applying option re (read input at native frame rate) with argument 1.
Applying option f (force format) with argument h264.
Successfully parsed a group of options.
Opening an input file: orbi_0148.cam1.h264.
[h264 @ 0x848a20] Before avformat_find_stream_info() pos: 0 bytes
read:32768 seeks:0
[h264 @ 0x8515b0] Current profile doesn't provide more RBSP data in PPS,
skipping
[h264 @ 0x8515b0] Current profile doesn't provide more RBSP data in PPS,
skipping
[h264 @ 0x848a20] max_analyze_duration 5000000 reached at 5005000
microseconds st:0
[h264 @ 0x848a20] After avformat_find_stream_info() pos: 3773440 bytes
read:3801088 seeks:0 frames:152
Input #0, h264, from 'orbi_0148.cam1.h264':
  Duration: N/A, bitrate: N/A
    Stream #0:0, 152, 1/1200000: Video: h264 (Main), yuv420p(tv),
1920x1080, 29.97 fps, 29.97 tbr, 1200k tbn, 59.94 tbc
Successfully opened the file.
Parsing a group of options: output url orbi_0148.cam1-1.mp4.
Applying option c:v (codec name) with argument copy.
Applying option an (disable audio) with argument 1.
Applying option f (force format) with argument mp4.
Successfully parsed a group of options.
Opening an output file: orbi_0148.cam1-1.mp4.
Successfully opened the file.
[mp4 @ 0x8fb230] Codec for stream 0 does not use global headers but
container format requires global headers
Output #0, mp4, to 'orbi_0148.cam1-1.mp4':
  Metadata:
    encoder         : Lavf56.40.101
    Stream #0:0, 0, 1/1200000: Video: h264 ([33][0][0][0] / 0x0021),
yuv420p, 1920x1080, q=2-31, 29.97 fps, 29.97 tbr, 1200k tbn, 1200k tbc
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
[NULL @ 0x8515b0] Current profile doesn't provide more RBSP data in PPS,
skipping
No more output streams to write to, finishing.e=00:00:08.64
bitrate=5887.7kbits/s
frame=  270 fps= 30 q=-1.0 Lsize=    6443kB time=00:00:08.97
bitrate=5880.6kbits/s
video:6440kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB
muxing overhead: 0.056839%
Input file #0 (orbi_0148.cam1.h264):
  Input stream #0:0 (video): 270 packets read (6594052 bytes);
  Total: 270 packets (6594052 bytes) demuxed
Output file #0 (orbi_0148.cam1-1.mp4):
  Output stream #0:0 (video): 270 packets muxed (6594052 bytes);
  Total: 270 packets (6594052 bytes) muxed
0 frames successfully decoded, 0 decoding errors
[AVIOContext @ 0x931650] Statistics: 34 seeks, 308 writeouts
[AVIOContext @ 0x851190] Statistics: 6594052 bytes read, 0 seeks


On Wed, May 10, 2017 at 6:43 AM Moritz Barsnick <barsnick at gmx.net> wrote:

> On Tue, May 09, 2017 at 22:23:29 +0000, abraxas1 wrote:
> > ok, i removed the opening and the closing of the files that ffmpeg is
> > opening in it's own process. (they were legacy...)
>
> They were wrong. ffmpeg does that just fine. ;-)
>
> > now it seems to proceed through the recording nicely, with no output fro
> > ffmpeg until recording stops.
>
> If you mean the console output: You probably need to flush, in order to
> see it, or make it unbuffered. (I think your program interacting with
> the terminal may be buffering something like e.g. 4k of the output -
> but I may be wrong.)
>
> > starts, but probably with closing the fifo's which tell ffmpeg to finish
> > the stream and close it's output file(?)
>
> Yes, if the input fifo is closed, ffmpeg should detect EOF and stop
> encoding.
>
> > and results in this. again, this is happening across 4 streams and the
> > output from the four ffmpegs is rather convoluted.
>
> If you don't want the output to be convoluted, why don't you
> - start off with one ffmpeg first, or
> - log to separate outputs (e.g. with the "-report" option) - and stop
>   omitting parts of ffmpeg's output from your reports to the list!
>
> Cheers,
> Moritz
> _______________________________________________
> ffmpeg-user mailing list
> ffmpeg-user at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-user
>
> To unsubscribe, visit link above, or email
> ffmpeg-user-request at ffmpeg.org with subject "unsubscribe".


More information about the ffmpeg-user mailing list