admin管理员组文章数量:1660166
使用ffmpeg进行拼接是下载网络流媒体的利器
但是最近发现,有多个资源站拉出的m3u8文件中,ts分片比较奇怪
从链接上看,这些分片没有传统的ts后缀,例如:
#EXTINF:6.269,
xxxxxxx2189/651d236eec8b4d20a625d482d91bfde5
手动下载会发现chrome中默认以图片格式打开
保存到本地,给其增加后缀.ts后,QuickTime可以正常播放
但使用ffprobe分析,发现识别为png,进而导致无法拼接,分析结果如下
[png_pipe @ 0x557934e58080] Stream #0: not enough frames to estimate rate; consider increasing probesize
Input #0, png_pipe, from 'test.ts':
Duration: N/A, bitrate: N/A
Stream #0:0: Video: png, rgba(pc), 1x1, 25 tbr, 25 tbn, 25 tbc
[FORMAT]
filename=test.ts
nb_streams=1
nb_programs=0
format_name=png_pipe
format_long_name=piped png sequence
start_time=N/A
duration=N/A
size=8144042
bit_rate=N/A
probe_score=99
[/FORMAT]
使用Hexeditor打开后,发现文件头被描述为了PNG
在这种情况下,只需要将其中PNG文件头部分全部使用FF填充,即可处理该问题
填充后的效果如图
批量代码处理的方案
判断文件开头为 89 50 4E 47 -〉说明被伪装成了PNG
一直填充FF到 47 40 -〉从这边开始就是TS文件的内容了
更新:
最新发现,只要填充89 50 4E 47四个值就可以
需要注意:
不可以直接删除这一段,直接删除后ffprobe提示如下错误
123.ts: Invalid data found when processing input
使用TS分析工具会提示
no valid synchronize byte found
例子代码:
# 解析伪装成png的ts
def resolve_ts():
for i in range(1695):
origin_ts = 'temp_file/' + str(i) + '.ts'
resolved_ts = 'resolve_file/' + str(i) + '.ts'
infile = open(origin_ts, "rb") # 打开文件
outfile = open(resolved_ts, "wb") # 内容输出
data = infile.read()
outfile.write(data)
outfile.seek(0x00)
outfile.write(b'\xff\xff\xff\xff')
outfile.flush()
infile.close() # 文件关闭
outfile.close()
print('resolve ' + origin_ts + ' success')
版权声明:本文标题:对近期一些网站的m3u8中,分片不包含ts后缀,无法使用ffmpeg拼接问题的分析 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1729850677a1215364.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论