日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/12 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在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. 在視頻幀攜帶,完全和視頻保持同步,這個是其他傳輸通道無法做到的。

總結

以上是生活随笔為你收集整理的如何在RTSP/RTMP直播过程中加入SEI扩展数据发送和接收解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。