视频转码服务架构说明书

news/2024/10/23 9:39:09/

需求说明

视频转码服务,具备将高码率的视频转换为低码率的视频,和对不同编码格式的视频进行转换能力的后台服务;

 

规格定义

性能指标:

 

吞吐量和性能指标

4核 8G 1000M网卡

GeForce GT 1030 以上显卡

CPU 到 80%

网络占用率 到 70%

100路 720P 高清 2Mbps -> 640*480P 800kbps

50路 1080P 高清 4Mbps  -> 640*480P 800kbps

 

时延要求:转码服务对视频播放延时需要小于3S

 

支持的协议和编码类型:

协议类型

TCP/UDP

流媒体支持

RTP/PS/RTMP

视频类型

H264/VP8/VP9/H265

音频类型

AAC/OPUS/iLBC

 

架构设计

图1.整体框图

FFmpeg是可以进行多种格式的音频、视频解码、转换、流功能的多媒体开发框架,包含了libavcodec 用于多个项目中音频和视频的解码器库,libavformat进行音频与视频格式转换库,以及libavfilter用于做视频水印、叠加等特效处理的filter工具。同时,FFmpeg可通过使用Nvidia的GPU加速进行视频编解码,根据Nvidia网站上关于硬件编码和软件编码的性能对比,性能以每秒钟编码帧数为参考指标,质量以PSNR为参考指标,可看出性能方面Nvidia编码器是x264的2~5倍,质量方面对于fast stream场景来说Nvidia编码器优于x264。

ZLMediaKit是一个基于C++11的高性能、运营级、流媒体服务框架,支持多种流媒体协议(RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV),支持协议间的互相转换,并对异步IO的网络编程模型进行了封装,是一个非常适合做转码服务器的流媒体服务框架。

线程模型

转码请求接收线程(监听固定3500端口)

接收媒体包线程

转码线程

发送线程

日志线程

类图设计

转码请求接收线程输入请求格式定义:

输入请求

{“dest_ip”:11.12.112.10,

“dest_port”:9000,

“socket_protocol”:”udp”,

“transport_protocol”:”rtp”,

“source_width”:1080,

“source_height”:1920,

“source_samplerate”:2000,

“source_media_type”:”rtp”,

“source_video_codec”:”h264”,

“source_audio_codec”:”aac”,

“dest_video_codec”:”h264”,

“dest_audio_codec”:”aac”,

“dest_width”:640,

“dest_height”:480,

“dest_samplerate”:800 }

输出

{“recv_packet_ip”:”11.12.112.10”, “recv_packet_port”:”9099”}

转码输出的目的IP、端口,网络协议, 源分辨率,源码率, 目标分辨率, 目标码率, 媒体类型(RTP/PS/RTMP/RTSP),视频格式,音频格式,目标视频格式, 目标音频格式

返回:监听的转码服务包接收IP/端口;

业务流程图

  1. 调用方先发送消息给视频转码服务后台的3500端口,配置转码相关信息,要求开始转码;
  2. 视频转码服务接收到调用方的请求后,判断是否具备转码所需要的服务能力,并将配置信息进行存储,返回接收转码包的监听IP和端口;
  3. 调用方监听目标视频的接收端口,并再接收到目标视频流后,转发给需要的客户端,也可以在第一步直接将客户端的IP和端口作为参数提交给转码服务,调用方不需要接收转码完成的视频流;
  4. 发送视频流到转码服务的接收IP和端口;
  5. 将转码完成的视频数据发送给接收IP和端口;
  6. 该步骤发送消息给3500端口结束转码

负载均衡支持

主节点和主节点之间存在心跳消息,主节点和子节点间存在心跳,子节点间不存在心跳;主节点需要负责子节点的转码任务分配,负责将请求转发到子节点,存储各子节点的任务数和吞吐量等服务器状态信息,负责子节点间的负载均衡;主节点和子节点可以分布式部署在不同的服务器上。具体的心跳消息和任务分配消息详细设计中体现。

 

参考:https://it3q.com/article/49


http://www.ppmy.cn/news/601092.html

相关文章

视频内容快速转码解决方案

在这个互联网视频年代,大量的视频网站兴起,人们的视频消费习惯已经养成,大量的视频内容不断产生。然而,如何将这些内容在互联网上快速发布已经成为了一项棘手的事情。特别是高清视频开始普及后,录制1小时的1080P高清视…

ffmpeg-转码脚本02

ffmpeg-转码脚本详解 高级脚本 以下为主要部分 更高级优化要见git上 mkv转码电影脚本 ECHO OFF REM 以下参数不可乱填 SET FFMPEG%~DP0\ffmpeg.exe ::------------------------------------------------------------------------------ CALL:PRO_LOOPDIR ::CALL:PRO_LOOPDIR_SU…

视频编码格式转换 MP4

视频工具有很多,如专业的premiere,但是我们只要涉及后期转换,不涉及制作,所以用不到这末专业的工具。 一般来说,使用暴风转码或者qq影音工具就足以应付我们的日常转换需求,下面以qq影音软件做说明&#xff…

转码

Windows.Media.Transcoding命名空间下提供了相关API,支持对音/视频文件进行转码处理。这些API已经由官方封装好,使用起来比较方便。 通俗一点说,多媒体文件转码就是将音/视频文件从一种格式转换为另一种格式,如将AVI格式的视频转…

【FFmpeg】转码码率

期望总体最大2300视频固定2000,参考 ffmpeg 常用命令 控制转码码率 码率控制码率控制对于在线视频比较重要。因为在线视频需要考虑其能提供的带宽。那么,什么是码率?很简单: bitrate = file size / duration 比如一个文件20.8M,时长1分钟,那么,码率就是: biterate = 2…

视屏转码工具

最近因为工作需要,需要将其它格式的视屏转码为MP4,因此完成了这个工具(支持多种格式互转) 该工具基于jave,但是由于jave太久没维护,里面所依赖的ffmpeg版本过低,还有一下bug,因此重…

python+ffmpeg视频转码转格式

废话 python目前自己也是在学习当中,对python也不是特别精通,写视频转码这个东西也是自己用的到,所以自己在查阅了一些资料后写的这样一个简单工具,这个工具自己使用就可以了,用到正式环境还是有很多不足的&#xff0…

视频转码工具的使用

注意:请将 视频转码工具.zip 压缩包里的VideoConvertTools文件夹放到D盘根目录(否则后续无法对视频进行转码) 初次安装转码工具时需按照操作步骤操作,后续再进行转码时,仅进行二:启动转码工具、三开始转码…