前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >视频转码服务架构说明书

视频转码服务架构说明书

作者头像
呱牛笔记
发布2023-05-02 15:06:44
发布2023-05-02 15:06:44
2.6K0
举报
文章被收录于专栏:呱牛笔记呱牛笔记

需求定义

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

规格定义

性能指标:

吞吐量和性能指标

4核 8G 1000M网卡GeForce GT 1030 以上显卡CPU 到 80%网络占用率 到 70%

100路 720P 高清 2Mbps -> 640*480P 800kbps50路 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端口结束转码

负载均衡支持

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 需求定义
  • 规格定义
  • 架构设计
  • 线程模型
  • 类图设计
  • 业务流程图
  • 负载均衡支持
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档