将 Media Foundation H.264 编码器与 live555 一起使用
Use Media Foundation H.264 encoder with live555
我想使用 live555 流媒体库创建 H.264 RTSP 流媒体。为了对视频帧进行编码,我想使用 H.264 编码器 MFT。编码使用基本处理模型进行工作(我不构建图形,而是手动调用 MFT)。使用自定义 FramedSource
源进行流式传输似乎在程序未崩溃且流在 VLC 播放器中稳定的意义上也有效。然而,图像残缺 - 没有颜色,奇怪的线条图案等
我假设我将错误的数据从编码器传递到流媒体库中,但我无法找出该库实际期望的是什么。我读过 Microsoft H.264 编码器在样本中输出多个 NAL。我进一步发现 live555 需要在 doGetNextFrame
中返回单个 NAL。因此,我尝试识别各个 NAL(What does this H264 NAL Header Mean? 声明 header 可以是 3 或 4 个字节 - 我不知道从哪里获取 MF 使用的信息,但调试器的内存视图建议 4 个字节):
for (DWORD i = 0; i < sampleLen; ++i) {
auto v = *reinterpret_cast<unsigned int *>(sampleData + i);
if (v == ::htonl(1)) {
nals.push_back(sampleData + i);
}
}
这段代码通常在 MFT 的一个输出样本中识别多个项目。但是,如果我将此循环找到的范围复制到 fTo
输出缓冲区,VLC 不会显示任何内容并在几秒钟后停止。我还在某处读到 live555 不想要幻数 0x00000001,所以我试图跳过它。客户端效果相同
是否有关于 live555 希望我复制到输出缓冲区的内容的文档?
Media Foundation 中的 H.264 编码器是否会生成可用于流式传输的输出样本?
我需要拆分输出样本吗?一旦找到幻数,我需要跳过多少(How to write a Live555 FramedSource to allow me to stream H.264 live 表明我可能需要跳过比幻数更多的内容,因为接受的答案只传递了 NAL 的有效负载部分)?
有什么方法可以测试H.264 MFT在基本处理模式下返回的样本是否形成有效的H.264码流?
这是我的做法 MFWebCamRtp。
我能够流式传输我的网络摄像头源并在 VLC 中查看它。没有必要深入研究 NAL 等。来自 Media Foundation H264 编码器的每个 IMFSample 都包含一个可以直接传递给 live555 的 NAL。
我想使用 live555 流媒体库创建 H.264 RTSP 流媒体。为了对视频帧进行编码,我想使用 H.264 编码器 MFT。编码使用基本处理模型进行工作(我不构建图形,而是手动调用 MFT)。使用自定义 FramedSource
源进行流式传输似乎在程序未崩溃且流在 VLC 播放器中稳定的意义上也有效。然而,图像残缺 - 没有颜色,奇怪的线条图案等
我假设我将错误的数据从编码器传递到流媒体库中,但我无法找出该库实际期望的是什么。我读过 Microsoft H.264 编码器在样本中输出多个 NAL。我进一步发现 live555 需要在 doGetNextFrame
中返回单个 NAL。因此,我尝试识别各个 NAL(What does this H264 NAL Header Mean? 声明 header 可以是 3 或 4 个字节 - 我不知道从哪里获取 MF 使用的信息,但调试器的内存视图建议 4 个字节):
for (DWORD i = 0; i < sampleLen; ++i) {
auto v = *reinterpret_cast<unsigned int *>(sampleData + i);
if (v == ::htonl(1)) {
nals.push_back(sampleData + i);
}
}
这段代码通常在 MFT 的一个输出样本中识别多个项目。但是,如果我将此循环找到的范围复制到 fTo
输出缓冲区,VLC 不会显示任何内容并在几秒钟后停止。我还在某处读到 live555 不想要幻数 0x00000001,所以我试图跳过它。客户端效果相同
是否有关于 live555 希望我复制到输出缓冲区的内容的文档?
Media Foundation 中的 H.264 编码器是否会生成可用于流式传输的输出样本?
我需要拆分输出样本吗?一旦找到幻数,我需要跳过多少(How to write a Live555 FramedSource to allow me to stream H.264 live 表明我可能需要跳过比幻数更多的内容,因为接受的答案只传递了 NAL 的有效负载部分)?
有什么方法可以测试H.264 MFT在基本处理模式下返回的样本是否形成有效的H.264码流?
这是我的做法 MFWebCamRtp。
我能够流式传输我的网络摄像头源并在 VLC 中查看它。没有必要深入研究 NAL 等。来自 Media Foundation H264 编码器的每个 IMFSample 都包含一个可以直接传递给 live555 的 NAL。