`

视频流服务架构解析

    博客分类:
  • java
阅读更多
http://www.infoq.com/cn/articles/video-service-arch

编者按:土豆网拥有国内最大的海量视频数据流媒体,截至当前,累计原创UGC视频超过6000万,每天2-2.5亿视频播放量,千万级用户访问行为和视频播放需求,如何能够更好地满足用户对于视频流的播放需求,基于互联网架构的流媒体服务应该具有哪些特点,未来的挑战是什么?这是本文作者李明杰要分享的主要内容。

什么是完整的多媒体视频文件?

一个完整的多媒体文件是由音频和视频两部分组成的,H264、Xvid等就是视频编码格式,MP3、AAC等就是音频编码格式,字幕文件只是附加文件。

要将视频编码和音频编码打包成一个完整的多媒体文件,可以有不同的方式,这种方式便是所谓的封装方式,不同的封装方式有不同的后缀。由于有些封装方式具有很强的灵活性,它可以把各种不同的音视频文件打包成一个文件,因此会出现这么一种情况,虽然文件后缀是相同的,但有些文件可以正常播放而有些却不能播放,毕竟任何一种播放软件都不是万能的。部分先进的封装方式还可以同时封装多个音频编码文件,甚至同时封装进字幕文件,如MKV (MKV文件可以做到一个文件包括多种语种发音,多语字幕以适合不同的人观看)封装方式。





相关厂商内容


京东“宙斯杯”创新应用大赛开始了,100万奖金等你拿哦! 

百度技术沙龙第四十四期: 大数据面面观(2013年11月23日周六) 

QClub大连站:软件开发过程中的平台、技术选择(2013年11月23日 周六) 



多媒体视频文件的常见组合方式


   


封装格式

视频流编码格式

音频流编码格式


AVI

Xvid

MP3


AVI

Divx

MP3


Matroska(后缀就是MKV)

Xvid

MP3


Matroska(后缀就是MKV)

Xvid

AAC


Matroska(后缀就是MKV)

H264

AAC


MP4

Xvid

MP3


MP4

H264

AAC


3GP

H.263

AAC


flv

H.263

AAC


f4v

H.264

AAC










































表1:多媒体视频文件组合方式

封装格式(也叫容器):所谓封装格式就是将已经编码压缩好的视频轨和音频轨按照一定的格式放到一个文件中,就是说仅仅是一个外壳,或者把它当成一个放视频轨和音频轨的文件夹也可以。说通俗点,视频流媒体相当于饭,而音频流媒体相当于菜,封装格式是选择什么样的容器(碗或锅),用来盛放某种视频流和音频流的组合。

视频流编码格式:
•mpeg1:早期vcd使用的就是这种编码格式,分辨率是352*288,压缩比低。
•mpeg2:早期DVD使用,有NTSC(720480)和PAL(720576),和mpeg1一样属于即将被淘汰的编码格式。
•mpeg4:目前使用最多的技术,avi文件,大大提高压缩比,而质量堪比4倍DVD画质。
•divx:基于mpeg4开发的,进行了一定的算法优化。
•xvid:相当于divx的开源版本,也是基于mpeg4的编码技术更先进,采用开放源码,画质更好。
•h.261:早期低码率编码,应用于352x288和176x144,现在被淘汰了。
•h.263:在低码率下能够提供比H.261更好的图像效果,算法进行了部分优化。
•h.263+:h.263的改进型,亮点不多。
•h.264 :H.264集中了以往标准的优点,高效压缩,high profile的压缩比例,目前最流行的编码方式。
•RV.10 RV.13 RV.20 RV.30 RV40: real 公司推出的应用于网络的高压缩编码,rm是固定码率和rmvb是动态码率。

流媒体播放协议

以“流(Streaming)”的形式在基于IP协议的互联网中进行多媒体数据的实时、连续传播,客户端在播放前并不需要下载整个媒体文件,而是在将缓存区中已经收到的媒体数据进行播放的同时,媒体流的剩余部分仍持续不断地从服务器递送到客户端,即所谓的“边下载,边播放”。

RTSP(实时流媒体会话协议): 协议全称:Real-Time Stream Protocol,是一种基于文本的应用层协议,在语法及一些消息参数等方面,RTSP协议与HTTP协议类似。RTSP被用于建立的控制媒体流的传输,它为多媒体服务扮演“网络远程控制”的角色。尽管有时可以把RTSP控制信息和媒体数据流交织在一起传送,但一般情况RTSP本身并不用于转送媒体流数据。媒体数据的传送可通过RTP/RTCP等协议来完成。

MMS(多媒体短息服务): 协议全称Multimedia Messaging Service,它最大的特色就是支持多媒体功能。多媒体信息使具有功能全面的内容和信息得以传递,这些信息包括图像、音频信息、视频信息、数据以及文本等多媒体信息,可以支持语音、因特网浏览、电子邮件、会议电视等多种高速数据业务,在GPRS网络的支持下,以WAP无线应用协议为载体传送视频片段、图片、声音和文字。多媒体信息业务可实现即时的手机端到端、手机终端到互联网或互联网到手机终端的多媒体信息传送。

HTTP协议: 大众化的通信协议,在这里不做详细解释。

在线流媒体视频服务

在线流媒体的服务根据视频播放器的不同设备要求,需要输出不同的封装视频格式:

   


封装容器

视频流编码格式

音频流编码格式

Flash Player

HTML5的video控件

PC端player

手机端player

ios player


AVI

Xvid

MP3

不支持

不支持

支持

不支持

不支持


AVI

Divx

MP3

不支持

不支持

支持

不支持

不支持


MKV

Xvid

MP3

不支持

不支持

支持

不支持

不支持


MKV

Xvid

AAC

不支持

不支持

支持

不支持

不支持


MKV

H.264

AAC

不支持

不支持

支持

不支持

不支持


MP4

H.264

AAC

支持

支持

支持

支持

不支持


3GP

H.263

AAC

不支持

不支持

支持

不支持

不支持


3GP

H.264

AAC

支持

不支持

支持

不支持

不支持


FLV

Sorenson Spark

MP3

支持

不支持

支持

不支持

不支持


FLV

On2 VP6

MP3

支持

不支持

支持

不支持

不支持


F4V

H.264

AAC

支持

不支持

支持

不支持

不支持


TS

H.264

AAC

不支持

支持

支持

不支持

支持



表2 不同封装格式的视频播放参照表

从上表的分析结果能够看到,大部分的播放器产品对于H.264+AAC的MP4编码格式支持最好,但是MP4也有很多的缺点,比如视频header很大,影响在线视频网站的初次加载时间,为了降低头部体积,需要进行视频本身的物理分段等等,所以很多在线视频网站在带宽耗费的压力下,主要选择的是adobe公司提供的FLV或F4V, FLV是流媒体封装格式,可将其数据看为二进制字节流,其字节编码格式为 BigEndianUnicode 。总体上看,FLV包括文件头(File Header)和文件体(File Body)两部分,其中文件体由一系列的Tag及Tag Size对组成。

所以,为了能够提供各类设备的在线视频播放需求,对于在线视频流媒体服务,提出了很多需求,对于早期建立的视频网站(土豆,优酷,ku6等)都只提供一种视频流媒体格式(FLV)的支持,我们称之为单一的流媒体服务架构,如图:



图1 :单一流媒体服务的架构图

但是,在实际业务运营中遇到了很多问题:

1) 视频存储的压力很大

同一种视频码流(h.264),因为针对不同平台应用设备(如表2)的播放需求,需要不同的封装格式,需要将产生大量重复视频流存储的压力,视频网站的视频量巨大,多支持一种格式将产生几百TB级的存储压力,从机房到机柜,视频流同步等环节负载和压力都是巨大的。

2) 封装后的视频格式是否真的被播放

视频流封装完成后,同步到各地的中心节点后,是否真的有视频流请求产生,还是仅仅处于视频准备状态,是否会影响中心节点的磁盘占用,缓存节点的命中率不高。

3) 封装格式的功能性升级,导致老视频再次封装

封装格式的不断发展,TS流,HTTP live Stream的不断优化,将导致现有的视频流不断需要翻新或重复封装。 为了解决上述各类问题,视频网站流媒体服务的研发工程师进行了多格式的流媒体服务架构探索,提供了各类视频封装格式的流媒体封装反向代理接口,该接口能够通过URL的请求,完成对特定视频编码格式(h.264)的封装。



图2:多格式的流媒体服务架构:

如图所示,“流媒体容器封装服务“成为多格式视频流服务的核心,对于这个流媒体的封装服务,通过对h.264的视频编码流进行不同格式的封装,提供了多种视频流的推送。对于这个服务,我们希望能够尽快为视频的cache服务推送视频流,所以,在硬盘方面,选择了每分钟15000转的SAS硬盘,降低同一视频流的不同封装请求的IO延迟等待。

分析与比较

作为最简单和原始的流媒体解决方案,单一流媒体服务架构唯一显著的优点在于它仅需要维护一个标准的视频流文件,而这样的服务器基础设施在互联网中已经普遍存在,其安装和维护的工作量和复杂性比起多格式流媒体服务架构来说要简单和容易的多。然而其缺点和不足却也很多,首先是维护的工作量较大,多份相同视频文件由于封装格式不相同,需要同时维护多个实体的码流文件,大量的占用磁盘的空间,再次,转码集群需要针对多种不同的封装格式,进行多次的视频转码,抢占很多资源,缺乏灵活的控制功能和扩展机制。

寄语

视频流媒体多封装格式服务目前还没有完全的开源代码,希望能够通过本篇文章引导更多流媒体服务研发人员加入到该项工作中。
分享到:
评论

相关推荐

    网易视频云:流媒体服务器原理和架构解析.docx编程资料

    ### 网易视频云:流媒体服务器原理与架构解析 #### 一、多媒体文件的构成与编码格式 多媒体文件通常包含音频和视频两部分,常见的视频编码格式有H.264、Xvid等,音频编码格式则包括MP3、AAC等。其中,H.264+AAC的...

    网易视频云:流媒体服务器原理和架构解析.docx

    流媒体服务器原理与架构解析 流媒体服务器是互联网视频服务的核心组成部分,负责处理音视频数据的传输、存储和分发,使得用户可以实时观看在线媒体或者下载后观看。本文将深入探讨流媒体服务器的工作原理、架构及其...

    藏经阁-视频直播架构解析.pdf

    视频直播架构解析 本文档对视频直播架构进行了深入的解析,涵盖了视频直播的技术范畴、协议、编解码技术、直播云平台、直播网络与调度、观众推流侧、播放侧、获取IP、DNS智能解析、HTTPDNS、BGP机房、移动节点、...

    从 SDK 到编解码:视频直播架构解析

    视频编码主要是将采集的原始视频信号转换为适合网络传输的压缩视频流,而视频解码则是将收到的压缩视频流还原为可播放的视频。在直播中常见的编解码格式有H.264、H.265等,它们都属于国际标准视频压缩格式。编解码...

    从 SDK 到编解码:视频直播架构解析 叶仲华.pdf

    视频直播架构解析是指视频直播从SDK到编解码的整个架构分析。这个架构包括视频后台、Web移动直播协议、播放端安装率高、RTMP直播协议、HLS直播协议、直播云平台、观众推流侧、播放侧、获取IP、DNS智能解析、BGP机房...

    海康视频流前端播放使用(vue版本ws通信)

    在开发过程中,集成海康视频流前端播放功能是一项常见的任务,尤其在监控系统或者安全相关的应用中。Vue.js 是一个非常流行的前端框架,而WebSocket协议则提供了双向通信的能力,使得实时性成为可能。本篇文章将深入...

    1078解析推流源代码(netty+javacv+spring+maven+rtp+rtmp)

    RTMP(Real-Time Messaging Protocol)是实时消息传输协议,主要用于向Flash Player推送音视频流,常用于直播服务。在这个项目中,处理后的1078部标终端推流数据可能会被转发到支持RTMP的流媒体服务器,供用户在线...

    信息流视频清晰度策略nodejs服务架构分享.pdf

    在详细解读这份文件之前,我们首先要了解文件的核心内容,即信息流视频清晰度策略的node.js服务架构分享。这份文档主要由腾讯高级工程师郑国辉分享,围绕着如何在信息流视频领域中优化视频清晰度和响应速度的主题...

    MFC读取RTSP视频流

    而RTSP(Real-Time Streaming Protocol)是一种协议,常用于控制音视频流的传输,尤其在远程监控和多媒体播放中应用广泛。 在“MFC读取RTSP视频流”的主题中,我们需要关注的核心知识点包括: 1. **MFC架构**:MFC...

    安卓直播视频播放流媒体IPCameraRTSPDLNA相关-Red5Android直播系统的架构服务端的直播流工程.zip

    服务端的架构设计通常包括接收、存储、转码、分发等模块,确保视频流的稳定传输。 压缩包中的"JavaApk源码说明.txt"可能包含了关于安卓应用的源代码说明,这对于理解客户端如何与服务器交互,如何解析和播放流媒体...

    全面解析 Netflix 的微服务架构设计.docx

    Netflix 是全球领先的在线订阅制视频流媒体服务,其技术架构因其高可用性和可扩展性而备受赞誉。在2008年的一次重大服务中断后,Netflix 决定进行一次重大的基础架构转型,从自有的数据中心迁移到公共云,选择了...

    h5实现播放RTSP视频流WebRTC.docx

    RTSP(Real-Time Streaming Protocol)是...综上所述,通过WebRTC在HTML5页面中播放RTSP视频流是一项技术挑战,但通过合理的架构设计、中间件转换以及选用合适的前端库,开发者可以实现高效、安全的实时视频播放功能。

    ffmpeg视频解析lib

    它解析文件头,找出封装在其中的音视频流。 - libavcodec:这是FFmpeg的核心部分,包含了大量的编解码器,用于解码视频流中的压缩数据。例如,H.264、VP9、MPEG-2等常见编码格式都可以在这里找到相应的解码器。 3....

    视频流检测与报警

    ### 视频流检测与报警系统 #### 一、引言 随着计算机视觉技术的发展,视频流检测在安全监控领域发挥着越来越重要的作用。本文将详细介绍一个基于MATLAB的视频流实时监控系统的设计与实现。该系统能够在检测到物体...

Global site tag (gtag.js) - Google Analytics