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