6

ビデオフォーマットMPEG-2(定数値8)TSとオーディオフォーマットACC(定数値3)を設定すると、ACCフォーマットでオーディオなしでビデオのみが記録されます。ただし、エラーは発生しません。Samsung Galaxy Tab(Honeycomb)で試してみました。MPEG-2TSはAndroidバージョン3.0以降でサポートされているためです。デフォルトのビデオおよびオーディオ形式を使用すると、正常に機能します。これどうやってするの。助けてください。

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();
4

3 に答える 3

0

mMediaRecorder.setAudioEncodingBitRate(44100): 44100 は適切なオーディオ ビット レートではありません。それはおそらくサンプルレートです。128000 は、より一般的なオーディオ ビット レートです。

そうは言っても、Samsung Galaxy 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」を使用します。これは、この形式が実際にはサポートされていないことを示している可能性があります。

于 2013-12-02T18:57:15.807 に答える
0

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

于 2012-04-21T16:47:15.950 に答える
0

解決策は、にパッチを適用することM2ts Writerです。ビルドlibstagefright.soしてデバイスにプッシュします。アプリで以下も設定

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

そうしないと、クリップが完全に記録されません。ただし、上記のパラメーターを設定する理由については掘り下げませんでした。

M2tsWriterのパッチlibstagefright:

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)) { 
于 2014-09-26T21:16:49.037 に答える