首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用MediaStreamSource播放来自matroska文件的h264帧?

如何使用MediaStreamSource播放来自matroska文件的h264帧?
EN

Stack Overflow用户
提问于 2009-04-09 23:25:22
回答 3查看 3.4K关注 0票数 2

我正在尝试使用MediaStreamSource在Silverlight3中渲染来自mkv h264文件的帧。解析mkv文件很好,但是我正在为SL中的CodecPrivateData的期望值而努力,它必须是一个字符串,而来自mkv的PrivateData信息是一个二进制元素。此外,我不确定帧应该以什么形式提供给SL (例如,它们存储在mkv / mp4中的方式,或者转码为NALU),有人知道这方面的信息吗?

EN

回答 3

Stack Overflow用户

发布于 2011-05-01 21:01:38

在经历了我自己的类似问题和很多令人费解的事情之后,我能够回答这个问题。

  • 在ReportOpenMediaCompleted()中,在设置视频流描述时,您可以忽略CodecPrivateData属性字符串,而不管文档中是怎么说的。这不是必需的。(假设您的NAL单元流包括SPS和PPS单元)
  • 对于每个GetSampleAsync()请求,您应该将一个NAL单元发送回MediaElement。这包括非图像NAL单元,例如SPS / PPS单元。
  • 当您发送NAL单元时,请确保每个单元的开头有3个字节的起始码(0x00 0x00 0x01)。(这类似于‘附件B’格式,但不完全相同)
  • 在ReportGetSampleCompleted()中,将'Offset‘的值设置为等于NAL开始代码的开头,而不是实际数据。(在大多数情况下,假设您使用每个NAL单元的新流,则该值将为零)

我有blogged a little about the experience here,希望能写更多的博客。

票数 4
EN

Stack Overflow用户

发布于 2009-05-29 14:11:54

CodecPrivateData是'avcC‘原子的内容,它是MP4文件中'stsd’原子的子元素。您必须将二进制数据转换为字符串。它看起来像这样:"014D401FFFE10017674D401F925402802DD0800000030080000018478C195001000468EE32C8“

您还必须将mkv/mp4长度替换为NALU。我写了一些关于这方面的东西(为了让H.264文件可以流畅地工作)。

致以敬意,

请参阅:Smooth Streaming H264

票数 0
EN

Stack Overflow用户

发布于 2012-07-24 18:13:21

根据文档,编解码器私有数据应设置为00000001 + sps + 00000001 + pps。然而,文档是错误的,CodecPrivateData的价值似乎被完全忽略了。相反,您需要将SPS和PPS (当然带有附件b标头)作为GetSampleAsync的第一个和第二个结果传递。

对于常规媒体样本,正常的4字节附件b标头可以正常工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/736235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档