我有来自带有自定义API的相机的原始h264流。数据被放入我的c代码中的回调函数中。
我需要将其包装为mp4。我现在正在使用ffmpeg执行此操作,但只有在编写并关闭h264es文件之后,才会在类似beaglebone的处理器上耗费大量时间。
我一直在尝试将此数据写入命名管道并将其提供给ffmpeg但无法使其正常工作。也许我没有正确打开/关闭管道,它挂起了。或者没有为ffmpeg正确指定管道。
是否可以更直接地将缓冲数据提供给ffmpeg? 或者,如何设置命名管道才能正常工作?
首先我打开这样的fifo
g_fifoname="/tmp/fifocam1.h264";
mkfifo(g_fifoname, 0666); // make the fifos
fd_fifo[ch+brd*2] = open(g_fifoname, O_RDWR);
然后,我现在正在这样调用ffmpeg,无论如何。尝试很多事情。
char* execargs[]={PATH_TO_FFMPEG,"-re","-y","-framerate","30","-f","h264","-video_size","1920x1080","-i",g_fifname,"-c:v","copy","-an",pathname, (char*)0};
我可能错误地调用了ffmpeg。哎呀。 我首先打开fifo,然后启动ffmpeg。 当流媒体停止时我关闭了fifo' s,然后关闭ffmpeg输出文件。
ffmpeg是如此强大和令人沮丧的争吵。 谢谢大家,