天天看點

對投屏實作的調研

1 網易雲

1 seek到最後沒有沒有播放下一集?

XXX上seek到最後,stopPlayer退出播放器,發送STOPPED事件給手機,手機播放下一首歌,給XXX發送新的URI

确定問題:

XXX狀态是否正确,設定為stop,set dlna status:stopped

訂閱是否正常

發送STOPPED消息給訂閱者,也就是給手機。notify消息是否正确。

2 騰訊app

投屏時不會發送subscribe訂閱XXX的消息

當XXX的play狀态變化playing pause stop時無法發notify消息告訴騰訊app,而騰訊app自己主動間隔1s發送一次getTransportInfo擷取XXX的當期播放狀态.

3 優酷

投屏後,用遙控器等其他方式使視訊暫停/播放/退出,不是XXX給手機發了通知消息,手機app并沒有訂閱XXX的事件

手機app時通過getTransportInfo主動擷取播放狀态來更新控制界面的狀态,差不多1s中就發一個getTransportiInfo請求.

4 youtube收到的視訊格式是m3u8

多碼流的m3u8,不能直接播放。

取某一分辨率的視訊m3u8和對應的音頻m3u8,建立單一碼流的m3u8檔案,播放器可以播放。用ffplay驗證可行。

音頻和視訊m3u8檔案稱為二級檔案,新的m3u8檔案稱為一級檔案。

用這種方案解決youtube隻有畫面沒有聲音問題,原因時隻播放了二級檔案(畫面檔案),沒有播放音頻檔案。

5 手機接收到廣播消息,添加裝置

手機向裝置發送訂閱消息,XXX沒有收到。

在ControlPoint發送消息(sendMessage)失敗的時候會移除裝置,消息沒有發送出去。

在出問題的root的Android手機上抓包,手機端确實沒有發送資料包到XXX上。

分析鍊路層網絡:

在Android上adb shell

arp -a發現電視果的IP對應的MAC位址時imcomplete狀态,說明手機在鍊路層找不到XXX裝置。

arp -s ip mac後手機可以給XXX發送消息。

6 ControlPoint

SSDPNotifySocketList receive ssdp notify消息ssdp:alive ssdp:byebye

SSDPSearchResponseSocketList 接收M-Search消息的Response消息

Disposer 5s檢測一次,發M-Search消息

RenewSubscriber 續訂30s續訂一次

7 MediaRender

HTTPServerList HTTP監聽伺服器

QiyiHttpServerList HTTP快速通道監聽伺服器

QiyiUDPHttpServer UDP快速通道監聽伺服器

SSDPSearchSocketList 監聽M-Search消息

announce 發送notify消息 ssdp:alive ssdp:byebye

Advertiser 間隔5-30s随機時間發送notify消息

8 Airplay協定

/action

需要response

接收到的資料是plist格式,可用字段:

type:【playlistRemove】【playlistInsert】【unhandledURLResponse】

params:【item】【afterItem】

item:【uuid】【Content-Location】【Start-Position】

【Content-Location】-播放位址

【Start-Position】-播放起始位置

/pair-verify /pair-setup 配對驗證

/server-info

需要response

擷取server的一些參數

/reverse

需要response

搜狐iOS 在/play 設定廣告的視訊位址,收到stopped事件後,通過/action playlistinsert設定視訊内容位址,需要在/action playlistinsert處理資料組合視訊位址http://host+path

/rate?value=0.000000 收到這個請求,airplay走暫停邏輯, 電視果視訊暫停

過濾條件

POST /audioMode RTSP/1.0