2013-06-21 28 views
7

próbuję tworzyć enkoder dla "audio/3GPP" i moim app katastrofie ...IllegalStateException gdy MediaCodec.configure Android

mogę użyć tego kodu

String mMime = "audio/3gpp"; 
MediaCodec mMediaCodec = MediaCodec.createEncoderByType(mMime); 
MediaFormat mMediaFormat = MediaFormat.createAudioFormat(mMime, RECORDER_SAMPLERATE, 1); 
mMediaCodec.configure(mMediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE); 
mMediaCodec.start(); 

wyjątkiem
java.lang. IllegalStateException
android.media.MediaCodec.native_configure (Metoda Ojczysty)
na android.media.MediaCodec.configure (MediaCodec.java:256)
w com.agent.mobile.TestAppActivity.initMediaCodec (TestAppActivity.java:234)

Odpowiedz

5

Istnieje kilka obowiązkowych wartości, które muszą być zawarte w pliku PDF. Jeśli spojrzysz na numer docs for MediaFormat, oznacza to, że "wszystkie klucze nie oznaczone jako opcjonalne są obowiązkowe". Jeśli nie ustawisz klucza obowiązkowego, MediaCodec zgłosi błąd, ponieważ został pozostawiony w nielegalnym stanie.

Dodaj:

mMediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, <bit rate>); 
mMediaFormat.setInteger(MediaFormat.KEY_SAMPLE_RATE, <sample rate>); 
mMediaFormat.setInteger(MediaFormat.KEY_CHANNEL_COUNT, 1); 

KEY_MIME powinny zostać ustawione dla Ciebie przez createEncoderByType().