【问题标题】:Android MediaCodec & MediaExtractor For video and audio playingAndroid MediaCodec & MediaExtractor 用于视频和音频播放
【发布时间】:2015-01-02 19:25:00
【问题描述】:

我是新来的,对 Android 开发很陌生。这是我的第一个问题。

我正在使用MediaExtractorMediaCodec 播放mp4 文件,包括视频和音频。现在我得到一对视频提取器/编解码器和另一对音频提取器/编解码器,在两个单独的线程中实现。

我的问题是:我可以只使用一个提取器和两个编解码器来同步播放视频和音频吗?

如果是,怎么做?当我使用 extractor.selecttrack 一个时,另一个将无法工作......

非常感谢。

在这里感谢大家的回答。我已经弄清楚了。我犯了一个错误,提取器只能选择一首曲目。实际上,您可以选择多个曲目,extractor.advance() 将随后一次读取每个曲目。

【问题讨论】:

  • 为什么不直接使用 MediaPlayer? developer.android.com/reference/android/media/MediaPlayer.html
  • @KenWolf。 bcz 我需要设计自己的播放器,它具有 MediaPlayer 所没有的更多功能。
  • 在您的问题中,您说“extractor.selecttrack”不适用于其他曲目。你能详细说明什么不起作用吗?

标签: android audio video android-mediacodec mediaextractor


【解决方案1】:

在这里感谢大家的回答。我已经弄清楚了。我犯了一个错误,提取器只能选择一首曲目。实际上,您可以选择多个曲目,extractor.advance() 将随后一次读取每个曲目。

【讨论】:

  • 你能把示例代码粘贴到这里吗?我也有同样的问题,并试图修复超过一天。请粘贴您的示例代码。
【解决方案2】:

是的,您应该只使用一个提取器,每个轨道一个 MediaCodec 实例。

在这种情况下,您不应该使用 MediaExtractor.selectTrack,您应该只从所有轨道读取数据包,并为每个返回的数据包选择将其传递给哪个 MediaCodec。

【讨论】:

  • 这样的播放器怎么实现?我的意思是同步播放视频和音频。谢谢。
  • 我编辑了答案以澄清在这种情况下您不应该使用 selectTrack。
  • @mstorsjo 如何为 readSampleData 选择 ByteBuffer?它应该是其中一个编解码器的输入缓冲区,但我们无法提前知道它是视频包还是音频包......
  • 在调用 readSampleData() 之前,您可以调用 getSampleTrackIndex() 或任何其他方法来获取有关当前样本的信息。只有调用 advance() 后,提取器才会继续下一个样本。
猜你喜欢
  • 1970-01-01
  • 2015-07-30
  • 2016-03-12
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多