1. M3U(Moving Picture Experts Group Audio Layer 3 Uniform Resource Locator)这种文件格式是音视频文件的列表文件,是纯文本文件。你下载下来打开它,播放软件并不是播放它,而是根据它的记录找到网络地址进行在线播放。m3u8就是以utf-8编码的m3u文件

下面这个是没有加密的m3u8文件

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:11785
#EXT-X-TARGETDURATION:11
#EXTINF:10.560,
cctv1_2md/1602814775_5190881.ts
#EXTINF:10.560,
cctv1_2md/1602814786_5190882.ts
#EXTINF:10.880,
cctv1_2md/1602814797_5190883.ts
#EXTINF:10.880,
cctv1_2md/1602814808_5190884.ts
#EXTINF:10.560,
cctv1_2md/1602814818_5190885.ts

下面这个是加密的m3u8文件

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:3
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="https://hey07.cjkypo.com/20220223/MKPjICFW/1100kb/hls/key.key"
#EXTINF:2.5,
https://hey07.cjkypo.com/20220223/MKPjICFW/1100kb/hls/9QH3yPzu.ts
#EXTINF:1.667,
https://hey07.cjkypo.com/20220223/MKPjICFW/1100kb/hls/NuS3IonQ.ts
#EXTINF:2.383,
https://hey07.cjkypo.com/20220223/MKPjICFW/1100kb/hls/0qTxIM8x.ts

每个字段含义如下:

#EXTM3U //必需,表示一个扩展的m3u文件,并且必须在文件的第一行,所有的M3U8文件中必须包含这个标签。
#EXT-X-VERSION:3 //hls的协议版本号,暗示媒体流的兼容性,常见的是3(目前最高版本应该是7)。
#EXT-X-MEDIA-SEQUENCE:xx //M3U8直播是的直播切换序列,当播放打开M3U8时,以这个标签的值作为参考,播放对应的序列号的切片。
#EXT-X-ALLOW-CACHE:NO //是否缓存
#EXT-X-TARGETDURATION:5 //每个视频分段最大的时长(单位秒)
#EXT-X-DISCONTINUITY //表示换编码
#EXTINF:<duration> //EXTINF为M3U8列表中每一个分片的duration,如上面例子输出信息中的第一片的duration为10秒。在EXTINF标签中,除了duration值,还可以包含可选的描述信息,主要为标注切片信息,使用逗号分隔开。
#EXT-X-KEY:METHOD=AES-128,URI="http://****/key.key" //这个是提示时加密文件,key值就从后面的URI下载,METHOD是加密方式。

BANDWIDTH:BANDWIDTH的值为最高码率值,当播放EXT-X-STREAM-INF下对应的M3U8时占用的最大码率(必要参数)。

CODECS:CODECS的值用于声明EXT-X-STREAM-INF下面对应M3U8里面的音视频编码、视频编码的信息(可选参数)。

FRAME-RATE:子M3U8中的视频帧率(可选参数)。

特别说明下,偶尔才能遇见

#EXT-X-STREAM-INF:RESOLUTION=1920x1080,FRAME-RATE=30,CODECS="avc1.640028,mp4a.40.2"
https://xxx.com/index.m3u8
格式
#EXT-X-STREAM-INF:<attribute-list>
 <URI>

说明
#EXT-X-STREAM-INF:代表不同的播放流,
后面是属性列表,如上面的FRAME-RATE=30
下面一行是链接地址

关于客户端播放M3U8的标准还有更多的讲究,下面我们来介绍一些:

  1. 分片必须是动态改变的,序列不能相同,并且序列必须是增序的。
  2. 当M3U8没有出现EXT-X-ENDLIST标签时,无论这个M3U8列表中有多少分片,播放分片都是从倒数第三片开始播放,如果不满三片则不应该播放。当然如果有些播放器做了特别定制了,则可以不遵照这个原则。
  3. 以播放当前分片的duration时间刷新M3U8列表,然后做对应的加载动作。
  4. 前一片分片和后一片分片有不连续的时候,播放可能会出错,那么需要X-DISCONTINUTY标签来解决这个错误。
  5. 如果播放列表在刷新之后与之前的列表相同,那么在播放当前分片duration一半的时间内在刷新一次。

下面我们再说下,我们是怎么解析到需要下载的ts文件链接的

import threading
import requests
import time
from queue import Queue
import copy
# 取消ssl验证
import urllib3
urllib3.disable_warnings()#超出连接数,所以设置强制连接数
requests.adapters.DEFAULT_RETRIES = 1
s = requests.session()
s.keep_alive = Falsedef parse_ts(data):try:data = str(data)finish_data = []for line in data.split('\n'):if line.endswith('.ts'):finish_data.append(line)elif line.find('.ts?') >= 0:finish_data.append(line)else:print('*'*20+'\n'+'解析错误,未解析到需要的ts文件,具体内容如下:'+line+'\n'+'*'*20)except Exception as e:import tracebacktraceback.print_exc()print('*'*20+"报错" * 50+'*'*20)finally:return finish_dataif __name__ == '__main__':# 获取m3u8的url,根据url获取ts列表res = requests.get(base_url,verify = False)if res.status_code == 200:ts_list = parse_ts(res.text)print(ts_list)else:print("请求m3u8文件错误")

m3u8文件格式讲解,Python解析m3u8文件,并获取在线地址相关推荐

  1. [系统安全] 四十一.APT系列(6)Python解析PE文件并获取时间戳判断来源区域

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  2. python解析apk文件_Python获取apk文件URL地址实例

    Python获取apk文件URL地址实例 更新时间:2013年11月01日 10:22:39   作者:   我要评论 需要提取apk文件的特定URL地址的朋友可以看一下这个代码实例. 工作中经常需要 ...

  3. 【Android 逆向】使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 完整代码示例 ) ★★★

    文章目录 一.完整代码示例 二.执行结果 三.博客资源 一.完整代码示例 使用 Python 解析 ELF 文件完整代码示例 : # coding=utf-8 # 解析 elf 文件需要导入的依赖库 ...

  4. Python解析json文件

    Python解析json文件 实现代码 import json import sysstdout = sys.stdoutwith open("company.json", &qu ...

  5. ps无法在此计算机上运行,解决PS打开图片"无法完成请求,因为文件格式模块不能解析该文件"...

    当Photoshop(PS)软件打开某张图片的时候,忽然提示并弹出对话框"(不能)无法完成请求,因为文件格式模块不能解析该文件",很多用户会想,明明就是一张图片为什么PS打不开?下 ...

  6. python解析xml文件最好选用的模块_用Python解析XML文件

    本文翻译自:https://developer.yahoo.com/python/python-xml.html 使用Python解析XML文件 许多YDN APIs提供了JSON格式的数据输出,JS ...

  7. python解析dat文件生成xlsx文件

    系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 python解析dat文件生成xlsx文件 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 ...

  8. PS常见错误-无法完成请求,因为文件格式模块不能解析该文件

    无法完成请求,因为文件格式模块不能解析该文件 将图片格式变成.jpg格式就可以了

  9. photoshop打开文件提示 无法完成请求,因为文件格式模块不能解析该文件

    无法完成请求,因为文件格式模块不能解析该文件 这是因为文件的后缀名发生了改变. 第一: 选择图片,右击,用记事本打开. 第二: 带有"塒NG"的是PNG格式的图片 带有 ??JFI ...

  10. python解析css文件_Python格式化css文件的方法

    本文实例讲述了Python格式化css文件的方法.分享给大家供大家参考.具体实现方法如下: import string, sys import re, StringIO TAB=4 def forma ...

最新文章

  1. linux可以远程装机吗,linux 远程装机
  2. 微软正在改进 Windows 命令行:为 Linux 用户敞开大门
  3. IBM发布全球首台商用量子计算机
  4. WiFi漫游了解一下?大户型wifi组网方案
  5. 数据库与数据库管理系统的基本概念
  6. ora-03115:不支持的网络数据类型 oracle,Oracle10g新增DBMS_FILE_TRANSFER包(二)
  7. 带冲突检测的载波监听多路访问的原理_通信原理课程总结(二)
  8. 【Java】探究Java实现多接口时同名方法冲突问题
  9. apache性能优化
  10. git 还原文件到其他版本_如何在Git中还原旧文件版本
  11. 稳压二极管 参数说明
  12. mysql建考勤信息代码_C++嵌入式SQL写考勤/点名功能程序
  13. 苹果iPhone手机用iTunes更新IOS14.3系统失败怎么解决
  14. C++友元与操作符重载
  15. LINUX企业应用案例精解 第2版 李晨光
  16. 王飞跃谈正来临的第五次工业革命:“未来一定有多个平行的你”
  17. 《Linux防火墙(第4版)》——1.5 主机名和IP地址
  18. 电脑开机黑屏---只有一个鼠标箭头处理办法
  19. 电脑调试UC浏览器,或者本机浏览器
  20. 使用存储过程返回结果集

热门文章

  1. 云服务器加固系统,云服务器加固
  2. 帆软相同列合并_合并报表软件有哪些深受欢迎
  3. 为什么现在的大学生喜欢去报名软件培训班
  4. [Windows]截图
  5. 计算机电脑类比,2020年广西公务员考试类比推理专项练习(91)
  6. cocos2d获取手机IMEI
  7. 来了!STM32移植LuatOS,潘多拉示例全新教程
  8. LED芯片漏电原因分析
  9. HTML5 Vibration API
  10. 使用BC进行RSA加密与解密