关于直播视频流处理后再转播的技术架构选型
最近有一些需求都跟这个有关,以前都没做过这种实时视频流的处理,都是 crud boy 。目前后端语言是一定要选 java 的。
但是对于这一块基本上一片空白。大家有什么推荐的教程或者书籍么?网上自己搜了下,没什么特别满意的比较全面的教程。
需求是
- 将 A 源 ( hls ) 的流逐帧解码后,送到一个 api 处理(逐帧 /图片),处理后重新编码封装成新的视频流。
- 将封装好的新的视频流推给流媒体服务器,供他人观看。
- 没有并发要求,也就甲方在某几个特定的地址下,看下不同摄像头的视频监控。
技术选型
- 后端 java
- 流媒体服务器:ssr
遇到的问题:
- 因为推流端的解码、编码、封装、再推送的动作特别吃 cpu ,基本上一台机器的 cpu 吃掉 80%。
- 如果把推流端和拉流端弄到一台服务器,用户直接观看 ssr 分发的视频会速度很慢。
- 因为要把每一帧的图片,通过一个 api 处理,处理后推送到 ssr ,这时候造成 ssr 在观看直播时,画面非常容易卡着缓冲,等推流端推送足够多的帧。这方面的性能优化,在 java 应用层的层面还有什么可以做的吗?
谢谢大家
好像有什么 rtmp 还有什么鬼技术,不记得,等一个大佬回复
- 使用云服务,有转码服务
- 用 ffmpeg
- 搜索 Java 流媒体
可以看看 github.com/Red5/red5-server
gstreamer rtsp
估计问的是多流合并、水印这种东西,不是纯转码
我也蹲一个答案
顺便多说一句,这个方面的 Java 是基本不要想了
ffmpeg 将直播流切片保存在本地 然后加工后 接着用它推出去 具体工作 ffmpeg 都能干 你衔接好流程就行
ffmpeg + rtmp + nginx
Ant Media
github.com/ant-media/Ant-Media-Server
你们直播的音视频流处理都是自己做的吗?我们项目用的商用 SDK ,视频流处理这些都带了
需求不明,无法给到您更好的建议,
搞这个的,分推拉,推的话,国内主要用 rtmp ,( youtuebe twitch 也是),你可能需要在服务器段进行转封装或转码,这个想简单的话就 ffmpeg 了,或者有音视频开发资源的话,自己去开发,成本比较大。拉流就随意了,DASH/HLS 都支持 low latency ,还是有现成的方案的。主要还是在服务器这里,没有 C/C++ 技术栈去深入的话,基本上就只能用现成的。
感谢各位大佬,我这边的需求其实是这样。
有一个直播的 hls 格式来源,是个视频流的地址。这个地址可以通过 java 封装的 ffmpeg 抓取到帧,然后需求需要把每一帧的图片,通过另外一个图片 APi 做一下处理,然后重新转码封装成 rtmp 格式的视频流推到流媒体服务器。
现在流媒体服务器用的国产的 ssr 。遇到的问题,是拉流端 即 -> 抓取直播 hls 数据,解码成图片,然后 api 处理后重新编码封装成视频格式这里,非常的耗费 cpu 资源。
一台服务器起码吃掉 80%,不知道是否有可能可以解决?
谢谢各位大佬,详细内容已经补充到了问题中。
#14 每一帧的图片调一次 API 做一次处理再重新拼成视频…这么处理吃 CPU 是必然的。建议描述一下这个图片 API 做了什么事,看看有没有什么更合适的解决办法。
编解码不吃 CPU 就吃 GPU 你这个方案可以有两个可能改善的效果。解码成 raw 数据,然后 api 处理 raw 数据,再编码,可以少编码解码过程。其次就是用硬件 GPU ,降低 CPU 使用。
加一块垃圾显卡 GPU 加速 能显著提升效率
软解软编非常吃 CPU ,上显卡吧。四路泰坦~~ [狗头]
云服务不香?
学习一下 twitch
解码 /编码确实很消耗 CPU ,这是 GPU 更擅长的领域,不过还有更专用的解码 /编码硬件,
JAVA 层的优化空间,我能想到的是你使用的 FFMPEG 是 JAVA 实现还是 JNI/JNA 实现,
理论上说 C++的实现会比 JAVA 的性能更好。还有你说的 API 处理是处理什么,加水印还是其他的
图形识别?获取甲方的摄像头比你想象的更强大。你可以再展开说一说,我们的智慧是无穷的
吃资源的东西,还非要用 java ,这就不好弄了,要么找一下商用的,或者上云吧。云端转了传回你,你负责分发就行了
是一个百度的图片识别 api ,主要标注和统计当前图片中有哪些类型的车辆,和车辆所在图片的坐标的。
目前确实用的就是这个方案。java 用的是 org.bytedeco.javacv 这个库。
感谢两位。我不太理解云服务是指?
目前我们的项目就是部署到阿里云的。你们的意思是说,整个解码编码都不自己做了,直接把源链接扔给某个服务,然后他们转了返给我们,我们直接拿到以后分发就完事儿,连编码都不用了?
一定要拆开逐帧操作的话建议用云函数,一帧调用一次
可以看看 27 楼说的云函数,还有阿里云里面的 VEC 、媒体处理之类的。
ffmpeg 本身就可以做这个,拉取流,转码,然后推出去,一个 shell 脚本搞定
#26 差不多就是这样,所有计算型的任务都是消耗云端的硬件资源。阿里云也是有类似服务的,像这种 www.aliyun.com/product/mts?spm=5176.100239.blogrightarea51182.6.4NU75C
插楼,C++ 我知道国人开发的一款比较不错的: github.com/ZLMediaKit/ZLMediaKit
还是交给云不错,只靠 java 很难做到高性能的音视频处理。推拉的过程带来的时延和卡顿一直都是业界研究的重点,比较靠谱的方案是推给 CDN ,这个 CDN 还是得支持 http chunck encoding 的,使用 low latency 的 DASH/HLS, 延迟能到 2s 左右,但是这都是商业方案才能做到的,开源方案基本上没有较好的办法
我仔细读了一下你补充的内容和原始的内容,由于你需要使用 opencv 做物体识别,我的建议你的 server 只处理推拉流,opencv 识别的部分放到客户 client 处理,好点的 android 设备,不带屏幕,2500 以内,用 opencv 做识别输出视频,如果甲方的摄像头能直连 android 识别的话性能更好,60FPS 没问题
先不说 CPU 使用率的问题,每帧都调用 API 怎么能保持实时性
阿里云的话,看看视频直播、视频点播提供的服务能否支持你们的整个业务流程
个人感觉肯定不能每帧都调用,在误差或者允许的情况下每秒调用 4-6 次足够了。
如果必须要求每帧,我觉得需要考虑边缘计算。
当然非实时就随便搞了。
更换背景 1 、公司强制要求用公司的电脑设备,不允许用私人设备,用了还得签协议。 2 、个人使用 ubuntu18.04 很多年,主力电脑,2019 年开始用到现在,中间用过 …
然后今天发现 wps ,excel ,记事本等软件打开的时候,会显示水印,水印信息是 mac 地址。这个是怎么实现的?我现在还能打开注册表,有大佬指条明路吗?? 防护项目:注…
不是说这游戏无聊,是太好玩,而且需要保持专注,但又处在重复场景之中,很容易疲劳;结果上周六周天,11 点就抗不住了,倒头就睡着;要知道我平时周末玩 fifa 或 2k 一般是晚…