Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C ffmpeg-转换时不允许出现操作错误_C_Linux_Ffmpeg_Video Conversion - Fatal编程技术网

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

C ffmpeg-转换时不允许出现操作错误,c,linux,ffmpeg,video-conversion,C,Linux,Ffmpeg,Video Conversion,我正在开发一个android应用程序。我的要求是在android上实现rtsp流媒体服务器。它必须使用MediaRecorder实时播放捕获的视频和音频。另一个要求是我必须使用live555作为流媒体服务器。我从MediaRecorder获得的是MP4或3GP格式。live555无法同时传输这两种内容。但如果我只以“RAW_AMR”格式录制音频,它可以流式播放。由于live555支持流媒体的“mpg”格式,我决定让一个可以将“mp4”或“3gp”转换为“mpg”的人站在中间,我选择了ffmpeg

我正在开发一个android应用程序。我的要求是在android上实现rtsp流媒体服务器。它必须使用
MediaRecorder
实时播放捕获的视频和音频。另一个要求是我必须使用live555作为流媒体服务器。我从MediaRecorder获得的是MP4或3GP格式。live555无法同时传输这两种内容。但如果我只以“RAW_AMR”格式录制音频,它可以流式播放。由于live555支持流媒体的“mpg”格式,我决定让一个可以将“mp4”或“3gp”转换为“mpg”的人站在中间,我选择了ffmpeg

我已经将live555和ffmpeg移植到android。完成后,ffmpeg能够转换由
MediaRecorder
录制的文件。但问题是ffmpeg不能同时执行。也就是说,ffmpeg在录制时无法转换文件。它显示一个不允许的
操作
错误。我在我的linux机器上也尝试了同样的方法,使用VLC来录制,而不是在android上使用
MediaRecorder
。结果是一样的。ffmpeg能够在录制完成后进行转换,但在录制时无法进行转换

以下是我在linux机器上发出的ffmpeg命令:

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进行一些调整,我已经准备好这样做了(我非常想要这个解决方案)。但请提供一些指向正确方向的指针

两种
3gp
mp4
格式都包括文件定稿时写入的moov-atom(数据块)。在此之前,该文件是不完整的

您可以使用
FLV
作为“中间”格式。也可以使用其他支持实时流媒体的格式。如果需要,选项
-re
可能有助于告知编码器以流速率运行

另见