FFmpeg – 推流rtsp/rtmp实时加入sei自定义信息,附添加发送与接收解析代码

FFmpeg – 推流rtsp/rtmp实时加入sei自定义信息,附添加发送与接收解析代码

324.47MBRAR

本资源包含完整的Vs+Qt+FFmpeg代码。

视频介绍:https://wwm.lanzn.com/ibahQ1t3jekh

背景

在直播应用的开发过程中,如果把主播端消息事件传递到观众端,一般会以Instant Messaging(即时通讯)的方式传递过去,但因为消息分发通道和直播通道是分开的,因此消息与直播音视频数据的同步性就会出现很多问题。那么有没有在音视频内部传递消息的方法呢?答案是SEI

例:无人机的定时滚动/俯仰/高度/方向,以及得到帧的图像时,相应的参数也应该拉出来,此时把这些参数作为SEI发送。

SEI即为补充增强信息(Supplemental Enhancement Information)是码流范畴里面的概念,提供了向视频码流中加入信息的办法,是H.264/H.265 视频压缩标准的特性之一。

源码

必须说明:

推送sei端在每包发送512字节附加信息后,可能会导致程序异常。但在如下推送端代码中已解决该异常,可还是建议不要推送过于频繁且过于数据庞大。

笔者测试的情况是每包都推送512字节长度,发现的上述问题。当小于该字节数目或发送频率很低的情况则不会出现。

bool fill_sei_packet(unsigned char * packet, bool isAnnexb, const char * content, uint32_t size)

{

unsigned char * data = (unsigned char*)packet;

unsigned int nalu_size = (unsigned int)get_sei_nalu_size(size);

uint32_t sei_size = nalu_size;

nalu_size = reversebytes(nalu_size);

unsigned int * size_ptr = &nalu_size;

if (isAnnexb)

{

memcpy(data, start_code, sizeof(unsigned int));

}

else

{

memcpy(data, size_ptr, sizeof(unsigned int));

}

data += sizeof(unsigned int);

unsigned char * sei = data;

//NAL header

*data++ = 6; //SEI

//sei payload type

*data++ = 5; //unregister

size_t sei_payload_size = size + UUID_SIZE;

while (true)

{

*data++ = (sei_payload_size >= 0xFF ? 0xFF : (char)sei_payload_size);

if (sei_payload_size < 0xFF) break;

sei_payload_size -= 0xFF;

}

}

int get_sei_buffer(unsigned char * data, uint32_t size, char * buffer, int *count)

{

unsigned char * sei = data;

int sei_type = 0;

unsigned sei_size = 0;

//payload type

do {

sei_type += *sei;

} while (*sei++ == 255);

//数据长度

do {

sei_size += *sei;

} while (*sei++ == 255);

//检查UUID

if (sei_size >= UUID_SIZE && sei_size <= (data + size – sei) &&

sei_type == 5 && memcmp(sei, uuid, UUID_SIZE) == 0)

{

sei += UUID_SIZE;

sei_size -= UUID_SIZE;

if (buffer != NULL && count != NULL)

{

if (*count > (int)sei_size)

{

memcpy(buffer, sei, sei_size);

}

}

if (count != NULL)

{

*count = sei_size;

}

return sei_size;

}

return -1;

}

资源下载此资源下载价格为56.0金币,请先
资源下载
下载价格56.0 金币

资源声明(购买视为同意此声明):
1.在网站平台的任何操作视为已阅读和同意网站底部的注册协议及免责声明,本站资源已是超低价,且不提供技术支持
2.部分网络用户分享网盘地址有可能会失效,如发生失效情况请发邮件给客服code711cn#qq.com (把#换成@)会进行补发
3.本站站内提供的所有可下载资源(软件等等)本站保证未做任何负面改动;但本网站不能保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都不是100%无错或无bug;需要您有一定的基础能够看懂代码,能够自行调试修改代码并解决报错。同时本站用户必须明白,源码便利店对提供下载的软件等不拥有任何权利,其版权归该资源的合法拥有者所有。
4.本站所有资源仅用于学习及研究使用,请必须在24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担
5.因资源可复制性,一旦购买均不退款,充值余额也不退款

充值送金币,用余额购买,低至6.7折!立即充值

显示验证码
没有账号? 注册  忘记密码?