第一部分主要寫思路,
介紹幾個概念(網上有很多,簡單介紹):
RTSP:實時流傳輸協議,應用層協議,
作用:發起/終結流媒體,只用於控制媒體流的傳輸
RTP: RTP/RTCP一起使用,往往建立在UDP協議上,實行有序傳送
作用:傳輸流媒體數據,RTCP對RTP進行控制,同步
RTSP消息格式:
響應消息頭:
RTSP協議上的簡單交互:
其中獲取文件的大小,通過DESCRIBE,RTP端口號通過SETUP協商得到,一般取服務器發過來的最小的
上述的過程只是標準的、友好的rtsp流程,但實際的需求中並不一定按此過程。
其中第三和第四步是必需的!第一步,只要服務器客戶端約定好,有哪些方法可用,則option請求可以不要。第二步,如果我們有其他途徑得到媒體初始化描述信息(比如http請求等等),則我們也不需要通過rtsp中的describe請求來完成。第五、六步,可以根據系統需求的設計來決定是否需要
主要作用:建立連接,請求播放
RTP協議上:建立好了連接,傳輸數據通過RTP
VLC:有了數據之後,下載到本地,在VLC播放器上播放,播放器的控制通過RSTP,VLC解碼文件:
libvlc_new():創建libvlc_instance_t。
libvlc_media_new_path():創建libvlc_media_t。
libvlc_media_player_new_from_media():創建libvlc_media_player_t。
libvlc_media_player_release():釋放libvlc_media_player_t
libvlc_media_release():釋放libvlc_media_t。
libvlc_release():釋放libvlc_instance_t
libvlc_media_player_play():播放。
libvlc_media_player_pause():暫停。
libvlc_media_player_stop():停止。
以上基本介紹了流媒體播放中一些概念,
下面梳理一下過程:
建立SOCKET連接-->發RTSP消息-->RTP傳輸數據-->VLC上播放-->釋放資源
其中幾點需要注意的關鍵點:
RSTP中 :1、在客戶端如何解析,把RTSP格式組成字符串通過Socket接收然後解析,服務端通過LIVE555解析。
2、session作用,每個RTSP協議中都會有session,保證是改連接
RTP中:使用UDP協議,會存在緩衝區,當暫停時,播放器會把緩衝區的數據繼續播放,造成一定的延時,因此暫停需要暫停本地數據