python m3u8_python 实践应用(一)解析M3U8
parse_m3u8_info : 返回M3U8内容, 但不是最终的, 只是简单的打印出来
parse_final_m3u8_info : 返回M3U8的完整内容
如果有多路stream,默认返回的是第一路的stream
has_ext_stream : 判断M3U8中是否存在#EXT-X-STREAM-INF
has_ext_key : 判断M3U8中是否存在#EXT-X-KEY, 就是m3u8是否被加密
has_ext_discontinuity : 判断M3U8中是否存在#EXT-X-DISCONTINUITY
当码流发生切换的时候, 会提示这个标签
get_total_duration : 获取M3U8文件的总时长
1.打印M3U8内容
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import requests
import urlparse
URL='https://tv2.youkutv.cc/2020/04/14/MbqulRmS8sjQGJG9/playlist.m3u8'
### 返回m3u8文件,不是最终的
def parse_m3u8_info(url):
val = urlparse.urlsplit(url)
if (val.scheme != 'http') and (val.scheme != 'https'):
return 'Error protocol'
result = ''
request = requests.get(url, timeout=20)
for line in request.iter_lines():
result += line + '\n'
return result
result = parse_m3u8_info(URL)
print('M3U8文件内容如下:\n' + result)
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1500000,RESOLUTION=720x406
1500kb/hls/index.m3u8
2.打印M3U8完整文件
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import requests
import urlparse
### M3U8 Tag
TAG_PREFIX = '#EXT'
TAG_STREAM_INF = '#EXT-X-STREAM-INF'
### M3U8 Pattern Tag
REGEX_MEDIA_DURATION = TAG_MEDIA_DURATION + ':([\\d\\.]+)\\b'
URL='http://video.yjf138.com:8091/20180812/6yl0Q2YZ/index.m3u8'
### 返回最终的m3u8文件
def parse_final_m3u8_info(url):
val = urlparse.urlsplit(url)
if (val.scheme != 'http') and (val.scheme != 'https'):
return 'Error protocol'
request = requests.get(url, timeout=20)
result = ''
hasStreamInf = False
for line in request.iter_lines():
if (line.startswith(TAG_PREFIX)):
result += line + '\n'
if (line.startswith(TAG_STREAM_INF)):
hasStreamInf = True
continue
if (hasStreamInf):
return parse_final_m3u8_info(get_final_url(url, line))
hasStreamInf = False
result += get_final_url(url, line) + '\n'
return result
### 根据m3u8中的分片写法得到完整的url
def get_final_url(url, line):
val = urlparse.urlsplit(url)
hostUrl = url[0:url.index(val.netloc)+len(val.netloc)]
baseUrl = url[0:url.rindex('/')+1]
if (line.startswith('/')):
tempUrl = ''
if (line[1:].find('/') != -1):
tempIndex = line[1:].index('/')
tempUrl = line[0:tempIndex]
if (url.find(tempUrl) != -1):
tempIndex = url.index(tempUrl)
tempUrl = url[0:tempIndex] + line
else:
tempUrl = hostUrl + line[1:]
return tempUrl
else:
tempUrl = baseUrl + line[1:]
return tempUrl
if (line.startswith('http://') or line.startswith('https://')):
return line
return baseUrl + line
finalResult = parse_final_m3u8_info(URL)
print('M3U8文件最终内容如下:\n' + finalResult)
3.统计M3U8的总时长
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import requests
import urlparse
import re
### M3U8 Tag
TAG_PREFIX = '#EXT'
TAG_MEDIA_DURATION = "#EXTINF";
TAG_STREAM_INF = '#EXT-X-STREAM-INF'
### M3U8 Pattern Tag
REGEX_MEDIA_DURATION = TAG_MEDIA_DURATION + ':([\\d\\.]+)\\b'
URL='http://video.yjf138.com:8091/20180812/6yl0Q2YZ/index.m3u8'
### 获取M3U8文件的总时长
def get_total_duration(url):
val = urlparse.urlsplit(url)
if (val.scheme != 'http') and (val.scheme != 'https'):
return 'Error protocol'
request = requests.get(url, timeout=20)
result = ''
hasStreamInf = False
totalDuration = 0
for line in request.iter_lines():
if (line.startswith(TAG_PREFIX)):
if (line.startswith(TAG_STREAM_INF)):
hasStreamInf = True
elif (line.startswith(TAG_MEDIA_DURATION)):
ret = parse_pattern_str(REGEX_MEDIA_DURATION, line)
totalDuration += float(ret)
continue
if (hasStreamInf):
return get_total_duration(get_final_url(url, line))
hasStreamInf = False
return totalDuration
def parse_pattern_str(pattern_str, str):
matchObj = re.match(pattern_str, str)
if (matchObj) :
return matchObj.group(1)
return ''
totalDuration = get_total_duration(URL)
print('此M3U8文件的总时间: --->' + str(totalDuration))
上面出现过的get_final_url函数我就不重复写了。
上面用到了一个正则匹配,需要导入import re
4.是否存在KEY
http://video.yjf138.com:8091/20180812/6yl0Q2YZ/index.m3u8 中包含#EXT-X-KEY / #EXT-X-DISCONTINUITY / #EXT-X-STREAM-INF
#EXT-X-KEY:METHOD=AES-128,URI="key.key"
说明这时候使用AES-128加密,加密的密钥是 key.key, 当然是存在当前服务器上的密钥.
5.是否存在DISCONTINUITY
当发生码流变化的时候会出现这个标签,说明前后的ts可能会出现码流、分辨率、编码格式等属性的不同。播放器需要提前做好准备。
6.是否存在多路流
为多个分辨率准备的标签,当出现这个标签的时候,会标识当前流的分辨率、码流等属性,说明下面对应出现的还是一个M3U8索引文件。
python m3u8_python 实践应用(一)解析M3U8相关推荐
- 莫烦Python代码实践(一)——Q-Learning算法工程化解析
提示:转载请注明出处,若本文无意侵犯到您的合法权益,请及时与作者联系. 莫烦Python代码实践(一)--Q-Learning算法工程化解析 声明 一.Q-Learning算法是什么? 二.Q-Lea ...
- Python机器学习实践指南pdf (中文版带书签)、原书代码、数据集
Python机器学习实践指南 目 录 第1章Python机器学习的生态系统 1 1.1 数据科学/机器学习的工作 流程 2 1.1.1 获取 2 1.1.2 检查和探索 2 1.1.3 清 ...
- Python爬虫实践-网易云音乐
1.前言 最近,网易的音乐很多听不到了,刚好也看到很多教程,跟进学习了一下,也集大全了吧,本来想优化一下的,但是发现问题还是有点复杂,最后另辟捷径,提供了简单的方法啊! 本文主要参考 python编写 ...
- python气象数据分析_基于Python的气象观测数据的解析与存储
基于 Python 的气象观测数据的解析与存储 师利霞, 黄元媛 [摘 要] 为了达到"一次解析,各处使用"的目的,根据工作的实际需要,使 用 Python 技术对以文本格式存放的 ...
- python爬虫实践--晋江小说书籍分析
系列文章目录 python爬虫实践–晋江小说书籍分析 python爬虫实践-腾讯视频弹幕分析 python爬虫实践-B站弹幕分析 文章目录 系列文章目录 目录 爬取晋江排行榜 爬取文案 其它想法 结语 ...
- Python爬虫怎么挣钱?解析Python爬虫赚钱方式,轻轻松松月入两万,再也不用为钱发愁啦
Python爬虫怎么挣钱?解析Python爬虫赚钱方式,想通过自己学到的专业技能赚钱,首先需要掌握Python爬虫技术,专业能力强才能解决开发过程中出现的问题,可以通过Python爬虫外包项目.整合信 ...
- Python爬虫怎么挣钱?解析Python爬虫赚钱方式
Python爬虫怎么挣钱?解析Python爬虫赚钱方式,想过自己学到的专业技能赚钱,首先需要你能够数量掌握Python爬虫技术,专业能力强才能解决开发过程中出现的问题,Python爬虫可以通过Pyth ...
- python爬虫—视频爬虫2(m3u8)
python爬虫-视频爬虫2(m3u8) 一.视频爬虫的分析 今天我们爬的视频比上一期的要特殊一些,一些网站使用m3u8来进行视频的播放工作,特意去搜了一下m3u8与mp4相比的一些优势: 1.HTM ...
- python实训总结报告书_20172304 实验四python综合实践报告
20172304 实验四python综合实践报告 姓名:段志轩 学号:20172304 指导教师:王志强 课程:Python程序设计 实验时间:2020年5月13日至2020年6月14日 实验分析 本 ...
- python中url是什么_怎么在Python中实现URL的解析
怎么在Python中实现URL的解析 发布时间:2020-08-24 17:56:47
最新文章
- 汉字转换成html,汉字与16进制、汉字与Html转义符的转换
- 电脑中的php怎么删除文件夹,php中删除文件夹以及文件夹中的文件的方法
- ebs和java哪个前景好_EBS与实例存储的好处(反之亦然)[关闭]
- 超级计算机开采金矿,中国已知的第一大金矿,储量可达10000吨,全力开采需要40年时间...
- BZOJ-2243 [SDOI2011]染色
- 数据结构与算法python语言描述答案_《数据结构与算法Python语言描述》习题第二章第一题(python版)...
- 对排名前3000位博主进行数据分析
- 使用python控制其他软件运行_Python实现运行其他程序的四种方式实例分析
- 新中大财务软件-A3中怎样更改IP地址
- 使用html仿支付宝首页,仿支付宝首页头部伸缩效果
- jQuery Validate插件验证
- web eTerm是什么
- 10.	Zigbee应用程序框架开发指南 - 命令处理和生成
- elasticsearch7.5.0 集群搭建
- 在互联网行业干数据分析师,都需要掌握哪些技能?编程语言?软件工具?
- CF1312E Array Shrinking(区间dp模板)
- 政务内网不能上网的解决办法
- NUC972 使用不同的FLASH开机的ENV文件写法 NAND...
- 2021年福建省安全员B证(项目负责人)考试试题及福建省安全员B证(项目负责人)作业模拟考试
- 煤炭行业管理平台解决方案,生产全过程价值管理,降本增效
热门文章
- 『前端面试资料』 前端面试考题汇总 摘自校内某内推群群公告
- ArcGIS系列(一):DEM数字高程模型数据的生成
- Android HAL层
- c++ 聚合/POD/平凡/标准布局 介绍
- TODA项目Part1—后端项目设置与连接数据库
- 测试经典名言100句
- 社交礼仪之握手礼仪(转)
- 推广的euclid_问题引导的代数学: Euclid 空间 III
- 世界最快的超级计算机 神威太湖之光,揭秘全国产世界最快超级计算机“神威·太湖之光”(组图)...
- 最萌吸血鬼猎人,螺旋猫COS『BLOOD C』更衣小夜