我正在開發一個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進行一些調整,我已經準備好這麼做了(我希望解決方案很糟糕)。但請提供一些指向正確方向的指示。