将live Foundation H.264编码器与live555一起使用

时间:2016-02-04 17:44:55

标签: h.264 ms-media-foundation 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?状态,标头可以是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流?

1 个答案:

答案 0 :(得分:3)

这是我如何做到的MFWebCamRtp

我能够流式传输网络摄像头Feed并在VLC中查看。没有必要深入研究NAL等。 Media Foundation H264编码器中的每个IMFSample都包含一个可以直接传递给live555的NAL。