关于直播视频流处理后再转播的技术架构选型

2022-03-15 07:48:53 +08:00
 mikulch

最近有一些需求都跟这个有关,以前都没做过这种实时视频流的处理,都是 crud boy 。目前后端语言是一定要选 java 的。 但是对于这一块基本上一片空白。大家有什么推荐的教程或者书籍么?网上自己搜了下,没什么特别满意的比较全面的教程。

3608 次点击
所在节点    Java
44 条回复
nicevar
2022-03-15 10:48:44 +08:00
学习一下 twitch
LLaMA2
2022-03-15 11:13:44 +08:00
解码 /编码确实很消耗 CPU ,这是 GPU 更擅长的领域,不过还有更专用的解码 /编码硬件,
JAVA 层的优化空间,我能想到的是你使用的 FFMPEG 是 JAVA 实现还是 JNI/JNA 实现,
理论上说 C++的实现会比 JAVA 的性能更好。还有你说的 API 处理是处理什么,加水印还是其他的
图形识别?获取甲方的摄像头比你想象的更强大。你可以再展开说一说,我们的智慧是无穷的
janus77
2022-03-15 11:44:51 +08:00
吃资源的东西,还非要用 java ,这就不好弄了,要么找一下商用的,或者上云吧。云端转了传回你,你负责分发就行了
mikulch
2022-03-15 12:11:51 +08:00
@locoz
@ye4tar
是一个百度的图片识别 api ,主要标注和统计当前图片中有哪些类型的车辆,和车辆所在图片的坐标的。
mikulch
2022-03-15 12:14:29 +08:00
@andyskaura
@ybnsjl
@hu8245
@ye4tar

目前确实用的就是这个方案。java 用的是 org.bytedeco.javacv 这个库。
mikulch
2022-03-15 12:15:32 +08:00
@janus77
@raysonlu 感谢两位。我不太理解云服务是指?
目前我们的项目就是部署到阿里云的。你们的意思是说,整个解码编码都不自己做了,直接把源链接扔给某个服务,然后他们转了返给我们,我们直接拿到以后分发就完事儿,连编码都不用了?
wangyu17455
2022-03-15 12:30:17 +08:00
一定要拆开逐帧操作的话建议用云函数,一帧调用一次
smilzman
2022-03-15 12:51:49 +08:00
@mikulch 可以看看 27 楼说的云函数,还有阿里云里面的 VEC 、媒体处理之类的。
mayli
2022-03-15 13:01:43 +08:00
ffmpeg 本身就可以做这个,拉取流,转码,然后推出去,一个 shell 脚本搞定
janus77
2022-03-15 13:34:44 +08:00
@mikulch #26 差不多就是这样,所有计算型的任务都是消耗云端的硬件资源。阿里云也是有类似服务的,像这种 https://www.aliyun.com/product/mts?spm=5176.100239.blogrightarea51182.6.4NU75C
skiy
2022-03-15 13:52:16 +08:00
插楼,C++ 我知道国人开发的一款比较不错的: https://github.com/ZLMediaKit/ZLMediaKit
hu8245
2022-03-15 14:01:47 +08:00
还是交给云不错,只靠 java 很难做到高性能的音视频处理。推拉的过程带来的时延和卡顿一直都是业界研究的重点,比较靠谱的方案是推给 CDN ,这个 CDN 还是得支持 http chunck encoding 的,使用 low latency 的 DASH/HLS, 延迟能到 2s 左右,但是这都是商业方案才能做到的,开源方案基本上没有较好的办法
LLaMA2
2022-03-15 14:33:30 +08:00
我仔细读了一下你补充的内容和原始的内容,由于你需要使用 opencv 做物体识别,我的建议你的 server 只处理推拉流,opencv 识别的部分放到客户 client 处理,好点的 android 设备,不带屏幕,2500 以内,用 opencv 做识别输出视频,如果甲方的摄像头能直连 android 识别的话性能更好,60FPS 没问题
darkengine
2022-03-15 14:42:13 +08:00
先不说 CPU 使用率的问题,每帧都调用 API 怎么能保持实时性
raysonlu
2022-03-16 09:25:17 +08:00
@mikulch 阿里云的话,看看视频直播、视频点播提供的服务能否支持你们的整个业务流程
zliea
2022-03-16 11:53:05 +08:00
个人感觉肯定不能每帧都调用,在误差或者允许的情况下每秒调用 4-6 次足够了。
如果必须要求每帧,我觉得需要考虑边缘计算。
zliea
2022-03-16 11:56:51 +08:00
当然非实时就随便搞了。
mikulch
2022-03-16 17:05:36 +08:00
@zliea 刚刚新增了需求,不用实时,可以延迟 5 - 10 分钟。但是即使是这样子,问题还是存在,就是消费端看视频,看完推送过去的视频以后,就要等后续新推送的视频了。
但是这边推送因为要走 api 处理推送会很慢,没有办法。
mikulch
2022-03-16 17:11:17 +08:00
@darkengine 现在的问题就是这个,消费端的速度太快,生产端的速度跟不上。
darkengine
2022-03-16 17:28:05 +08:00
所以这个方案有问题啊,搞个本地的 SDK 还差不多。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/840368

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX