dlna原理
dlna原理
當下三大主流投屏協議,Airplay、Miracast、DLNA。Airplay(蘋果設備)、Miracast(安卓設備)都屬于鏡像投屏,也就是手機顯示什么,投屏到大屏幕上也顯示同樣的內容,唯獨DLNA比較特殊,它即支持安卓也支持蘋果設備,同時流媒體推送屬性還讓他不影響發送端設備的正常使用。盡管自身存在很大的局限性,但是不可忽略的是目前DLNA投屏的使用率是真的高。

原理:DLNA協議主要是解決局域網中設備之間的互聯、互通和互操作問題,在UPnP基礎之上定義了設備交互規范,其中AV框架規定了設備(媒體服務器MS,控制點CP,媒體播放器MR)之間的通信規范,具體分為以下步驟:
1.控制點基于SSDP協議查找/發現網絡中媒體服務器
2.控制點調用媒體服務器MS的內容目錄服務CDs的Browser接口瀏覽媒體文件,選中感興趣的媒體文件后,調用媒體播放器MR的媒體傳輸服務AVT的SetAVTransport接口把鏈接地址URI發送給媒體播放器。
3.控制點調用媒體播放器上的AVT和RCs服務來控制媒體播放(播放,暫停,聲音和亮度調節)

交互過程:
媒體播放器和媒體服務器之間基于http(標配)或rtsp(可選)進行媒體文件傳輸,控制點不參與媒體傳輸過程,控制點主要是來協調媒體服務器和媒體播放器之間的互操作功能的,比如選擇兩者都支持的傳輸協議和媒體格式,通常會有個UI界面來操作各自提供的接口(UPnPAction),比如手機,遙控器等,下面描述控制點播放視頻的交互過程。
1.發現DLNA網絡中的音視頻設備(媒體服務器和媒體播放器):控制點會自動通過UPnP的發現機制來檢測到網絡中的媒體服務器和媒體呈現器,一種通過手機以組播的形式發送UPnPM-SEARCH命令來查找設備,另外是網絡中的音視頻設備會間隔地發送ssdp:alive消息告訴控制點其設備信息和其提供的服務。
2.查找、瀏覽網絡中媒體服務器的視頻:調用媒體服務器提供的內容目錄服務接口ContentDirectory::Search()或Browser(),媒體服務器會以didl-lite規范返回目錄及文件信息,其中包括支持的傳輸協議和格式
3.獲取媒體播放器的協議信息:控制點調用媒體播放器連接管理服務的接口ConnectionManager::GetProtocolInfo()來獲取傳輸協議和支持的數據格式列表。
4.匹配傳輸協議和數據格式:控制點在第2步從媒體服務器獲取到的視頻格式和支持的傳輸協議,在第3步同樣獲取到媒體播放器支持的傳輸協議和媒體數據格式,通過比較選擇兩者都支持的協議和數據格式。
5.配置媒體服務器和媒體播放器:DLNA中媒體服務器和媒體播放器必須都支持連接管理服務,控制點通過調用ConnectionManger::PrepareForConnection()接口來做預配置處理并返回傳輸服務(AVTransport)的實例Id,以方便多個控制點操作狀態的管理
6.選取要播放的視頻:控制點根據第2步中返回的視頻列表中選擇要播放的視頻,調用音視頻傳輸服務AVTransport::SetAVTransportURI()接口來告訴媒體播放器資源存儲地址。
7.開始視頻傳輸:控制點調用媒體播放器的音視頻傳輸服務AVTransport:play()/stop()接口進行控制操作,這個時候實際就是媒體播放器從媒體服務器上下載視頻播放,控制點不參與視頻數據的傳輸過程。
8.視頻顯示控制:控制點調用媒體播放器的呈現控制服務RendringControl的接口來調整顯示效果,如控制亮度,對比度,聲音大小等。
9.重復選擇下一個視頻:控制點通過調用AVTransport::SetAVTransportURI()或者AVTransport::SetNextAVTransportURI()接口來重復上面的過程播放下一個視頻。
10.播放結束:當控制點不想再播放視頻時,就可以調用連接管理服務ConnectionManager::ConnectionComplete()接口來結束媒體服務器和媒體播放器。
溫馨提示:關于DLNA投屏的底層概念《Airplay、Miracast、DLNA傳輸原理的底層搭建》有介紹。
