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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

第三季2:ORTP库的源码分析、RTP发送实验的源码分析

發布時間:2023/12/20 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第三季2:ORTP库的源码分析、RTP发送实验的源码分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以下內容源于朱有鵬課程,如有侵權,請告知刪除。

一、ORTP庫源碼分析

1、ORTP庫概覽

(1)庫提供一堆功能函數(本身沒有main),都在src目錄下

(2)庫的使用給了案例(有main),在src/tests目錄下

(3)相關數據結構和頭文件,在include/ortp目錄下

(4)ortp實現了rtp和rtcp協議,前者負責傳輸,后者負責控制和同步協調

2、ORTP庫的使用案例分析

src/tests/rtpsend.c的函數調用關系

  • ortp_init
  • ? ? ? ? ?av_profile_init(&av_profile)初始化全局變量av_profile(該變量記錄了可以識別哪些profile,如果你要用哪部分,要添加進來。有的本來已經添加,有的沒有但你要用的話,要自己添加。這也是為什么“第三季1二2”中為何要添加那行代碼的原因)。
  • ortp_scheduler_init? ? ORTP調度器:即仲裁機構(一段代碼),功能是在一個任務中完成多個會話的發送和接收,類似于select。
  • ? ? ? ? ?rtp_session_new? 會話創建

3、rtp的session

(1)rtp通過會話來管理數據發送和接收,會話的本質是一個結構體的實例化,該結構體管理很多信息。

(2)創建會話用rtp_session_new

(3)rtp發送用rtp_session_send_with_ts

(4)底層真正干活的還是socket接口那一套,參考rtpsession_inet.c

4、ORTP的一些小細節

(1)port.c中對OS的常用機制(任務創建和銷毀、進程管理和信號量等)進行了封裝,便于將ortp移植到不同平臺中。

(2)utils.c中實現了一個雙向鏈表

(3)str_util.c中實現了一個隊列管理

(4)rtpparse.c和rtcpparse.c文件實現了解析收到的rtp數據包的部分

(5)jitterctl.c中實現了jitter buffer來防抖。jitter buffer技術是ip 音視頻通信里相對比較高級的主題,jitter buffer模塊好壞通常是衡量一個voip客戶端/服務器好壞的技術點之一,尤其是在網絡抖動比較嚴重,如3g, wifi環境,數據包的rtt值不均衡往往會導致語音卡頓,丟字等現象,jitter buffer 模塊通過緩存一段數據包,把數據包重排,并均勻的送給播放端,一個好的jitter buffer實現通長是動態調整緩存大小的,在網絡延遲大,抖動嚴重時會動態增加緩存大小,在網絡恢復時動態減小緩存大小以減少端到端的播放延遲。

二、RTP發送實驗的源碼分析

注意:

1、這里的RTP發送實驗的源碼,是指修改后兩個文件

mpp/sample/venc/sample_venc.c

common/sample_common_venc.c

修改的內容以及源文件見“第三季1:ORTP庫的移植與局域網視頻傳輸”中的第三內容。

2、回憶起之前學過的關sample_venc.c文件,其中函數SAMPLE_VENC_1080P_CLASSIC有7個步驟。RTP發送實驗與之前學的,相同點在于前五個步驟是一樣的,不同點在于之前的sample_venc.c在第六步驟將數據一包一包地寫到文件里,而RTP發送實驗是將數據一包一包地發送出去。

1)第六步的代碼如下。

RTP發送實驗源碼的具體的改動,在SAMPLE_COMM_VENC_GetVencStreamProc函數以及它所調用的函數中:

1)SAMPLE_COMM_VENC_GetVencStreamProc函數代碼

?2)SAMPLE_COMM_VENC_SaveStream函數,以及調用的函數。

1、ortp庫相應API

  • 通過分析追蹤RTP發送源碼的第六步驟的SAMPLE_COMM_VENC_GetVencStreamProc函數中的rtpInit函數,發現其和src/tests/rtpsend.c中main函數部分代碼很類似。

2、發送函數的重點講解

即rtpSend函數,在修改后的common/sample_common_venc.c中。

3、可能的拓展方向

(1)裁剪sample到最簡化

(2)修改一些參數做實驗(譬如每包字節數、IP地址、端口號等)

4、VLC的sdp文件格式

總結

以上是生活随笔為你收集整理的第三季2:ORTP库的源码分析、RTP发送实验的源码分析的全部內容,希望文章能夠幫你解決所遇到的問題。

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