视频转码服务架构说明书
需求说明
视频转码服务,具备将高码率的视频转换为低码率的视频,和对不同编码格式的视频进行转换能力的后台服务;
规格定义
性能指标:
吞吐量和性能指标 |
|
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/端口;
业务流程图
- 调用方先发送消息给视频转码服务后台的3500端口,配置转码相关信息,要求开始转码;
- 视频转码服务接收到调用方的请求后,判断是否具备转码所需要的服务能力,并将配置信息进行存储,返回接收转码包的监听IP和端口;
- 调用方监听目标视频的接收端口,并再接收到目标视频流后,转发给需要的客户端,也可以在第一步直接将客户端的IP和端口作为参数提交给转码服务,调用方不需要接收转码完成的视频流;
- 发送视频流到转码服务的接收IP和端口;
- 将转码完成的视频数据发送给接收IP和端口;
- 该步骤发送消息给3500端口结束转码
负载均衡支持
主节点和主节点之间存在心跳消息,主节点和子节点间存在心跳,子节点间不存在心跳;主节点需要负责子节点的转码任务分配,负责将请求转发到子节点,存储各子节点的任务数和吞吐量等服务器状态信息,负责子节点间的负载均衡;主节点和子节点可以分布式部署在不同的服务器上。具体的心跳消息和任务分配消息详细设计中体现。
参考:https://it3q.com/article/49
视频转码服务架构说明书相关推荐
- 百度开放云 视频转码服务
在上一篇文章中,我们介绍了如何借助 百度开放云的文档转码服务 来方便的处理各种文档格式,同时还可以借助跨平台的文档播放器来方便的查看转码之后的效果. 在这篇文章里面,我们继续介绍,如何借助百度开放云的 ...
- 快手智能视频图像编码处理服务架构
正文字数:9639 阅读时长:14分钟 本文来自于快手视频算法工程师团队负责人闻兴在LiveVideoStackCon2020北京站上的精彩分享.凭借本主题演讲,闻兴老师荣获此次大会评选的优秀讲师称 ...
- Nginx+rtmp+ffmpeg搭建视频转码服务
第一步,安装nginx-rtmp-module 模块 因为nginx搭建流媒体服务需要用到 nginx-rtmp-module 模块,所以先安装nginx-rtmp-module # cd /root ...
- 新浪微博:大规模离线视频处理系统的架构设计
微博视频平台在4亿月活用户吃瓜嗨聊的高并发.大流量背景下,既要保证用户微博生产和消费体验,又要支持业务快速迭代,确保正确性.稳定性和高可用性.本次演将以微博视频大规模视频离线处理系统的架构设计为主题为 ...
- 音视频转码技术指南:国内主流云转码服务提供商对比测评
摘要: 随着大量视频产生,怎样才能够高效精准地对视频进行云端转码和处理,来适配多终端展示需求和应对复杂的网络情况,是我们视频行业开发人员工作的重中之重.作为从业者,我们会经常接触各大云转码服务商,对音 ...
- Revvel如何将视频转码速度提升几十倍?
来自Revvel的团队的Greg Femec在re:Invent 2017大会上分享了他在构建视频转码服务中遇到的挑战,以及构建基于Serverless架构的视频转码平台的经验.Revvel团队将视频 ...
- 分布式服务架构的设计方案上—分布式基础理论知识
文章目录 1.什么是分布式架构 2.SOA架构和微服务架构 2.1 SOA架构 2.2 MSA 微服务架构 微服务特征 2.3 SOA 架构和微服务架构的区别 3.节点与网络 3.1 节点 3.2 网 ...
- 音视频转码器产品规格
音视频转码器产品规格 QQ:16614119 一. 产品简介: 音视频转码器是一套商业级的实时.非实时转码产品.提供常用编码格式之间的转换:支持远程控制转码任务:支持多种输入输出 ...
- 视频转码能力哪家强?腾讯云、阿里云、七牛云多维度对比
随着大量视频产生,怎样才能够高效精准地对视频进行云端转码和处理,来适配多终端展示需求和应对复杂的网络情况,是我们视频行业开发人员工作的重中之重.作为从业者,我们会经常接触各大云转码服务商,对音视频转码 ...
最新文章
- 阿里云K8S容器服务的使用
- SQL Server(五)——常用函数
- IIS 配置Http重定向到Https
- Jmeter也能IP欺骗!
- 关于AttributeError: type object ‘XXX‘ has no attribute ‘XXX‘的问题
- 2020牛客NOIP赛前集训营提高组(第四场)B-色球【链表】
- html 拖放实现拼图游戏,Canvas drag 实现拖拽拼图小游戏
- 如何安装mysql5.7.25_Centos7 yum安装MySQL5.7.25
- 【LeetCode】剑指 Offer 62. 圆圈中最后剩下的数字
- oracle发生重启动的介绍
- 找零程序Java_JAVA解惑--找零时刻
- 用ASP.NET上传大文件 (转载自思归blogs)
- Unity MeshAnimator 2.0.16 ShaderMode
- Ubuntu 15.10 x64 安装 Android SDK
- qt for android 中无法运行和调试应用程序,No Device Found,The adb tool in the Android SDK lists all......
- 快速解决Ubuntu缺少各种驱动的方法: 解决ThinkPad T14s没有无线网卡驱动以及WIFI无法连接等驱动问题
- GDPR对ITSM的影响
- 机器学习之PQ量化算法
- 微服系列之Feign使用HttpClient和OkHttp网络请求框架
- C++ typedef用法小结(挺好)