2012-03-24 17 views
6

ビデオフォーマットMPEG-2(一定値8)TSとオーディオフォーマットACC(定数値3)を設定すると、オーディオなしのビデオのみがACCフォーマットで記録されます。しかし、何の誤りもありません。私はサムスンギャラクシータブ(ハニカム)でそれを試してみました。 MPEG-2TSはAndroid 3.0以降でサポートされています。私がデフォルトのビデオとオーディオフォーマットを使用すると、正常に動作します。 どうすればいいですか?助けてください。MPEG-2 TS出力とACCオーディオエンコーディングフォーマットでビデオを記録する方法

if(mCamera == null) { 
    mCamera = Camera.open(); 
    mCamera.unlock(); 
} 


if(mMediaRecorder == null) mMediaRecorder = new MediaRecorder(); 

mMediaRecorder.setPreviewDisplay(surface); 
mMediaRecorder.setCamera(mCamera); 
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); 
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
mMediaRecorder.setOutputFormat(8); 
mMediaRecorder.setOutputFile("/mnt/sdcard/temp.ts"); 
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); 
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 
mMediaRecorder.setVideoSize(640, 480); 

mMediaRecorder.setVideoEncodingBitRate(500000); 
mMediaRecorder.setAudioEncodingBitRate(44100); 
mMediaRecorder.setVideoFrameRate(30); 
mMediaRecorder.setMaxDuration(-1); 
mMediaRecorder.prepare(); 
+0

あなたのエラーログを投稿してください。 –

+0

投稿コード: –

+0

どのようにオーディオがないことを確認していますか?あなたは.TSファイルをdemuxingしていますか? – freeone3000

答えて

0

問題がオーディオエンコーダに関連付けられているようです。 Android 2.3.3(GingerBread)より前には、エンコーダをAMR_NBに設定する必要があります。 2.3.3以降、オーディオコーデックとしてAMR_WBとAACを使用することもできます。

+1

あなたは私の要件を取得していません。 mpeg2tsとaacのオーディオとビデオをマルチプレックスすることはできません。 –

+0

@SuvamRoy "mux"とは何ですか? –

+0

実際に私はMERG-2TS出力フォーマットでビデオを記録したいと思っています。このフォーマットでは、ACCオーディオエンコーダのみがアンドロイドデベロッパーガイドに従ってサポートしています。だから、私はオーディオなしでそのフォーマットでビデオを録音することができます。オーディオエンコーダを変更すると、例外が発生します。デフォルトのビデオとオーディオのエンコーダをすべて使用すると、ビデオとオーディオを録画できます。 –

0

mMediaRecorder.setAudioEncodingBitRate(44100):44100は、良好なオーディオビットレートではありません。サンプリングレートの可能性が高くなります。 128000は、より一般的にオーディオビットレートです。

私はサムスンギャラクシーS3にm2tsフォーマットでの録音にも問題があります。

mediaRecorder = new MediaRecorder(); 
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    mediaRecorder.setOutputFormat(/*MediaRecorder.OutputFormat.OUTPUT_FORMAT_MPEG2TS*/8); 
    mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 
    mediaRecorder.setAudioSamplingRate(48000); 
    mediaRecorder.setAudioEncodingBitRate(128000); 

OutputFormat.OUTPUT_FORMAT_MPEG2TSオプションは、実際のAndroid 4.2.2 SDKに隠されています。したがって、 '8'の使用。これは、この形式が実際にはサポートされていないという手掛かりになる可能性があります。

0

M2ts Writerにパッチを適用しています。 libstagefright.soをビルドし、デバイスにプッシュします。また、アプリケーション内で以下のように設定してください

recorder.setAudioSamplingRate(48000); 
recorder.setAudioEncodingBitRate(128000); 

これ以外の場合、クリップは完全に記録されません。私は上記のパラメータを設定する理由を掘り下げませんでした。 libstagefrightM2tsWriterため

パッチ:

diff --git a/media/libstagefright/MPEG2TSWriter.cpp b/media/libstagefright/MPEG2TSWriter.cpp 

index c9ed5bb..a42371f 100644 

--- a/media/libstagefright/MPEG2TSWriter.cpp 

+++ b/media/libstagefright/MPEG2TSWriter.cpp 

@@ -411,6 +411,7 @@ void MPEG2TSWriter::SourceInfo::onMessageReceived(const sp<AMessage> &msg) { 
          (const uint8_t *)buffer->data() 
          + buffer->range_offset(), 
          buffer->range_length()); 
+     readMore(); 
       } else if (buffer->range_length() > 0) { 
        if (mStreamType == 0x0f) { 
         if (!appendAACFrames(buffer)) { 
関連する問題