如何使用MediaCodec和MediaMuxer录制视频和音频 [英] How to record video and audio with MediaCodec and MediaMuxer
问题描述
我能够在MediaCodec和MediaMuxer的帮助下录制(编码)视频.接下来,我需要在MediaCodec和MediaMuxer的帮助下处理音频部分和将视频与音频多路复用.
I am able to record(encode) video with the help of MediaCodec and MediaMuxer. Next, I need to work on audio part and mux audio with video with help of MediaCodec and MediaMuxer.
我面临两个问题:
-
如何使用MediaCodec编码音频.我需要编码音频和 视频在单独的线程中?
How to encode audio with MediaCodec. Do I need to encode audio and video in separate threads?
如何将音频和视频数据传递给MediaMuxer(如 writeSampleData()方法一次只获取一种类型的数据)?
How can I pass audio and video data to MediaMuxer (as writeSampleData() method takes only one type of data at a time)?
我提到了 MediaMuxerTest ,但它使用的是MediaExtractor.我需要使用MediaCodec,因为视频编码是通过MediaCodec完成的.如果我错了,请纠正我.
I referred to MediaMuxerTest but it is using MediaExtractor. I need to use MediaCodec as video encoding is done with MediaCodec. Please correct me if I am wrong.
由于没有针对这些新API的适当文档,因此任何建议或建议都将非常有帮助.
Any suggestion or advice will be very helpful as there is no proper documentation available for these new APIs.
注意:
- 我的应用定位到API 18+(Android 4.3 +).
- 我已引用 Grafika 进行视频编码.
- My app is targeting to API 18+ (Android 4.3+).
- I have referred Grafika for video encoding.
推荐答案
-
不,您不一定需要单独的线程来播放音频,只需使用两个单独的MediaCodec实例即可.
No, you don't necessarily need a separate thread for audio, just use two separate MediaCodec instances.
writeSampleData
的第一个参数是trackIndex
,它允许您指定每个数据包对应的磁道. (通过运行addTrack
两次,每条轨道一次,您将获得两个单独的轨道ID.)
The first parameter of writeSampleData
is trackIndex
, which allows you to specify which track each packet corresponds to. (By running addTrack
twice, once for each track, you get two separate track IDs.)
这篇关于如何使用MediaCodec和MediaMuxer录制视频和音频的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!