我正在开发一个Web应用程序,在该应用程序中,必须先将水印应用于视频,然后再将其发送给用户。目前,此水印是静态的,并且在更新视频时使用ffmpeg创建。但是,应用程序正在发生变化,因此每次为视频发出的请求都会在视频中添加唯一的水印。这可以防止出现问题,因为视频文件可能相当大并且添加水印可能是耗时的(例如,在某些情况下,添加水印可能需要一分钟以上),但是在上载时不能添加水印。 / p>
我认为流媒体视频可以是一个解决方案并使用nginx-rtmp-module实现解决方案,但是出现了几个问题:
我想知道这个问题是否有更好的(也许是更简单的)解决方案;也许流媒体视频根本不是可行的方式? 是否有一种有效的方式来动态转码视频文件并开始快速将其发送到浏览器?
我不反对使用node.js或其他平台/框架等解决方案,如果需要,解决方案可以使用HTML5 <video>
。
答案 0 :(得分:1)
你对HLS的支持有限是错误的。它得到了现代移动设备的广泛支持,iOS(自Apple创建协议)和Android(在早期的4.x版本中存在一些错误,但从4.4开始它可以正常工作)。请参阅encoding.com&#39; 2015 Global Media Delivery Report。
仅在桌面上需要Flash后备,但MacOS上的Safari除外。支持和免费的HLS播放器都可以在桌面上使用Flash后备支持。
Nginx RTMP模块还可以根据输入RTMP流输出HLS。您只需使用H.264为模块提供RTMP流,然后在HLS中为您重新复用它。
使用ffmpeg
(来自docs)的示例:
ffmpeg -loglevel verbose -re -i movie.avi -vcodec libx264
-vprofile baseline -acodec libmp3lame -ar 44100 -ac 1
-f flv rtmp://localhost:1935/hls/movie
Nginx配置:
application hls {
live on;
hls on;
hls_path /tmp/hls;
}
公开播放网址为http://<server>/hls/movie/playlist.m3u8
。您还可以根据要求使用exec
启动ffmpeg
命令(带水印叠加层)。
答案 1 :(得分:1)
这是我见过一些网站实施的解决方案:
优点:
缺点: