咪咕视频DLNA投屏跳集问题分析
本文最后更新于:2024年12月24日 晚上
QA在测试公司投屏应用时,发现咪咕视频DLNA投剧集时有时候会跳过一集直接播下一集的问题。
尝试自行分析解决不了后,我决定分析一下竞品应用:当贝投屏,结果发现它是正常的。由于当贝投屏是个黑盒子,所以决定抓包看一下。
tcpdump tcp -i any -p -s 0 -w /sdcard/capture.pcap
当贝投屏抓包分析
运行命令后开始投剧集到当贝投屏并通过进度条操作触发切集,把抓包文件adb pull出来放到WireShark去分析。
由于DLNA建连后的命令交互是通过http的,所以这里只显示http协议,并通过搜索SetAVTransportURI定位到投屏时间点。
首先看一下即将切集前手机端获取到的信息:
可以看到影片的时长和进度都有值,快播完了。
切集时:
手机端获取到的播放状态是stopped,影片时长和进度都是0
切集后:
手机端获取的信息正常
我司投屏抓包分析
切集前:
切集后:
获取到的影片进度和时长都是上个视频的信息,导致咪咕产生了误判断,认为这一集也播完了,造成跳集。
解决
收到手机端的stop指令后,立即将播放状态置stopped,同时将影片时长和进度也置0。此外,还要拦截播放器到手机端的状态同步直到新的视频起播。
另外还要注意处理线程调度延迟的问题,如果stop指令和setUri指令发送时间比较接近,虽然看起来是stop在前,setUri在后,但如果是在不同线程回调上来的,可能存在setUri先执行的情况,要注意处理这种情况,避免误退出。
咪咕视频DLNA投屏跳集问题分析
https://iwesley.top/article/73728aea/