如何用ffmpeg下载SAMPLE-AES-CTR加密流?视频损坏求助
SAMPLE-AES-CTR加密流媒体下载后视频损坏的解决办法
问题根源
SAMPLE-AES-CTR是逐样本加密的流媒体格式,你用-c copy直接复制流时,FFmpeg无法把TS容器里的加密元数据正确转换成MP4要求的sinf加密盒结构,导致视频轨道解码失败;音频正常是因为音频的加密元数据转换逻辑相对简单。
可用解决方法
1. 重新编码视频(兼容性最高)
如果不介意重新编码,直接转码视频就能绕过容器加密元数据的问题,音频可以保留原始编码:
ffmpeg -i "你的流媒体URL" -c:v libx264 -c:a copy output.mp4
2. 给视频加比特流过滤器(尝试保留原编码)
要是想保留原始视频编码,加上视频流的比特流过滤器,修复加密元数据格式:
ffmpeg -i "你的流媒体URL" -c copy -bsf:v h264_mp4toannexb -bsf:a aac_adtstoasc output.mp4
h264_mp4toannexb会调整H.264流的封装格式,配合FFmpeg的解密流程让MP4容器正确识别视频轨道。
3. 先下TS片段再合并(最稳妥的备选)
要是上面的方法都没用,试试先下载所有加密TS片段再合并:
- 先用FFmpeg获取片段列表:
ffmpeg -i "你的m3u8地址" -hide_banner
- 批量下载所有TS片段(注意要带上流媒体要求的请求头,比如Cookie、Referer,否则可能下载失败)
- 合并解密并封装成MP4:
ffmpeg -i "concat:片段1.ts|片段2.ts|..." -c copy -bsf:a aac_adtstoasc output.mp4
额外提醒
- 确保用的是FFmpeg 4.4以上版本,旧版本对SAMPLE-AES的容器转换支持有缺陷。
- 如果流媒体需要验证身份,记得在命令里加请求头,比如:
ffmpeg -headers "Cookie: 你的Cookie内容" -referer "来源页面地址" -i "流媒体URL" ...
内容的提问来源于stack exchange,提问作者Mqx
相关产品推荐
相关产品推荐

