当前位置: 首页 > 知识库问答 >
问题:

如何将H.264 NAL单元提供给Android MediaCodec进行解码?

楚德辉
2023-03-14

我正在试图弄清楚如何使用Android的MediaCodec类来解码H.264视频。首先,我尝试手动解析H.264文件中的NAL单元,并将它们提供给MediaCodec进行解码。我相信我正确地解析了文件中的NAL单元(在文件中搜索0x00 0x00 0x01序列,表示NAL单元的开始),但每次调用dequeueOutputBuffer()时,MediaCodec总是超时并返回-1。有人知道如何将H.264 NAL单元馈送到MediaCodec进行解码的细节吗?在发送NAL单元之前,我应该去掉0x00 0x00 0x01序列吗?我需要忽略/删除某些NAL单元类型吗?我是否需要在每个NAL单元之前预置提取的SPS和PPS信息(有或没有0x00 0x00 0x01序列)?我在这里玩了很多主意,但没有一个是成功的。在这方面的任何指导都将非常感谢。

共有1个答案

慕容烨
2023-03-14

根据我的经验,解码器将在dequeueOutputBuffer()上返回-1,只要您不向它提供SPS/PPS信息。当您这样做时,解码器应该返回dequeueOutputBuffer()上的INFO_OUTPUT_FORMAT_CHANGED标志(-2),之后将正确返回解码帧。

如果解码器仍然返回-1,请尝试将SPS/PPS信息添加到带有buffer_flag_codec_config标志的解码器中。

 类似资料:
  • 问题内容: 我正在使用一个Android应用程序,该应用程序是从Web服务下载JSON数据的。解析数据的类如下所示: 当我从应用程序内部调用时,它构建良好并且可以正常工作,但是当我尝试在单元测试中测试此方法时,出现以下异常: 默认情况下,Android框架随附的软件包的类似乎在Java中不可用。 有没有一种方法可以解决此问题,以便可以对解析JSON的类进行单元测试? 问题答案: 您需要做的就是将以

  • 单元测试,对独立的代码功能片段,由编写代码的团队进行测试,也是一种编码,而非与之不同的一些事情。设计代码的一部分就是设计它该如何被测试。你应该写一个测试计划,即使它只是一句话。有时候测试很简单:“这个按钮看起来好吗?”,有时候它很复杂:“这个匹配算法可以精确地返回正确的匹配结果?”。 无论任何可能的时候,使用断言检查以及测试驱动。这不仅能尽早发现 bug,而且在之后也很有用,让你在其他方面担心的谜

  • 我在表中显示了页面列表。每个页面都有属性主页,我希望在datatable中有一列单选按钮绑定到此属性,并且用户只能检查一个值。如何在服务器端获取此值? 我看到了一些类似以下的例子:http://jforum.icesoft.org/JForum/posts/list/14157.page,但我想知道在这种情况下最好的做法是什么。

  • 问题内容: 如何在单元测试中测试 hashCode()函数? 问题答案: 每当我覆盖equals和hash代码时,我都会按照Joshua Bloch在“ Effective Java”第3章中的建议编写单元测试。我确保equals和hash代码是自反的,对称的和可传递的。我还确保“不等于”对所有数据成员均正常工作。 当我检查对equals的调用时,我还要确保hashCode的行为符合预期。像这样:

  • 问题内容: 我一直在学习AngularJS,并且在单元测试方面进展非常顺利,但是我遇到了一个棘手的问题。 假设我有一个简单的表格,例如: 如果我正在测试类似控制器的东西,我知道我会这样写(使用Jasmine + Karma): 但是我不知道我需要注入哪些服务,也没有运气在指南或文档中找到有关单元测试的文档。 一个单元如何在Angular中测试表单? 问题答案: 我不认为这是对此类内容进行单元测试的

  • 问题内容: 我认为这很简单,但是正如标题所示,在任何地方都找不到如何执行此操作的方法,就像成功提交表单后如何处理ajax一样。我尝试搜索它,但所看到的只是我需要的相反内容,即在ajax发布后提交。我将尝试草拟与Im正在研究的程序非常相似的程序。 这是我的表格。 这是一个有关ajax帖子的示例(不要介意该帖子的逻辑): 现在,我想做的就是提交表单时,如果提交成功,就会触发ajax发布。因此,就像在一