带keyts文件的ts文件转mp4如何播放?

我从青鸟网校上下载了离线视频,发现有M3U8、key、和一堆ts的视频,请问怎么合并? - 『悬赏问答区』
- 吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn
后使用快捷导航没有帐号?
只需一步,快速开始
请完成以下验证码
请完成以下验证码
查看: 2460|回复: 17
我从青鸟网校上下载了离线视频,发现有M3U8、key、和一堆ts的视频,请问怎么合并?
阅读权限10
如题,视频今年5月过期,我想把他下载下来,下载下来发现是一个M3u8文件,一个key文件(16字节)和一堆ts视频文件,直接播放ts无法播放,寻找很久无果,之前开了一贴问大神,大神应该太忙不能详细解答。有没有会的高手,给我解决下啊。
附上样本:https://pan.baidu.com/s/1dFASazv& & 提取码:jnmk& &
第一步:这些文件有没有后缀名(ts),如没有需要批量修改后缀名为ts
批量修改后缀名的简单方法
1.在需要更改的目录下,新建一个TXT文件,
2.然后输入 ren *.asp *.jpg
保存。诠释:格式: ren是命令 *.asp是修改前的后缀 *.jpg是修改后的后缀
3.如果你所在的目录下是没有后缀名的文件,也就是没有格式啦
那么输入 ren *.
4.后缀名改为 .bat 的文件(必须在需要更改后缀名的目录下新建)
5.鼠标双击,看看结果.
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
第一步:这些文件有没有后缀名(ts),如没有需要批量修改后缀名为ts
批量修改后缀名的简单方法
1.在需要更改的目录下,新建一个TXT文件,&&
2.然后输入 ren *.asp *.jpg&&
保存。诠释:格式: ren是命令 *.asp是修改前的后缀 *.jpg是修改后的后缀
3.如果你所在的目录下是没有后缀名的文件,也就是没有格式啦
&&那么输入 ren *.&&*.jpg
4.后缀名改为 .bat 的文件(必须在需要更改后缀名的目录下新建)
5.鼠标双击,看看结果.
第二步,视频被切割成多个ts文件片断 ,不能连贯播放,需要把它合并,
合并的方法:
1、你可以建4个文件夹,命名A,B,C,D,把0-9复制到A,10-99复制到B,100-999复制到C,复制到D。
2、在当前目录下建立一个文本文挡,内容copy /b *.ts new.ts,然后保存,将文本文档后缀改成bat格式。
3、打开即可将目录下的ts文件以二进制顺序合并为new.ts文件。生成了A,B,C,D四个new.ts文件。
4、再将A,B,C,D四个new.ts文件,放在一个文件夹内,重复2步骤,即可合并完整的ts文件
第三步,ts转MP4。自己百度我就不交了
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
m3u8的用MXplayer就能播
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
m3u8的用MXplayer就能播
是ts格式de
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限30
M3u8可以转成MP4然后再合并
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
ffmpeg合并转换文件成MP4,不糊多百度求好评
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
QQ影音合并转换文件成MP4
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
QQ影音合并转换文件成MP4
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
可以用格式工厂
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限30
链接: 密码:6666
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
免责声明:吾爱破解所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。
( 京ICP备号 | 京公网安备 87号 )
Powered by Discuz!
Comsenz Inc.hls流媒体:ts流格式介绍 - mpegts - ITkeyowrd
hls流媒体:ts流格式介绍
推荐:hls流媒体:ts流格式介绍 已有 2028 次阅读 14:13 |个人分类:视频直播| 流媒体 1.ts简介
ts流最早应用于数字电视领域,其格式非常复杂包含的配置
领取地址:
1.ts简介 & & &ts流最早应用于数字电视领域,其格式非常复杂包含的配置信息表多大十几个,视频格式主要是mpeg2。苹果公司发明的http live stream流媒体是基于ts文件的,不过他大大简化了传统的ts流,只需要2个最基本的配置表PAT和PMT,再加上音视频内容就可以了,hls流媒体视频编码的主要格式为h264/mpeg4,音频为aac/mp3。
& & &ts文件分为三层:ts层(Transport Stream)、pes层(Packet Elemental Stream)、es层(Elementary Stream)。es层就是音视频数据,pes层是在音视频数据上加了时间戳等对数据帧的说明信息,ts层是在pes层上加入了数据流识别和传输的必要信息。
3.ts层 & & &ts包大小固定为188字节,ts层分为三个部分:ts header、adaptation field、payload。ts header固定4个字节;adaptation field可能存在也可能不存在,主要作用是给不足188字节的数据做填充;payload是pes数据。 3.1.ts header sync_byte 8b 同步字节,固定为0x47 transport_error_indicator 1b 传输错误指示符,表明在ts头的adapt域后由一个无用字节,通常都为0,这个字节算在adapt域长度内 payload_unit_start_indicator 1b 负载单元起始标示符,一个完整的数据包开始时标记为1 transport_priority 1b 传输优先级,0为低优先级,1为高优先级,通常取0 pid 13b pid值 transport_scrambling_control 2b 传输加扰控制,00表示未加密 adaptation_field_control 2b 是否包含自适应区,‘00’保留;‘01’为无自适应域,仅含有效负载;‘10’为仅含自适应域,无有效负载;‘11’为同时带有自适应域和有效负载。 continuity_counter 4b 递增计数器,从0-f,起始值不一定取0,但必须是连续的 & & &ts层的内容是通过PID值来标识的,主要内容包括:PAT表、PMT表、音频流、视频流。解析ts流要先找到PAT表,只要找到PAT就可以找到PMT,然后就可以找到音视频流了。PAT表的PID值固定为0。PAT表和PMT表需要定期插入ts流,因为用户随时可能加入ts流,这个间隔比较小,通常每隔几个视频帧就要加入PAT和PMT。PAT和PMT表是必须的,还可以加入其它表如SDT(业务描述表)等,不过hls流只要有PAT和PMT就可以播放了。
PAT表:他主要的作用就是指明了PMT表的PID值。
PMT表:他主要的作用就是指明了音视频流的PID值。
音频流/视频流:承载音视频内容。
3.2.adaption adaptation_field_length 1B 自适应域长度,后面的字节数 flag 1B 取0x50表示包含PCR或0x40表示不包含PCR PCR 5B Program Clock Reference,节目时钟参考,用于恢复出与编码端一致的系统时序时钟STC(System Time Clock)。 stuffing_bytes xB 填充字节,取值0xff & & &自适应区的长度要包含传输错误指示符标识的一个字节。pcr是节目时钟参考,pcr、dts、pts都是对同一个系统时钟的采样值,pcr是递增的,因此可以将其设置为dts值,音频数据不需要pcr。如果没有字段,ipad是可以播放的,但vlc无法播放。打包ts流时PAT和PMT表是没有adaptation field的,不够的长度直接补0xff即可。视频流和音频流都需要加adaptation field,通常加在一个帧的第一个ts包和最后一个ts包里,中间的ts包不加。
3.3.PAT格式 table_id 8b PAT表固定为0x00 section_syntax_indicator 1b 固定为1 zero 1b 固定为0 reserved 2b 固定为11 section_length 12b 后面数据的长度 transport_stream_id 16b 传输流ID,固定为0x0001 reserved 2b 固定为11 version_number 5b 版本号,固定为00000,如果PAT有变化则版本号加1 current_next_indicator 1b 固定为1,表示这个PAT表可以用,如果为0则要等待下一个PAT表 section_number 8b 固定为0x00 last_section_number 8b 固定为0x00 开始循环
program_number 16b 节目号为0x0000时表示这是NIT,节目号为0x0001时,表示这是PMT reserved 3b 固定为111 PID 13b 节目号对应内容的PID值 结束循环
CRC32 32b 前面数据的CRC32校验码 3.4.PMT格式 table_id 8b PMT表取值随意,0x02 section_syntax_indicator 1b 固定为1 zero 1b 固定为0 reserved 2b 固定为11 section_length 12b 后面数据的长度 program_number 16b 频道号码,表示当前的PMT关联到的频道,取值0x0001 reserved 2b 固定为11 version_number 5b 版本号,固定为00000,如果PAT有变化则版本号加1 current_next_indicator 1b 固定为1 section_number 8b 固定为0x00 last_section_number 8b 固定为0x00 reserved 3b 固定为111 PCR_PID 13b PCR(节目参考时钟)所在TS分组的PID,指定为视频PID reserved 4b 固定为1111 program_info_length 12b 节目描述信息,指定为0x000表示没有 开始循环
stream_type 8b 流类型,标志是Video还是Audio还是其他数据,h.264编码对应0x1b,aac编码对应0x0f,mp3编码对应0x03 reserved 3b 固定为111 elementary_PID 13b 与stream_type对应的PID reserved 4b 固定为1111 ES_info_length 12b 描述信息,指定为0x000表示没有 结束循环
CRC32 32b 前面数据的CRC32校验码
4.pes层 & & &pes层是在每一个视频/音频帧上加入了时间戳等信息,pes包内容很多,我们只留下最常用的。
pes start code 3B 开始码,固定为0x000001 stream id 1B 音频取值(0xc0-0xdf),通常为0xc0
视频取值(0xe0-0xef),通常为0xe0 pes packet length 2B 后面pes数据的长度,0表示长度不限制,
只有视频数据长度会超过0xffff flag 1B 通常取值0x80,表示数据不加密、无优先级、备份的数据 flag 1B 取值0x80表示只含有pts,取值0xc0表示含有pts和dts pes data length 1B 后面数据的长度,取值5或10 pts 5B 33bit值 dts 5B 33bit值 & & &pts是显示时间戳、dts是解码时间戳,视频数据两种时间戳都需要,音频数据的pts和dts相同,所以只需要pts。有pts和dts两种时间戳是B帧引起的,I帧和P帧的pts等于dts。如果一个视频没有B帧,则pts永远和dts相同。从文件中顺序读取视频帧,取出的帧顺序和dts顺序相同。dts算法比较简单,初始值 + 增量即可,pts计算比较复杂,需要在dts的基础上加偏移量。 & & &音频的pes中只有pts(同dts),视频的I、P帧两种时间戳都要有,视频B帧只要pts(同dts)。打包pts和dts就需要知道视频帧类型,但是通过容器格式我们是无法判断帧类型的,必须解析h.264内容才可以获取帧类型。 举例说明: & & & & & & & & & & & & &I & & & & &P & & & & &B & & & & &B & & & & &B & & & & &P 读取顺序: & & & & 1 & & & & 2 & & & & &3 & & & & &4 & & & & &5 & & & & &6 dts顺序: & & & & & 1 & & & & 2 & & & & &3 & & & & &4 & & & & &5 & & & & &6 pts顺序: & & & & & 1 & & & & 5 & & & & &3 & & & & &2 & & & & &4 & & & & &6
点播视频dts算法: dts = 初始值 +&90000 / video_frame_rate,初始值可以随便指定,但是最好不要取0,video_frame_rate就是帧率,比如23、30。 pts和dts是以timescale为单位的,1s = 90000 time scale , 一帧就应该是90000/video_frame_rate 个timescale。 用一帧的timescale除以采样频率就可以转换为一帧的播放时长
点播音频dts算法: dts = 初始值 +&(90000 * audio_samples_per_frame) / audio_sample_rate,audio_samples_per_frame这个值与编解码相关,aac取值1024,mp3取值1158,audio_sample_rate是采样率,比如2。AAC一帧解码出来是每声道1024个sample,也就是说一帧的时长为1024/sample_rate秒。所以每一帧时间戳依次0,1024/sample_rate,...,1024*n/sample_rate秒。
直播视频的dts和pts应该直接用直播数据流中的时间,不应该按公式计算。
5.es层 & & &es层指的就是音视频数据,我们只介绍h.264视频和aac音频。 h.264视频: & & &打包h.264数据我们必须给视频数据加上一个nalu(Network Abstraction Layer unit),nalu包括nalu header和nalu type,nalu header固定为0x(帧开始)或0x000001(帧中)。h.264的数据是由slice组成的,slice的内容包括:视频、sps、pps等。nalu type决定了后面的h.264数据内容。
F 1b forbidden_zero_bit,h.264规定必须取0 NRI 2b nal_ref_idc,取值0~3,指示这个nalu的重要性,I帧、sps、pps通常取3,P帧通常取2,B帧通常取0 Type 5b 参考下表
nal_unit_type 说明 0 未使用 1 非IDR图像片,IDR指关键帧 2 片分区A 3 片分区B 4 片分区C 5 IDR图像片,即关键帧 6 补充增强信息单元(SEI) 7 SPS序列参数集 8 PPS图像参数集 9 分解符 10 序列结束 11 码流结束 12 填充 13~23 保留 24~31 未使用 & & &红色字体显示的内容是最常用的,打包es层数据时pes头和es数据之间要加入一个type=9的nalu,关键帧slice前必须要加入type=7和type=8的nalu,而且是紧邻。
aac音频: & & &打包aac音频必须加上一个adts(Audio Data Transport Stream)头,共7Byte,adts包括fixed_header和variable_header两部分,各28bit。 fixed_header syncword 12b 固定为0xfff id 1b 0表示MPEG-4,1表示MPEG-2 layer 2b 固定为00 protection_absent 1b 固定为1 profile 2b 取值0~3,1表示aac sampling_frequency_index 4b 表示采样率,0: 96000 Hz,1: 88200 Hz,2: 64000 Hz,3:48000 Hz,4: 44100 Hz,5: 32000 Hz,6: 24000 Hz,7: 22050 Hz,8: 16000 Hz,9: 12000 Hz,10: 11025 Hz,11: 8000 Hz,12: 7350 Hz private_bit 1b 固定为0 channel_configuration 3b 取值0~7,1: 1 channel: front-center,2: 2 channels: front-left, front-right,3: 3 channels: front-center, front-left, front-right,4: 4 channels: front-center, front-left, front-right, back-center original_copy 1b 固定为0 home 1b 固定为0
variable_header copyright_identification_bit 1b 固定为0 copyright_identification_start 1b 固定为0 aac_frame_length 13b 包括adts头在内的音频数据总长度 adts_buffer_fullness 11b 固定为0x7ff number_of_raw_data_blocks_in_frame 2b 固定为00
mp3音频: mp3音频不需要加adts头。
6.h264帧类型判断 当nalu type=5或1时,表示后面跟着的数据是视频数据,下面我们只列出前2项。 first_mb_in_slice Golomb编码 一般为0,一个slice为一帧图像 slice_type Golomb编码 帧类型,2、4、7、9表示I帧,0、3、5、8表示P帧
,1、6表示B帧。
7.mp4转ts & & &我们假设mp4格式中的视频编码为h.264,音频编码为aac。我们从mp4中获取的视频信息包括:sps、pps、dts、pts、帧率、帧数据、ticks(每秒滴答数)。音频信息包括:pts、采样频率、声道数、帧数据。mp4文件的dts和ts文件的dts是需要进行换算的,都是初始值 + 增量,但是增量计算是不同的。 视频信息获取: sps stsd.avc1.avcC pps stsd.avc1.avcC dts stts pts stts + ctts 帧率 帧个数 / 总时长 timescale trak.mdia.mdhd 帧数据 stsc + stco + stsz 音频信息获取: pts stts 采样频率 trak.mdia.mdhd 声道数 stsd.mp4a 帧数据 stsc + stco + stsz
8.mp4中关于h264和aac的说明 & & &mp4的stsd原子中包含很多关键的音视频编解码元信息。对于视频数据,不同的编解码格式stsd中包含的子原子类型是不同的。MP4的视频H.264封装有2种格式:h264和avc1,只要看到这两个FOURCC(四字节编码)。就可以肯定是h.264编码,区别在于slice是否有起始码。对于音频数据,stsd中包含的子原子只会是mp4a,mp4a又包含了一个子原子esds,判断音频编码格式的是esds中的第十一个字节,如果是0x40则说明是aac编码,如果是0x69则说明是mp3。
AVC1 描述:H.264 bitstream without start codes.一般通过ffmpeg转码生成的视频,是不带起始码0&的,但是带有4字节的长度。
H264 描述:H.264 bitstream with start codes.一般对于一下HDVD等电影的压制格式,是带有起始码0&的。
& & &除了avc1和h264还可能是下面的FOURCC,只是名字不同而已。
MEDIASUBTYPE_AVC1 'AVC1' H.264 bitstream without start codes.
MEDIASUBTYPE_H264 'H264' H.264 bitstream with start codes.
MEDIASUBTYPE_h264 'h264' Equivalent to MEDIASUBTYPE_H264, with a different FOURCC.
MEDIASUBTYPE_X264 'X264' Equivalent to MEDIASUBTYPE_H264, with a different FOURCC.
MEDIASUBTYPE_x264 'x264' Equivalent to MEDIASUBTYPE_H264, with a different FOURCC.
RFC3550/RFC3551
Real-time Transport Protocol)是用于Internet上针对多媒体数据流的一种传输层协议。RTP协议详细说明了在互
转载自:http://bbs.baofengcloud.com/home.phpmod=space&uid=30&do=blog&quickforward=1&id=3 1.ts简介
ts流最早应用于数字电视领域,其格式非常复杂包含的配置信息表多大十几个,视频格
相关阅读排行
相关内容推荐
请激活账号
为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。
您的注册邮箱:
如果您没有收到激活邮件,请注意检查垃圾箱。HTTP Live Streaming(HLS)是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,主要应用在iOS系统,为iOS设备(如iPhone、iPad)提供音视频直播和点播方案。
它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的extended M3U (m3u8) playlist文件,用于寻找可用的媒体流。
m3u8,是HTTP Live Streaming直播的索引文件。m3u8基本上可以认为就是.m3u格式文件,区别在于,m3u8文件使用UTF-8字符编码。
m3u文件头,必须放在第一行
#EXT-X-MEDIA-SEQUENCE
第一个TS分片的序列号
#EXT-X-TARGETDURATION
每个分片TS的最大的时长
#EXT-X-ALLOW-CACHE
是否允许cache
#EXT-X-ENDLIST
m3u8文件结束符
extra info,分片TS的信息,如时长,带宽等
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:11
#EXT-X-KEY:METHOD=AES-128,URI="http://ztest.qiniudn.com/crypt0.key",IV=0xe532855feb3eea0c11f3116
#EXTINF:10.066667,
http://ztest.qiniudn.com/Fr88-3sZu8HqPFot_BapyYtuz3k=/FgCBc3IlydY6CFIA8jhe7jIxCt1y/seg0
#EXT-X-KEY:METHOD=AES-128,URI="http://ztest.qiniudn.com/crypt0.key",IV=0x97fbcec1b94
#EXTINF:10.000000,
http://ztest.qiniudn.com/Fr88-3sZu8HqPFot_BapyYtuz3k=/FgCBc3IlydY6CFIA8jhe7jIxCt1y/seg1
#EXT-X-KEY:METHOD=AES-128,URI="http://ztest.qiniudn.com/crypt0.key",IV=0x928fa7e36cfa8f36979c3a
#EXTINF:10.000000,
http://ztest.qiniudn.com/Fr88-3sZu8HqPFot_BapyYtuz3k=/FgCBc3IlydY6CFIA8jhe7jIxCt1y/seg2
#EXT-X-KEY:METHOD=AES-128,URI="http://ztest.qiniudn.com/crypt0.key",IV=0xde8af0c7d4bee9ae33a8de
#EXTINF:10.000000,
http://ztest.qiniudn.com/Fr88-3sZu8HqPFot_BapyYtuz3k=/FgCBc3IlydY6CFIA8jhe7jIxCt1y/seg3
#EXT-X-KEY:METHOD=AES-128,URI="http://ztest.qiniudn.com/crypt0.key",IV=0x90df003d61ba2ef9413fdaf521cfce15
#EXTINF:10.000000,
http://ztest.qiniudn.com/Fr88-3sZu8HqPFot_BapyYtuz3k=/FgCBc3IlydY6CFIA8jhe7jIxCt1y/seg4
#EXT-X-KEY:METHOD=AES-128,URI="http://ztest.qiniudn.com/crypt0.key",IV=0xcb8d3d7eb66
#EXTINF:2.200000,
http://ztest.qiniudn.com/Fr88-3sZu8HqPFot_BapyYtuz3k=/FgCBc3IlydY6CFIA8jhe7jIxCt1y/seg5
#EXT-X-ENDLIST
hls加密是利用AES-128位对每个ts文件进行加密,播放器在取得PlayList文件的时候,会根据里面的#EXT-X-KEY标签请求获得解密的URL,再请求解密密钥,之后会用密钥对获取的ts文件解密。
实例中 http://ztest.qiniudn.com/Fr88-3sZu8HqPFot_BapyYtuz3k=/FgCBc3IlydY6CFIA8jhe7jIxCt1y/seg5 是一个加密的ts片段,也就是视频切割分片中的一段。
上面简单介绍了一下HLS视频的构成,其实实现HLS的离线缓存播放,就是在理解HLS的播放原理的基础上,在Android本地建立HLS的播放环境,重建m3u8文件。大体上可以分为以下几步:
一、根据播放地址下载m3u8文件
二、解析m3u8文件,提取文件中的片段地址、片段时间长度、解密URL等信息
三、根据上面提取的片段地址按顺序依次下载到sdcard,同一个视频的多个片段下载到同一个文件夹中,并保持规则的文件名,例如0001.ts,0002.ts等
四、根据解密URL,获取加密使用的AES-128位的秘钥,为了安全考虑,可以将秘钥加密后保持到本地,然后本地的http服务在请求是将加密的秘钥解密返回给播放器
五、重新构造本地缓存的m3u8文件,将片段地址替换为本地http服务的地址,将加密key的地址替换为本地服务的地址,其它的原封不动的恢复,可以参见下面的转换后m3u8
六、在本地建立http file server代理本地保存的片段文件,m3u8文件,加密key文件
七、hls播放器的播放链接地址替换为本地的m3u8文件地址就可以
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:11
#EXT-X-KEY:METHOD=AES-128,URI="http://127.0.0.1:8888/crypt0.key",IV=0xe532855feb3eea0c11f3116
#EXTINF:10.066667,
http://127.0.0.1:8888/Fr88-3sZu8HqPFot_BapyYtuz3k=/FgCBc3IlydY6CFIA8jhe7jIxCt1y/seg0
#EXT-X-KEY:METHOD=AES-128,URI="http://127.0.0.1:8888/crypt0.key",IV=0x97fbcec1b94
#EXTINF:10.000000,
http://127.0.0.1:8888/Fr88-3sZu8HqPFot_BapyYtuz3k=/FgCBc3IlydY6CFIA8jhe7jIxCt1y/seg1
#EXT-X-KEY:METHOD=AES-128,URI="http://ztest.qiniudn.com/crypt0.key",IV=0x928fa7e36cfa8f36979c3a
#EXTINF:10.000000,
http://127.0.0.1:8888/Fr88-3sZu8HqPFot_BapyYtuz3k=/FgCBc3IlydY6CFIA8jhe7jIxCt1y/seg2
#EXT-X-KEY:METHOD=AES-128,URI="http://127.0.0.1:8888/crypt0.key",IV=0xde8af0c7d4bee9ae33a8de
#EXTINF:10.000000,
http://127.0.0.1:8888/Fr88-3sZu8HqPFot_BapyYtuz3k=/FgCBc3IlydY6CFIA8jhe7jIxCt1y/seg3
#EXT-X-KEY:METHOD=AES-128,URI="http://ztest.qiniudn.com/crypt0.key",IV=0x90df003d61ba2ef9413fdaf521cfce15
#EXTINF:10.000000,
http://127.0.0.1:8888/Fr88-3sZu8HqPFot_BapyYtuz3k=/FgCBc3IlydY6CFIA8jhe7jIxCt1y/seg4
#EXT-X-KEY:METHOD=AES-128,URI="http://127.0.0.1:8888/crypt0.key",IV=0xcb8d3d7eb66
#EXTINF:2.200000,
http://127.0.0.1:8888/Fr88-3sZu8HqPFot_BapyYtuz3k=/FgCBc3IlydY6CFIA8jhe7jIxCt1y/seg5
#EXT-X-ENDLIST
综上所述基本就可以完成hls视频的本地缓存播放,整体看起来步骤还是比较复杂的,祝好运。
python爬取网站m3u8视频,将ts解密成mp4,合并成整体视频
一些网站会提供m3u8视频地址,以供下载观看。或者一些网站经过分析后发现是使用m3u8格式进行播放的,这时使用m3u8的地址链接就可以下载到相应的视频。一、关于m3u8:(https://blog.c...
m3u8文件完整实例及TS流抓取
http://blog.csdn.net/blueboyhi/article/details/
ffmpeg分解视频文件并加密
ffmpeg,可以将视频分解成小块,并根据密钥进行内容加密。首先需要将密钥写入文件video.key。还需要第二个文件,key_info来存储是关键信息文件。它具有以下格式:key URI
M3U8格式讲解及实际应用分析
M3U8有啥好处 ?
网上搜索了一下,大家众说纷纭,个人理解主要是可以做多码率的适配,根据网络带宽,客户端会选择一个适合自己码率的文件进行播放,保证视频流的流畅。
在IOS devi...
ffmpeg文件生成m3u8文件及ts切片程序(一)
ffmpeg文件生成m3u8文件及ts切片程序(一)
实现目标:输入本地文件,实现m3u8切片,功能点请看注释,注意:注释很重要。
//ffmpeg.h
#ifndef __FFMPEG_H__...
视频TS文件AES加密处理
此处理对象仅限于视频TS文件,不包括其他图文数据。
加密算法:
此算法选用AES(Advanced Encryption Standard,高级加密标准)加密算法,固定秘钥长度:128bit(16...
Android 离线播放 (HLS)m3u8文件
关于HLS(m3u8)文件的介绍 在baidu一下有很多很好的文章了,在这我就不多说了。
android是在sdk4.0以后才开始支持m3u8的播放,此文章便是在sdk4.0以后才适用。
解决加密的HLS(m3u8)视频转换问题
下载视频,遇到一个问题,下载后无法播放,百度一下原来是HLS加密。
M3U8格式分析
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
HLS 如何实现加密 ?
鉴于版权保护的原因,目前Android和iOS都可以正常观看HLS的视频,那么如何对此视频流进行加密?
添加评论 分享
反对,不会显示你的姓名
解密HLS中的AES加密
解密HLS中的AES加密
http://dola.xinfan.org/?p=549
没有更多推荐了,

我要回帖

更多关于 带keyts文件 的文章

 

随机推荐