如何在RTSP/RTMP直播过程中加入SEI扩展数据发送和接收解析

在直播系统中,除了直播音视频之外,有时候还想从主播端发布文本信息等,这些信息可以不通过视频传输通道发送给用户播放端,但如果传输的数据想和视频保持精准同步,那最好的办法就是这些信息和视频数据打包在一起传输,并通过h264 sei方式就可以把数据放入h264 Access Unit中传输。

扩展SEI有使用场景:

1、公告广播:推送将相对/绝对时间戳/时间/公告内容发到播放端,播放端实时接收消息并做相应的逻辑处理;

2、冲顶大会:推流端实时将题目分发到播放端,借助于大牛直播SDK低延迟特性,轻松实现“音-画-题”同步接收;

3、直播:推流端将歌词/字幕分发到播放端,播放端实时绘制出歌词;

4、应急指挥/单兵:推送端将GIS信息/现场采集到的数据实时写入并分发到播放端;

5、在线教育:推流端将激光笔涂鸦操作分发到播放端,播放端实时划圈划线,实现特定特效。

扩展SEI调用demo(以Windows平台为例):

 1. 启动推送端软件: SmartPublisherDemo.exe,可到 Github 下载大牛直播SDK的相关测试软件或demo源码。

 2. 做如下配置:

3. 可以点击自动发送文本按钮;

4. 打开播放端SmartPlayer.exe查看数据传输播放效果:

扩展SEI调用demo代码说明:

1. 推送端(对应工程:WIN-PublisherSDK-CPP-Demo):

		/*++++发送用户自定义数据相关接口++++*//** 1. 目前使用sei机制发送用户自定数据到播放端* 2. 这种机制有可能会丢失数据, 所以这种方式不保证接收端一定能收到* 3. 优势:能和视频保持同步,虽然有可能丢失,但一般的需求都满足了* 4. 目前提供两种发送方式 第一种发送二进制数据, 第二种发送 utf8字符串*//** 设置发送队列大小,为保证实时性,默认大小为3, 必须设置一个大于0的数* 如果数据超过队列大小,将丢掉队头数据* 这个接口请在 StartPublisher 之前调用*/NT_UINT32(NT_API *SetPostUserDataQueueMaxSize)(NT_HANDLE handle, NT_INT32 max_size, NT_INT32 reserve);/** 清空用户数据队列, 有些情况可能会用到,比如发送队列里面有4条消息再等待发送,又想把最新的消息快速发出去, 可以 * 先清除掉正在排队消息, 再调用PostUserXXX  **/NT_UINT32(NT_API *ClearPostUserDataQueue)(NT_HANDLE handle);/** 发送二进制数据* data: 二进制数据* size:数据大小* 注意: 1.目前数据大小限制在256个字节以内,太大可能会影响视频传输,如果有特殊需求,需要增大限制,请联系我们* 2. 如果积累的数据超过了设置的队列大小,之前的队头数据将被丢弃* 3. 必须再调用StartPublisher之后再发送数据*/NT_UINT32(NT_API *PostUserData)(NT_HANDLE handle, const NT_BYTE* data, NT_UINT32 size, NT_INT32 reserve);/** 发送utf8字符串* utf8_str: utf8字符串* 注意: 1. 字符串长度不能超过256, 太大可能会影响视频传输,如果有特殊需求,需要增大限制,请联系我们* 2. 如果积累的数据超过了设置的队列大小,之前的队头数据将被丢弃* 3. 必须再调用StartPublisher之后再发送数据*/NT_UINT32(NT_API *PostUserUTF8StringData)(NT_HANDLE handle, NT_PCSTR utf8_str, NT_INT32 reserve);/*----发送用户自定义数据相关接口----*/

2. 播放端(对应工程:WIN-PlayerSDK-CPP-Demo):

		/*设置用户数据回调*/NT_UINT32(NT_API *SetUserDataCallBack)(NT_HANDLE handle,NT_PVOID call_back_data, NT_SP_SDKUserDataCallBack call_back);/*设置视频sei数据回调*/NT_UINT32(NT_API *SetSEIDataCallBack)(NT_HANDLE handle,NT_PVOID call_back_data, NT_SP_SDKSEIDataCallBack call_back);
/*
*
* 用户数据回调,目前是推送端发送过来的
* data_type: 数据类型,1:表示二进制字节类型. 2:表示utf8字符串 
* data:实际数据, 如果data_type是1的话,data类型是const NT_BYTE*, 如果data_type是2的话,data类型是 const NT_CHAR*
* size: 数据大小
* timestamp: 视频时间戳
* reserve1: 保留
* reserve2: 保留
* reserve3: 保留
*/
typedef NT_VOID(NT_CALLBACK* NT_SP_SDKUserDataCallBack)(NT_HANDLE handle, NT_PVOID user_data,NT_INT32  data_type,NT_PVOID  data,NT_UINT32 size,NT_UINT64 timestamp,NT_UINT64 reserve1,NT_INT64  reserve2,NT_PVOID  reserve3);/*
*
* 视频的sei数据回调
* data: sei 数据
* size: sei 数据大小
* timestamp:视频时间戳
* reserve1: 保留
* reserve2: 保留
* reserve3: 保留
* 注意: 目前测试发现有些视频有好几个sei nal, 为了方便用户处理,我们把解析到的所有sei都吐出来,sei nal之间还是用 00 00 00 01 分隔, 这样方便解析
* 吐出来的sei数据目前加了 00 00 00 01 前缀
*/
typedef NT_VOID(NT_CALLBACK* NT_SP_SDKSEIDataCallBack)(NT_HANDLE handle, NT_PVOID user_data,NT_BYTE*  data,NT_UINT32 size,NT_UINT64 timestamp,NT_UINT64 reserve1,NT_INT64  reserve2,NT_PVOID  reserve3);

SEI优势

1. 不依赖于相关协议,rtsp和rtmp都可以,其他协议只要播放端支持SEI解析的都可以使用;

2.  兼容性很好,如果播放端不支持自定义SEI数据解析,把SEI数据丢给H264解码器,解码器只是忽略掉,并不影响正常播放,上述操作也可以用VLC来播放,播放正常,只是不显示SEI消息;

3. 在视频帧携带,完全和视频保持同步,这个是其他传输通道无法做到的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/553146.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网易邮箱大师如何添加Word附件 添加附件方法步骤详细介绍

网易邮箱大师是一款非常好用的邮箱软件,可同时管理包括网易的各大邮箱,界面简洁,非常好用,其中还有很多功能,比如添加附件等,但是很多小伙伴不知道怎么添加Word及其他附件,接下来看完这篇文章你…

RTSP播放器开发过程中需要考虑哪些关键因素

好多开发者,在自研或者选择市面上的播放器的时候,除了常规的播放功能,还有很多点值得关注,如延迟、资源占用、网络异常处理、多实例支持、长时间运行稳定性等。以下是我们开发直播播放器过程中,考虑的部分关键因素&…

如何拉取公网RTSP/RTMP流在内网多客户端播放

好多情况下,一路RTSP或RTMP网络流过来后,想共享给更多局域网内的客户端播放,一般来说,有两种设计方案: 1. 拉取的RTSP或RTMP流,回调后的数据,转推RTMP服务器,内网部署一台RTMP服务器…

爱链工具怎么使用 爱链工具详细使用图文教程

爱链工具是爱站seo软件独立推出的一款免费友链交换平台,也是目前互联网上最强外链交换平台,不但拥有丰富的友链资源,智能的链接匹配系统,全面的SEO基础数据等等,而且率先推出目录链接交换功能,可以大大提升…

如何在Unity3d平台下低延迟播放RTMP或RTSP流

随着VR类、工业仿真、智慧城市等场景的快速发展,开发者对Unity3d低延迟的直播需求量越来越大,前两年,大牛直播SDK发布了Windows平台、Android平台和iOS平台的Unity3d RTMP和RTSP的播放,好多公司用起来体验都非常好,以下…

轻量级RTSP服务存在的意义

为什么要设计轻量级RTSP服务 轻量级RTSP服务解决的核心痛点是避免用户或者开发者单独部署RTSP或者RTMP服务。 轻量级RTSP服务可满足内网无纸化/电子教室等内网超低延迟的低并发需求,避免让用户配置单独的服务器,大牛直播SDK在推送端发布了轻量级RTSP服…

foxmail邮件怎样打印日历

foxmail邮件中的日历有很多信息,想要打印日历,该怎么打印呢?我们点击日历信息。点击设置按钮,再点击打印按钮,先进行设置打印机,然后打印邮件的日历,下面我们就来看看详细的图文教程。 foxmail邮件怎样打…

Windows平台RTMP/RTSP直播推送模块设计和使用说明

开发背景 好多开发者一直反馈,Windows平台,做个推屏或者推摄像头,推RTMP或者RTSP出去,不知道哪些功能是必须的,哪些设计是可有可无的,还有就是,不知道如何选技术方案,以下是基于我们…

跨平台低延迟的RTMP/RTSP直播播放器设计实现

开发背景 2015年,当我们试图在市面上找一款专供直播播放使用的低延迟播放器,来配合测试我们的RTMP推送模块使用时,居然发现没有一款好用的,市面上的,如VLC或Vitamio,说白了都是基于FFMPEG,在点…

win7系统锁定计算机设置方法

我们都知道电脑长时间不使用的话,计算机就会自动进入锁定状态,但是也有用户不想让计算机自动进入锁定状态,但是却不知道应该怎么操作,为此非常苦恼,那么Win7锁定计算机怎么设置呢?今天为大家分享win7系统锁定计算机设…

Windows平台基于RTMP实现一对一互动直播

目前市面上大多一对一互动都是基于WebRTC,缺点如下: 服务器部署非常复杂,不利于私有部署,在一些私密性高的场景下,无法使用,如公安、市政等体系;传输基于UDP,很难保证传输质量&…

网易云音乐电脑版怎么下载电台节目 主播电台节目下载教程

网易云音乐不仅可以听歌,还可以在主播电台中,听到各类主播的声音,下面我们就来讲讲网易云音乐电脑版怎么下载电台节目,一起来看教程吧! 网易云音乐电脑版怎么下载电台节目 主播电台节目下载教程 网易云音乐PC版主播电台节目下载…

如何实现RTMP推送Android Camera2数据

Camera2简介 在Google 推出Android 5.0的时候, Android Camera API 版本升级到了API2(android.hardware.camera2), 之前使用的API1(android.hardware.camera)就被标为 Deprecated 了。 Camera API2相较于API1有很大不同, 并且API2是为了配合HAL3进行使用的, API2有很多API1不…

Android平台RTMP多实例推送的几种情况探讨

好多开发者提到,如何实现Android平台,多实例推送,多实例推送,有几种理解: 多路编码,多个实例分别推送到不同的RTMP URL(如Android采集板卡同时接2路出去);同一路编码&am…

雨林木风win11 64位全新专业版系统v2021.08

雨林木风win11 64位全新专业版系统v2021.08是目前非常火热的电脑操作系统,系统运行速度非常的快速,拥有稳定、安全、兼容性强等特点,多样化的服务可供你的使用,支持在线的升级,非常的便捷,可以提高系统的性…

面向内网无纸化会议/智慧教室/实时同屏,组播还是RTMP?

一、背景 为满足内网无纸化/电子教室等内网超低延迟需求,避免让用户配置单独的服务器,我们研发了轻量级RTSP服务开发包。 单播不再赘述,这里重点介绍下我们的组播技术方案: 组播解决的主要痛点是服务器部署和带宽占用问题&…

打印更无缝:微软改善Win11中通用打印体验

微软昨日透露,将会在 Windows 11 系统中改进打印体验。从下面的截图中可以看到,用户可以直接在设置应用中添加打印机。对于使用通用打印机驱动的打印机,微软增加了为打印作业添加密码的功能。 打印更无缝:微软改善Win11中通用打印…

Windows平台如何快速实现RTSP/RTMP直播播放

前段时间,我们在 https://blog.csdn.net/renhui1112/article/details/104143794 提到“RTSP播放器开发过程中需要考虑哪些关键因素”,本次主要介绍,如何调用SDK实现RTSP/RTMP播放能力。 本文以调用大牛直播SDK为例: demo说明 SD…

Windows平台RTSP播放器/RTMP播放器设计需要考虑的几个点

我们在实现Windows平台RTSP播放器或RTMP播放器的时候,需要考虑的点很多,比如多实例设计、多绘制模式兼容、软硬解码支持、快照、RTSP下TCP-UDP自动切换等,以下就其中几个方面,做个大概的探讨。 1. 视频绘制模式 我们在实现Windo…

网易邮箱大师如何定时发送 定时发送邮件方法步骤详解

网易邮箱大师是我们日常使用邮箱的最佳软件,不仅能批量登录邮件,还能定时发送邮件,可谓功能齐全,很多小伙伴不知道如何定时发送邮件,那么接下来小编说的这篇文章肯定会对你有帮助。 操作步骤如下: 1、打开…