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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

JRtplib开发笔记(三):JRtplib库编程使用说明

發布時間:2024/8/1 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JRtplib开发笔记(三):JRtplib库编程使用说明 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原博主博客地址:https://blog.csdn.net/qq21497936
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/84957120

JRtplib開發筆記(一):JRtplib簡介、JThread庫編譯》:?https://blog.csdn.net/qq21497936/article/details/84785284
JRtplib開發筆記(二):JRtplib庫編譯、示例演示》:?https://blog.csdn.net/qq21497936/article/details/84785593
JRtplib開發筆記(三):JRtplib庫編程使用說明》:?https://blog.csdn.net/qq21497936/article/details/84957120
JRtplib開發筆記(四):JRtplib的VS開發環境搭建以及Demo》:?https://blog.csdn.net/qq21497936/article/details/84957708

?

? ? ? ? ? JRtplib開發筆記(三):JRtplib的使用說明

?

前話

? ? ? ? 前面編譯了jthread,jrtplib以及解析了源碼自帶示例,接下來介紹jrtplib的使用。

?

JRtplib使用說明

步驟一:使用JRtplib類需要先引入命令空間,如下:

using namespcace jrtplib;

步驟二:使用JRtplib需要創建一個RTPSession對象,類似于全局上下文句柄

RTPSession rtpSession;

步驟三:創建會話,您必須調用Create成員函數,該函數有兩個參數:

  • 第一個參數是RTPSessionParams類型,并指定會話的常規選項。必須顯式設置此類的一個參數,否則將無法成功創建會話,此參數是要發送的數據的時間戳單位,可以通過將某個時間間隔(以秒為單位)除以該時間間隔內的樣本數來計算,還可以設置是否接收數據包;
RTPSessionParams sessionparams; // 時間戳:1秒鐘8000個樣本 sessionParams.SetOwnTimestampUnit(1.0/8000.0) // 設置是否接收屬于本身的數據,true-接收,false-不接收 sessionParams.SetAcceptOwnPackets(true)
  • 第二個參數是指向RTPTransimissionParams實例的指針,并描述傳輸組件的參數,默認情況下,使用UDP over IPv4發送器,對于此特定發送其,傳輸參數應為RTPUDPv4RransmissionParams類型。
RTPUDPv4TransmissionParams transparams; // 設置本地接收的端口號 transparams.SetPortbase(8000)

? ? ? 如果庫是使用JThread支持編譯的,則傳入的數據將在后臺處理。如果在編譯時未啟用JThread支持,或者如果您在會話參數中指定不應使用輪詢線程,則必須定期調用RTPSession成員函數Poll來處理傳入數據并在必要時發送RTCP數據。

?

步驟四:加入監聽地址列表

加入地址(包括ip地址和端口號),

  • 發送端

若是發送端則是發送的目標地址,點對點發送與多播(組播)發送操作代碼不區分:

char destIp [16] = “224.0.0.1”; int destPort = 10000; RTPIPv4Address addr(ntohl(inet_addr(destIp)), destPort); status = sess.AddDestination(addr); if (status < 0) {std::cerr << RTPGetErrorString(status) << std::endl;exit(-1); }
  • 接收端

若是接收端則是設置本地監聽目標地址,一般是“127.0.0.1”和端口號:

char destIp [16] = “127.0.0.1”; int destPort = 10000; RTPIPv4Address addr(ntohl(inet_addr(destIp)), destPort); status = session.AddDestination(addr); if (status < 0) {std::cerr << RTPGetErrorString(status) << std::endl;exit(-1); }

組播則是組播地址+端口號,并且加入組播地址

char groupIp[16] = “224.0.0.1”; int port = 10000; RTPIPv4Address addr(ntohl(inet_addr(groupIp)), port); _rtpSession.JoinMulticastGroup(addr);

步驟五:開始接收/發送

? ? ? ? 先使用GotoFirstSourceWidthData獲取收到的數據源,然后開始循環接收,定義數據包的指針RTPpacket,然后進入循環接收是否有數據包GetNextPacket有的畫返回非NULL,獲取數據長度和收到的數據,可對數據進行處理,這里特別注意每次接收完成后需要調用DeletePacket對數據包進行刪除,結合了發送和接收的代碼如下:

// 開始接收數據 _rtpSession.BeginDataAccess(); if (_rtpSession.GotoFirstSourceWithData()) {do {// 數據包指針RTPPacket *packet;while ((packet = _rtpSession.GetNextPacket()) != NULL){// 獲取接收數據長度unsigned int recvSize = packet->GetPayloadLength();// 獲取接收數據unsigned char * recvData = (unsigned char *)packet->GetPayloadData();// 刪除數據包_rtpSession.DeletePacket(packet);// 獲取下一個有數據的數據源(rtp加入監聽地址的源)} while (_rtpSession.GotoNextSourceWithData());}// 關閉接收數據_rtpSession.EndDataAccess();// 睡眠100msRTPTime::Wait(RTPTime(0, 100)); }

步驟六:退出發送或者接收

? ? ? ? 發送退出記得釋放內存即可,但是接收退出有兩點要注意:

? ? ? ?第一點是若是開始接收數據BeginDataAccess一定要調用EndDataAccess否則不會關掉jthread線程,不會馬上退出,退出不了也就無法重新Create

? ? ? ? 第二點是接收了數據包則一定要調用DeletePacket數據包,然后調用銷毀和等待退出,只要調用了EndDataAccessAboutWait基本上是立即返回的,秒開秒關。

_rtpSession.Destroy(); _rtpSession.AbortWait();

?

JRtplib模塊化

? ? ??

?????? 編譯的靜態庫,不然在調用該庫運行的時候根據windows sdk版本問題,導致直接運行無反應,避免這些坑直接使用靜態庫,帶”_d”的是debug版本的庫。

?

JRtplib開發筆記(一):JRtplib簡介、JThread庫編譯》:?https://blog.csdn.net/qq21497936/article/details/84785284
JRtplib開發筆記(二):JRtplib庫編譯、示例演示》:?https://blog.csdn.net/qq21497936/article/details/84785593
JRtplib開發筆記(三):JRtplib庫編程使用說明》:?https://blog.csdn.net/qq21497936/article/details/84957120
JRtplib開發筆記(四):JRtplib的VS開發環境搭建以及Demo》:?https://blog.csdn.net/qq21497936/article/details/84957708

?

原博主博客地址:https://blog.csdn.net/qq21497936
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/84957120

?

總結

以上是生活随笔為你收集整理的JRtplib开发笔记(三):JRtplib库编程使用说明的全部內容,希望文章能夠幫你解決所遇到的問題。

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