我在 C# 中使用托管媒体聚合 - https://net7mma.codeplex.com/ .
我有一个 Rtsp 客户端,它接收以 h264(有效负载类型 96)编码的 RTP 帧。 我希望能够将帧保存到视频文件中,并且能够告诉视频何时开始\结束。
我做了一些阅读,我读到一个一个地解码 h264 帧是一个问题。我真的不明白为什么。
这是为我收到的每个 RTP 帧引发的方法
void Client_RtpFrameChanged(object sender, Media.Rtp.RtpFrame frame)
{
// Decode
}
- 谁能解释为什么逐个解码 h264 帧会出现问题?
- 是否有用于此的开源/库/dll?
非常感谢!
最佳答案
RtspServer 项目中有一个包含的类。
类是 RFC6184Media,它包含打包和解包的方法,并处理所有已定义的 Nal Unit 类型。
调用 Depacketize 后,有一个包含原始比特流有效负载的缓冲区,您必须添加一个由 0x000001 组成的起始代码,然后是原始比特流中包含的数据。
该项目的讨论区中有几个示例。
之后,您可以将流提供给解码器进行解码,然后才能显示帧;通常通过从 Yuv 到 Rgb 的转换,分别对应编码时使用的子采样。
我可以看到关于为对应于一个帧的几个静态数据包添加一个小演示,并展示如何实现预期的结果。
将来如果您在项目页面上进行讨论,我可能会更快地进行讨论。
关于c# - 解码 H264 帧 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25604108/