2013-06-21 24 views
7

tôi cố gắng tạo ra bộ mã hóa cho "audio/3gpp" và tai nạn ứng dụng của tôi ...IllegalStateException khi MediaCodec.configure Android

tôi sử dụng mã này

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

Exception
java.lang. IllegalStateException
android.media.MediaCodec.native_configure (Phương thức gốc)
tại android.media.MediaCodec.configure (MediaCodec.java:256)
tại com.agent.mobile.TestAppActivity.initMediaCodec (TestAppActivity.java:234)

Trả lời

5

Có một số giá trị bắt buộc phải được đặt theo định dạng. Nếu bạn nhìn vào docs for MediaFormat, nó nói "tất cả các phím không được đánh dấu tùy chọn là bắt buộc". Nếu bạn không đặt khóa bắt buộc, MediaCodec sẽ phát ra lỗi vì nó đã bị bỏ lại ở trạng thái bất hợp pháp.

Add:

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 nên đã được thiết lập cho bạn bằng cách createEncoderByType().

Các vấn đề liên quan