如何将AnnexB nal单位格式的live h264流复用到flv容器

时间:2016-05-18 13:22:32

标签: ffmpeg h.264 libavformat

我有一个Android设备,它将发送原始的H264 AnnexB NAL单元流,如[0,0,0,1,103,...] [0,0,0,104,...] [0,0,0,101 ,...] [0,0,0,1,65,...] [0,0,0,1,65,...]并尝试将它们复制到flv容器中并将其发送到nginx-with rtmp模块使用ffmpeg的libavformat。

如果我将收到的实时流保存到本地文件,请说test.h264。我可以使用ffmpeg命令" ffmpeg -i test.h264 -f flv rtmp:// my / server / url"将其复制到服务器上。但我不知道如何处理直播。

我注意到ffmpeg / libavformat / avc.c有2个功能似乎达到了我的目标。 但我不确定。

这是ffmpeg的代码

int ff_avc_parse_nal_units(AVIOContext *pb, const uint8_t *buf_in, int size)
{
    const uint8_t *p = buf_in;
    const uint8_t *end = p + size;
    const uint8_t *nal_start, *nal_end;

    size = 0;
    nal_start = ff_avc_find_startcode(p, end);
    for (;;) {
        while (nal_start < end && !*(nal_start++));
        if (nal_start == end)
            break;

        nal_end = ff_avc_find_startcode(nal_start, end);
        avio_wb32(pb, nal_end - nal_start);
        avio_write(pb, nal_start, nal_end - nal_start);
        size += 4 + nal_end - nal_start;
        nal_start = nal_end;
    }
    return size;
}

int ff_avc_parse_nal_units_buf(const uint8_t *buf_in, uint8_t **buf, int *size)
{
    AVIOContext *pb;
    int ret = avio_open_dyn_buf(&pb);
    if(ret < 0)
        return ret;

    ff_avc_parse_nal_units(pb, buf_in, *size);

    av_freep(buf);
    *size = avio_close_dyn_buf(pb, buf);
    return 0;
}

感谢所有有用的回复。

谢谢!

0 个答案:

没有答案