随着移动互联网的高速发展,网速的雄起,我们播放视频,高清已经是入门要求了,现在怎么也要是1080P或者4K视频才好意思让我冲会员吧.但是不要忘了,世界很大,你们先富起来的人也要考虑网络的平均状态,互联网的生态是多样的,低清/普清/中清/高清/超清,等级森严.
高级播放器当然有根据当前网络状态切换清晰度的功能,但是别忘了我们可怜的MediaPlayer还有其他低级播放器,即使是ExoPlayer,切换的逻辑也是嵌入到播放器内部,有时候还不是那么准,关键是开发者没法有效的掌控.
我们现在想将一个视频中的片源清晰度信息提取出来,然后供用户自由选择,这个可以做到吗?当然只是针对M3U8视频,那么自带服务器光环的视频不管啦,毕竟片源是你的,你想怎么玩就怎么玩.
先给一个播放链接:
代码语言:javascript复制https://newcntv.qcloudcdn.com/asp/hls/main/0303000a/3/default/fe76ae5bc1cb70ee0ca8a321392414d6/main.m3u8?maxbr=2048&minbr=400
python脚本解析一下这个视频url:
代码语言:javascript复制#!/usr/bin/python
# -*- coding: UTF-8 -*-
## 将网络url中的信息保存到本地
import requests
url='https://newcntv.qcloudcdn.com/asp/hls/main/0303000a/3/default/fe76ae5bc1cb70ee0ca8a321392414d6/main.m3u8?maxbr=2048&minbr=400'
def parseUrlInfo(url):
if (not url.startswith('http')) and (not url.startswith('https')):
return 'Error protocol'
request = requests.get(url, timeout=10)
print request.status_code
result=''
for line in request.iter_lines():
result =line 'n'
return result
print(parseUrlInfo(url))
解析结果如下:
代码语言:javascript复制#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=460800, RESOLUTION=480x270
/asp/hls/450/0303000a/3/default/fe76ae5bc1cb70ee0ca8a321392414d6/450.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=870400, RESOLUTION=640x360
/asp/hls/850/0303000a/3/default/fe76ae5bc1cb70ee0ca8a321392414d6/850.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=1228800, RESOLUTION=1280x720
/asp/hls/1200/0303000a/3/default/fe76ae5bc1cb70ee0ca8a321392414d6/1200.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=2048000, RESOLUTION=1280x720
/asp/hls/2000/0303000a/3/default/fe76ae5bc1cb70ee0ca8a321392414d6/2000.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=2048000, RESOLUTION=1280x720
/asp/hls/2000/0303000a/3/default/fe76ae5bc1cb70ee0ca8a321392414d6/2000.m3u8
这个m3u8链接中有5个不同清晰度的片源,那我们展示的时候可以根据实际的网络状态给用户播放更加高清的视频,提升体验.
正常情况下的播放状态是下面图1,但是我们加上了选择清晰度,你可以选择高清甚至超高清播放,最后一张图显然更加高清了,观看体验更佳.
具体做法大家可以看一下源码: https://github.com/JeffMony/PlayerSDK