Как записать видео в формате MPEG-2 TS и в формате кодирования аудио ACC - PullRequest
6 голосов
/ 24 марта 2012

Когда я устанавливаю видеоформат 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();

Ответы [ 3 ]

0 голосов
/ 02 декабря 2013

mMediaRecorder.setAudioEncodingBitRate (44100): 44100 не является хорошей скоростью передачи звука. Это скорее частота дискретизации. 128000 чаще звуковая скорость.

Сказав это, я также испытываю проблемы с записью в формате m2ts на Samsung Galaxy S3.

    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 голосов
/ 27 сентября 2014

Решение применяет патч в 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)) { 
0 голосов
/ 21 апреля 2012

Похоже, ваша проблема связана с аудио кодерами.До Android 2.3.3 (GingerBread) вы должны установить кодировщик на AMR_NB.Начиная с 2.3.3 вы также можете использовать AMR_WB и AAC в качестве аудиокодеков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...