我们公司在某地硬件设备上装了视频监控,目前是上传到云存储桶里,为了节省存储带宽等成本,存的是 h.265 编码格式的视频,但是这样子在浏览器端没法播放

所以我想了两个方案
1. 浏览器端找能支持 h265 的播放器 js ,但是基本上找到的都是基于 wasm 的 ffmpeg ,也就是在浏览器端解码,然后通过 canvas 一帧一帧画,然后再用 audio 播放声音。感觉这个方案不是很好,可能会又吃性能又卡,还有可能声音画面不同步。

2.通过增加中间层服务,使用 ffmpeg+nodejs 进行转码(我不太会其他语言)。尝试了一下如果用 ffmpeg 完全把一个视频转换成 h264 的格式,耗费的时间会很长,有些长视频要半个多小时。

所以我现在的想法是:
       
我看浏览器的 video 标签加载视频时,也不是整个视频缓冲完才开始播放呀,metadata 加载到了就可以播放了?而且貌似也是播放一点加载一点,这样是不是可以用 ffmpeg+nodejs 做成实时转码的服务?浏览器端请求一小段,就转一小段,这样子就使得该视频原生支持 video 标签了,也不需要额外的播放器 js 了。同时也能使用 video 标签自带的进度条拖拽进度

想问下大家我的这个想法是否可行?

还有个问题,我看到一些方案里写 ffmpeg 转 m3u8 ,然后存一堆 ts 文件,浏览器端再用某个 js 播放库去播放,这样存储成本是不是又上来了?外加转码服务的服务器成本,搞不好还不如一开始直接存 h264 格式?

ffmpeg+nodejs 有没有可能做到实时转码成原生 video 支持的格式,对于浏览器端来说属于无感知的转码那种的,不需要存文件,直接返回流给前端
举报· 176 次点击
登录 注册 站外分享
16 条回复  
heimoshuiyu 小成 2024-9-6 10:24:36

程序员菜鸟,请教一个 web 视频转码的问题

> ffmpeg+nodejs 有没有可能做到实时转码成原生 video 支持的格式,对于浏览器端来说属于无感知的转码那种的,不需要存文件,直接返回流给前端

可以,我在自己的项目里 https://github.com/heimoshuiyu/msw-open-music 就这么做的,后端调用 ffmpeg 数据输出到标准输出流,然后直接发送到浏览器。我还注意到其他项目也是这样实现的实时转码
- https://github.com/jellyfin/jellyfin
- https://github.com/sentriz/gonic

不过这么做不支持 seek 播放,需要后端根据客户端请求播放的视频时间点,修改 ffmpeg 的 -ss 参数
rain0002009 小成 2024-9-6 10:00:19

程序员菜鸟,请教一个 web 视频转码的问题

既然都云存储了 为啥不用云存储提供的服务 不管是阿里云,百度云啥的一般都提供音视频转码和视频播放 sdk 就是要钱 https://i.imgur.com/agAJ0Rd.png
jifengg 小成 2024-9-6 09:39:00

程序员菜鸟,请教一个 web 视频转码的问题

前段时间一个项目参考过 https://github.com/648540858/wvp-GB28181-pro
这个项目,他支持页面播放 h265 的,可以自己研究一下。
qqqnnn 小成 2024-9-6 08:07:20

程序员菜鸟,请教一个 web 视频转码的问题

h265 本身电脑都支持硬解 看看是否装了 hevc 可以看看常用的 web 播放器 flv-h264js xgplay jessibuca
geekvcn 小成 2024-9-6 02:51:53
你用的啥野鸡浏览器? Edge ? Edge 去商店装个 HEVC 扩展,Chrome 的话字节跳动早就提交代码支持 HEVC 解码了 107 之后的版本
billlee 小成 2024-9-6 02:26:52
看看 b 站是怎么做的,他们可以 wasm 软解 av1
lingo 小成 2024-9-5 23:38:33
我们之前是直播流,rtsp 还是 rtmp 什么的细节忘了。。内部用的,大佬直接改了 chromium 的源码(笑哭
Projection 小成 2024-9-5 23:30:33
https://chromium.woolyss.com/ 有包含 H.265 解码器的 Chromium 下载
为哈非得在浏览器播放,本地随便起个播放器不行吗
xiaohang427 初学 2024-9-5 23:20:29
@sagaxu 思路刁钻
12下一页
返回顶部