macOS下通过FFmpeg实时解密并在VLC播放加密影片的可行性咨询
问题描述
在macOS系统中,我通过以下FFmpeg命令解密加密影片并在VLC中播放:
ffmpeg -decryption_key 0 -i "movie.locked.mp4" -f matroska | /Applications/VLC.app/Contents/MacOS/VLC - --fullscreen --quiet --play-and-exit
影片大小在200-1000MB之间,且有数百个此类文件。目前的问题是解密速度过慢,300MB影片要等5分钟才能开始播放,推测FFmpeg是先解密完整影片再交给VLC播放。想问是否支持**on the fly(实时)**播放,也就是解密完一段就播放一段,不用等全片解密完成,只需要约10秒延迟就能开始播放?
实现实时流式播放的调整方案
你的推测成立,默认参数下FFmpeg会预缓存大量数据再输出,导致启动延迟。通过以下调整可以实现实时流式播放:
禁用FFmpeg预缓存
添加-avioflags direct参数,强制FFmpeg读取数据后立即处理输出,减少预缓存等待:ffmpeg -decryption_key 0 -avioflags direct -i "movie.locked.mp4" -f matroska | /Applications/VLC.app/Contents/MacOS/VLC - --fullscreen --quiet --play-and-exit更换更适合流式的输出格式
Matroska封装可能带来额外延迟,换成MPEG-TS格式(VLC对其流式支持更好):ffmpeg -decryption_key 0 -avioflags direct -i "movie.locked.mp4" -f mpegts | /Applications/VLC.app/Contents/MacOS/VLC - --fullscreen --quiet --play-and-exit手动设置VLC缓存时长
添加--network-caching=10000参数(对应10秒延迟),平衡播放流畅度和启动速度:ffmpeg -decryption_key 0 -avioflags direct -i "movie.locked.mp4" -f mpegts | /Applications/VLC.app/Contents/MacOS/VLC - --network-caching=10000 --fullscreen --quiet --play-and-exit批量播放脚本优化
针对数百个文件,可编写Shell脚本批量处理(保存为batch_play.sh):#!/bin/bash for file in *.locked.mp4; do ffmpeg -decryption_key 0 -avioflags direct -i "$file" -f mpegts | /Applications/VLC.app/Contents/MacOS/VLC - --network-caching=10000 --fullscreen --quiet --play-and-exit done执行前给脚本加权限:
chmod +x batch_play.sh,运行即可批量播放。
内容的提问来源于stack exchange,提问作者doctor
相关产品推荐
相关产品推荐

