ffmpeg - 转换时不允许操作错误

问题描述:

我正在开发一个android应用程序。我的要求是在android上实现一个rtsp流媒体服务器。它必须使用MediaRecorder直播视频和音频。另一个要求是我必须使用live555作为流媒体服务器。我从MediaRecorder得到的是MP4或3GP格式。 live555无法传输两者。但如果我只以'RAW_AMR'格式记录它,它可以流式传输音频。由于live555支持流式格式的“mpg”格式,因此我决定让一个能够将'mp4'或'3gp'转换为'mpg'的中间人,并且我选择了ffmpeg。ffmpeg - 转换时不允许操作错误

我已将live555和ffmpeg移植到android。一旦完成,ffmpeg能够转换MediaRecorder记录的文件。但问题是ffmpeg不能同时完成。也就是说,ffmpeg无法在录制时转换文件。它显示一个Operation not permitted错误。我在我的Linux机器上尝试过,使用VLC录制而不是在Android上的MediaRecorder。结果是一样的。录制完成后,ffmpeg可以转换,而录制时不能做到这一点。

这里是ffmpeg的命令我在我的Linux机器发出:

ffmpeg -v 9 -loglevel 99 -i test.mp4 test.mpg 

哪里test.mp4是文件到VLC在mp4格式录制。和test.mpg是我的目标文件。以下是终端上ffmpeg的输出。

ffmpeg version 0.8.9, Copyright (c) 2000-2011 the FFmpeg developers 
    built on Feb 1 2012 18:29:27 with gcc 4.6.2 20111027 (Red Hat 4.6.2-1) 
    configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --enable-bzlib --enable-libcelt --enable-libdc1394 --enable-libdirac --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab --enable-avfilter --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-runtime-cpudetect 
    libavutil 51. 9. 1/51. 9. 1 
    libavcodec 53. 8. 0/53. 8. 0 
    libavformat 53. 5. 0/53. 5. 0 
    libavdevice 53. 1. 1/53. 1. 1 
    libavfilter 2. 23. 0/2. 23. 0 
    libswscale 2. 0. 0/2. 0. 0 
    libpostproc 51. 2. 0/51. 2. 0 
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x1672600] Format mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100 
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x1672600] ISO: File Type Major Brand: isom 
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x1672600] moov atom not found 
test.mp4: Operation not permitted 

请问谁能告诉我是什么原因引起的问题?或者上面的情况可能是ffmpeg。也就是说,ffmpeg能够在记录的同时进行转换吗?如果ffmpeg无法实现,您能否提出其他解决方案?

注意:我正在放一个C标签,因为如果可能通过在ffmpeg上对C进行一些调整,我已经准备好这么做了(我希望解决方案很糟糕)。但请提供一些指向正确方向的指示。

3gpmp4格式都包括在文件完成时写入的moov原子(数据块)。在此之前,文件不完整。

您可以使用FLV作为“中间”格式。其他支持直播的格式也可以使用。如果需要,选项-re可能有助于告诉编码器以流速运行。请参阅Is it possible to play an output video file from an encoder as it's being encoded?