Video 如何根据每个请求有效地处理视频?
我正在开发一个web应用程序,在将视频发送给用户之前,必须将水印应用于视频。当前,此水印是静态的,在更新视频时使用ffmpeg创建。但是,应用程序正在更改,以便为视频的每个请求添加唯一的水印。这可以防止出现问题,因为视频文件可能相当大,添加水印可能非常耗时(例如,在某些情况下,添加水印可能需要一分钟以上),但无法在上传时添加水印 我认为流媒体视频可能是一个解决方案,并使用nginx rtmp模块实现了一个解决方案,但出现了几个问题:Video 如何根据每个请求有效地处理视频?,video,ffmpeg,video-streaming,html5-video,Video,Ffmpeg,Video Streaming,Html5 Video,我正在开发一个web应用程序,在将视频发送给用户之前,必须将水印应用于视频。当前,此水印是静态的,在更新视频时使用ffmpeg创建。但是,应用程序正在更改,以便为视频的每个请求添加唯一的水印。这可以防止出现问题,因为视频文件可能相当大,添加水印可能非常耗时(例如,在某些情况下,添加水印可能需要一分钟以上),但无法在上传时添加水印 我认为流媒体视频可能是一个解决方案,并使用nginx rtmp模块实现了一个解决方案,但出现了几个问题: RTMP解决方案是不可行的,因为它们似乎需要闪存。此应用程序必
ffmpeg
的示例(来自):
Nginx配置:
application hls {
live on;
hls on;
hls_path /tmp/hls;
}
公共播放URL将为http:///hls/movie/playlist.m3u8
。您还可以使用exec
根据请求启动ffmpeg
命令(带水印覆盖)以下是一些网站实施的解决方案:
- 相对容易实现。不需要服务器端配置或ffmpeg或nginx插件
- 所有的工作都是在客户端完成的,因此您可以减少服务器负载
- 你可以放任何你喜欢的水印。您甚至可以设置动画或在3D中渲染(使用webgl)
- HTML5特有的。像IE7、IE8这样的旧浏览器大多数都不起作用。无论如何,这些浏览器都需要Flash
- 需要客户端浏览器提供更多的处理能力。这对于桌面浏览器来说不是问题,但可能会导致播放不稳定和/或在旧款、电量不足的手机上消耗更高的电池
- 如果有人直接播放媒体流(不使用您的网页,例如在VLC中),则将没有徽标
ffmpeg
命令对输入视频进行转码并输出rtmp流。Nginx配置获取rtmp流并将其重新加载到hls。我看不到水印?我遗漏了什么吗?我不熟悉这些播放器,看看它们是否在没有第三方解码器的情况下工作。覆盖在ffmpeg ofc命令中,您可以使用nginx exec按需启动它。我有Viblast和Theo的经验,它们是完整的HTML5解决方案,不需要任何特定的第三方解码器或插件。他们使用内置API来实现HLS回放。代码段中的ffmpeg
命令对输入流进行转码(-vcodec libx264
将进行ffmpeg转码,即使输入已经是h264)。示例来自nginx文档。您将使用自己的命令。如果你覆盖一个水印,你将被迫重新编码。实际上我现在正在这样做,但我希望水印能真正嵌入到视频中。好主意!
application hls {
live on;
hls on;
hls_path /tmp/hls;
}