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相关推荐

  1. 莫烦Python代码实践(一)——Q-Learning算法工程化解析

    提示:转载请注明出处,若本文无意侵犯到您的合法权益,请及时与作者联系. 莫烦Python代码实践(一)--Q-Learning算法工程化解析 声明 一.Q-Learning算法是什么? 二.Q-Lea ...

  2. Python机器学习实践指南pdf (中文版带书签)、原书代码、数据集

    Python机器学习实践指南 目 录  第1章Python机器学习的生态系统 1  1.1 数据科学/机器学习的工作  流程 2  1.1.1 获取 2  1.1.2 检查和探索 2  1.1.3 清 ...

  3. Python爬虫实践-网易云音乐

    1.前言 最近,网易的音乐很多听不到了,刚好也看到很多教程,跟进学习了一下,也集大全了吧,本来想优化一下的,但是发现问题还是有点复杂,最后另辟捷径,提供了简单的方法啊! 本文主要参考 python编写 ...

  4. python气象数据分析_基于Python的气象观测数据的解析与存储

    基于 Python 的气象观测数据的解析与存储 师利霞, 黄元媛 [摘 要] 为了达到"一次解析,各处使用"的目的,根据工作的实际需要,使 用 Python 技术对以文本格式存放的 ...

  5. python爬虫实践--晋江小说书籍分析

    系列文章目录 python爬虫实践–晋江小说书籍分析 python爬虫实践-腾讯视频弹幕分析 python爬虫实践-B站弹幕分析 文章目录 系列文章目录 目录 爬取晋江排行榜 爬取文案 其它想法 结语 ...

  6. Python爬虫怎么挣钱?解析Python爬虫赚钱方式,轻轻松松月入两万,再也不用为钱发愁啦

    Python爬虫怎么挣钱?解析Python爬虫赚钱方式,想通过自己学到的专业技能赚钱,首先需要掌握Python爬虫技术,专业能力强才能解决开发过程中出现的问题,可以通过Python爬虫外包项目.整合信 ...

  7. Python爬虫怎么挣钱?解析Python爬虫赚钱方式

    Python爬虫怎么挣钱?解析Python爬虫赚钱方式,想过自己学到的专业技能赚钱,首先需要你能够数量掌握Python爬虫技术,专业能力强才能解决开发过程中出现的问题,Python爬虫可以通过Pyth ...

  8. python爬虫—视频爬虫2(m3u8)

    python爬虫-视频爬虫2(m3u8) 一.视频爬虫的分析 今天我们爬的视频比上一期的要特殊一些,一些网站使用m3u8来进行视频的播放工作,特意去搜了一下m3u8与mp4相比的一些优势: 1.HTM ...

  9. python实训总结报告书_20172304 实验四python综合实践报告

    20172304 实验四python综合实践报告 姓名:段志轩 学号:20172304 指导教师:王志强 课程:Python程序设计 实验时间:2020年5月13日至2020年6月14日 实验分析 本 ...

  10. python中url是什么_怎么在Python中实现URL的解析

    怎么在Python中实现URL的解析 发布时间:2020-08-24 17:56:47

最新文章

  1. 汉字转换成html,汉字与16进制、汉字与Html转义符的转换
  2. 电脑中的php怎么删除文件夹,php中删除文件夹以及文件夹中的文件的方法
  3. ebs和java哪个前景好_EBS与实例存储的好处(反之亦然)[关闭]
  4. 超级计算机开采金矿,中国已知的第一大金矿,储量可达10000吨,全力开采需要40年时间...
  5. BZOJ-2243 [SDOI2011]染色
  6. 数据结构与算法python语言描述答案_《数据结构与算法Python语言描述》习题第二章第一题(python版)...
  7. 对排名前3000位博主进行数据分析
  8. 使用python控制其他软件运行_Python实现运行其他程序的四种方式实例分析
  9. 新中大财务软件-A3中怎样更改IP地址
  10. 使用html仿支付宝首页,仿支付宝首页头部伸缩效果
  11. jQuery Validate插件验证
  12. web eTerm是什么
  13. 10. Zigbee应用程序框架开发指南 - 命令处理和生成
  14. elasticsearch7.5.0 集群搭建
  15. 在互联网行业干数据分析师,都需要掌握哪些技能?编程语言?软件工具?
  16. CF1312E Array Shrinking(区间dp模板)
  17. 政务内网不能上网的解决办法
  18. NUC972 使用不同的FLASH开机的ENV文件写法 NAND...
  19. 2021年福建省安全员B证(项目负责人)考试试题及福建省安全员B证(项目负责人)作业模拟考试
  20. 煤炭行业管理平台解决方案,生产全过程价值管理,降本增效

热门文章

  1. 『前端面试资料』 前端面试考题汇总 摘自校内某内推群群公告
  2. ArcGIS系列(一):DEM数字高程模型数据的生成
  3. Android HAL层
  4. c++ 聚合/POD/平凡/标准布局 介绍
  5. TODA项目Part1—后端项目设置与连接数据库
  6. 测试经典名言100句
  7. 社交礼仪之握手礼仪(转)
  8. 推广的euclid_问题引导的代数学: Euclid 空间 III
  9. 世界最快的超级计算机 神威太湖之光,揭秘全国产世界最快超级计算机“神威·太湖之光”(组图)...
  10. 最萌吸血鬼猎人,螺旋猫COS『BLOOD C』更衣小夜