我有一个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;
}
感谢所有有用的回复。
谢谢!