如何使用MediaCodec和MediaMuxer录制视频和音频 [英] How to record video and audio with MediaCodec and MediaMuxer

查看:415
本文介绍了如何使用MediaCodec和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.

我面临两个问题:

  1. 如何使用MediaCodec编码音频.我需要编码音频和 视频在单独的线程中?

  1. 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.

注意:

  1. 我的应用定位到API 18+(Android 4.3 +).
  2. 我已引用 Grafika 进行视频编码.
  1. My app is targeting to API 18+ (Android 4.3+).
  2. I have referred Grafika for video encoding.

推荐答案

  1. 不,您不一定需要单独的线程来播放音频,只需使用两个单独的MediaCodec实例即可.

  1. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆