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