2012-02-20 13 views
0

アンドロイドアプリを開発中です。私の要件は、アンドロイドに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というエラーが表示されます。私は同じマシンで、VLCを使って、MediaRecorderの代わりにアンドロイドを記録しました。結果は同じです。 ffmpegは、録音が終了すると変換することができ、録音中も同じことをすることはできません。ここで

は、私は私のLinuxボックス上で発行されるffmpegのコマンドです:

test.mp4はVLCが mp4フォーマットで記録されているファイルである
ffmpeg -v 9 -loglevel 99 -i test.mp4 test.mpg 

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でいくつか調整することができれば、私はそれをする準備ができています(それはひどく解決したい)。しかし、正しい方向へのいくつかの指針を提供してください。

答えて

2

3gpmp4の両方の形式には、ファイルのファイナライズ時に書き込まれるmoovアトム(データのチャンク)が含まれます。それまではファイルは不完全です。

FLVを「中間」形式として使用できます。ライブストリーミングをサポートする他の形式も使用できます。オプション-reは、必要に応じてエンコーダにストリームレートで動作するよう指示するのに役立ちます。

Is it possible to play an output video file from an encoder as it's being encoded?も参照してください。

関連する問題