CDN资源设置了防盗链功能,Android客户端这边需要在访问资源时设置约定好的头信息。

一开始是希望使用通用头Referer,但对于MediaPlayer的话,在 android 4.X 机型上设置Referer是无效果的….
该Bug在android 5.0才恢复。

见下图:
referer.bug

参考链接:
Nexus 5 referer string value is coming as null even if we pass it
Why VideoView setVideoUri(Uri uri,Headers headers) doesn’t work?

那转而使用User-Agent吧,但是!!!
android 5.0 机子上MediaPlayer将User-Agent强制设置为stagefright/1.2了! Shit!!!

见下图:
fix.user-agent.bug

参考链接:
MediaPlayer ignores User-Agent header
Don’t overwrite user agent header if app specified one

最后,防盗链在CDN端的配置是即使用Referer也使用User-Agent两者是关系。


2016.12.13记
特殊表现:

VideoView在播放视频文件时,调用的是MediaPlayer.start(),经Charles抓包发现start()后会对url请求两次。

唠叨:
系统自带的MediaPlayer是可用的,但还是毛糙了些。
可以额外关注下其它开源播放器:
Google家的另一个ExoPlayer(GitHub链接)


About Sodino