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

如何将H.264 UDP数据包转换为可播放的媒体流或文件(碎片整理)

郝昊东
2023-03-14
    null

两者都有一些令人困惑的小区别(见下文)。

但首先让我们来看看简单的部分。正如我从摄像头看到的,有SPS和PPS数据包发送。所有剩余的数据包都是分段帧,有没有索引。

对于所有没有帧的数据包(在我的例子中只有NALUnitType 7和8),我去掉了RTP报头(12字节),并在前面添加起始字节3x0字节和1 x1(00 00 00 01)。

如果设置了起始位,则有一个新的有效载荷报头构造为:[3个NAL单位位(来自第一个字节)5个NAL单位位(来自第二个字节)]
这给出了非idr片的NALUnitType 1或idr片的5。这是根据规范。

我使用这个新的有效负载头(1字节),并将没有2字节头的有效负载附加到一个新包中。以相同的方式添加所有连续的片段(12字节的RTP报头、2字节的单元类型信息),直到看到结束位信息。当看到结束时,我将开始字节(00,00,00,01)放在这个数据包的前面,并将它写到流中。

问题是无法解码,原因不明。我读过的答案中答案2的不同之处在于,有效负载报头的第二个字节也可能被放入翻译后的数据包中。但我两个都试过了,还是没有运气。

大概是新造的溪流里少了什么别的东西吧?还是我在碎片整理中出错了?

共有1个答案

东门清夷
2023-03-14

托马斯,

我正在试着自己去理解这一切。在我看来,通过阅读这篇文章:如何处理原始的UDP数据包,以便它们能够被directshow源过滤器中的解码器过滤器解码,而您的“开始字节”被关闭了一个字节。我想是3个字节,不是4个...截至0:00 00 01

也许这就是它遇到麻烦的地方。

 类似资料:
  • 我在PCAP文件中捕获了H264流,并试图从数据中创建媒体文件。容器并不重要(avi、mp4、mkv、...)。 当我使用Videosnarf或rtpbref(结合在每个数据包之前添加00 00 00 01的python代码)然后ffmpeg时,只有当输入帧率恒定(或接近恒定)时,结果才OK。但是,当输入为vfr时,结果播放得太快(在同样罕见的情况下太慢)。 例如: videosnarf-我捕捉到

  • 问题内容: 我想访问YouTube视频并使用自己的媒体播放器播放。我可以使用youtube数据API获取视频属性(标题,网址等)。我可以访问视频流并使用我自己的媒体播放器(例如Android Media Player)播放它。我正在JAVA中尝试所有这些。 提前致谢.. :) 问题答案: 你不能 请查看此处以进一步了解API可以处理的内容: YoutubeAPI 如果可以在其中获得InputStr

  • 当我使用MediaPlayer播放mp3文件时,系统会报告错误日志:。但是RealPlayer是正常的。 我发现它的错误只发生在更高的ROM版本。像4.0版本一样,它有错误。在2.3版中,它没有这个错误。 代码: 日志猫错误:

  • 我想测试以下数据集:https://www.tensorflow.org/datasets/catalog/speech_commands 当我加载时 音频文件是类型的数组,采样值为16000。我找不到有关如何在此数据集中播放文件的任何信息。从其他数据集中,我能够播放WAV-声音。区别之一是,其他DS使用浮点数组,而此DS使用int数组。也许我错过了一个对话步骤? 很明显,我在数据集中尝试了多个索

  • 问题内容: 例如输入:(类型:) 转换示例:(类型:的切片) 问题答案: 除了mhutter的答案外,还请注意您的输入看起来像一个JSON数组(也许是来自JSON文本?)。 如果您这样处理,则可以将其内容编组为一个切片。直接解析其中的数字并不会更快(因为该包使用了反射),但是它肯定更简单: 输出(在Go Playground上尝试):