我根据Google提供的示例(https://android.googlesource.com/platform/cts/+/master/tests/tests/media/src/android/media/cts/ExtractDecodeEditEncodeMuxTest.java)
转码视频基本上,MP4文件的转码有效,但在某些手机上我得到了一些奇怪的结果。例如,如果我在HTC One上对带有音频的视频进行转码,则代码不会出现任何错误,但文件无法在手机上播放。如果我有一个10秒的视频,它会跳到几乎最后一秒,而你只有一些噼啪声。如果您使用VLC播放视频,则音轨将完全静音。
我没有在编码/解码方面改变代码,例如,相同的代码在Nexus 5或MotoX上提供了正确的结果。
任何人都知道为什么它可能会在特定设备上失败?
最好的关注并谢谢你, 弗洛里安
答案 0 :(得分:7)
我通过以下更改使其在Android 4.4.2设备中运行:
private static final int OUTPUT_AUDIO_AAC_PROFILE = MediaCodecInfo.CodecProfileLevel.AACObjectLC;
MediaFormat outputAudioFormat = MediaFormat.createAudioFormat(OUTPUT_AUDIO_MIME_TYPE, inputFormat.getInteger(MediaFormat.KEY_SAMPLE_RATE), inputFormat.getInteger(MediaFormat.KEY_CHANNEL_COUNT));
timestampUs X < lastTimestampUs X for Audio track
错误)if (audioPresentationTimeUsLast == 0) { // Defined in the begining of method audioPresentationTimeUsLast = audioEncoderOutputBufferInfo.presentationTimeUs; } else { if (audioPresentationTimeUsLast > audioEncoderOutputBufferInfo.presentationTimeUs) { audioEncoderOutputBufferInfo.presentationTimeUs = audioPresentationTimeUsLast + 1; } audioPresentationTimeUsLast = audioEncoderOutputBufferInfo.presentationTimeUs; } // Write data if (audioEncoderOutputBufferInfo.size != 0) { muxer.writeSampleData(outputAudioTrack, encoderOutputBuffer, audioEncoderOutputBufferInfo); }
希望这会有所帮助......
答案 1 :(得分:0)
如果原始CTS测试失败,您需要前往设备供应商并要求修复