流媒体服务

流媒体服务

一、音视频的组成

一个完整的视频文件,包括音频、视频和基础元信息,我们常见的视频文件如mp4、mov、flv、avi、rmvb等视频文件,就是一个容器的封装,里面包含了音频和视频两部分,并且都是通过一些特定的编码算法,进行编码压缩过后的。

因此,视频转换需要设置的本质就是

  • 设置需要的视频编码
  • 设置需要的音频编码
  • 选择需要的容器封装

一个完整的视频转换设置都至少包括了上面3个步骤。

1、视频编码格式

视频编码标准有两大系统: MPEG 和ITU-T,国际上制定视频编解码技术的组织有两个,一个是“国际电联(ITU-T)”,它制定的标准有H.261、H.263、H.263+、H.264等,另一个是“国际标准化组织(ISO)”它制定的标准有MPEG-1、MPEG-2、MPEG-4等。

常见编码格式有:

  • Xvid(MPEG4)
  • H264 (目前最常用编码格式)
  • H263
  • MPEG1,MPEG2
  • AC-1
  • RM,RMVB
  • H.265(目前用的不够多)
2、音频编码格式

音频编码格式有如下

  • AAC
  • AMR
  • PCM
  • ogg(ogg vorbis音频)
  • AC3(DVD 专用音频编码)
  • DTS(DVD 专用音频编码)
  • APE(monkey’s 音频)
  • AU(sun 格式)
  • WMA

音频编码方案之间音质比较(AAC,MP3,WMA等)结果: AAC+ > MP3PRO > AAC> RealAudio > WMA > MP3。

目前最常见的音频格式有 Mp3、AC-3、ACC,MP3最广泛的支持最多,AC-3是杜比公司的技术,ACC是MPEG-4中的音频标准,ACC是目前比较先进和具有优势的技术。

3、存储封装格式

目前市面常见的存储封装格式有如下:

  • AVI (.avi)
  • ASF(.asf)
  • WMV (.wmv)
  • QuickTime ( .mov)
  • MPEG (.mpg / .mpeg)
  • MP4 (.mp4)
  • m2ts (.m2ts / .mts )
  • Matroska (.mkv / .mks / .mka )
  • RM ( .rm / .rmvb)
  • TS/PS

AVI : 可用MPEG-2, DIVX, XVID, WMV3, WMV4, AC-1, H.264

WMV : 可用WMV3, WMV4, AC-1

RM/RMVB : 可用RV40, RV50, RV60, RM8, RM9, RM10

MOV : 可用MPEG-2, MPEG4-ASP(XVID), H.264

MKV : 所有

视频的基本播放流程如下:
在这里插入图片描述

二、视频流

​ 经过压缩算法压缩的流数据,称为『编码流』,又因为目前压缩/编码算法以H264为主,因此也常常称为『H264码流

​ 未经压缩的流数据,是解码后的流数据,称为『原始流』,可以想象视频是由一幅一幅在时间上连续的“图像”组成的,而因为视频内部的“图像”是『YUV』(后文将介绍),因此也常常称为『YUV流』。

​ 编码/压缩在流媒体领域是一项非常重要的技术:从『H264码流』到『YUV流』的过程称为解码,反之称为编码

​ 『』的基本元素是『』,对于视频编码/压缩而言,它的核心是采用尽量小的空间存储一组时间上连续的帧数据;而对于视频解码而言,就是把被编码/压缩后的一组帧数据尽量恢复成原来的样子。能够被100%恢复的编码/压缩算法称为无损压缩,反之称为有损压缩(虽然无损压缩是最理想的,但是在很多实际场景中为了追求高压缩率,比如为了减小网络带宽压力,常常不得不选择有损压缩)

​ 『帧』,可以联想成我们平时看到的一幅幅“图像”,只不过我们平时接触的图片是『RGB』格式的,而视频帧通常是『YUV』格式的。

​ 完整的视频流媒体流程如下:

在这里插入图片描述

  • Avc/Hevc帧:H.264(也称为 AVC 或高级视频编码)是视频压缩的行业标准,允许录制、压缩和分发数字视频内容。H.265(也称为 HEVC 或高效视频编码)允许进一步减小文件大小,从而减少实时视频流所需的带宽,是高效率视频编码。Avc/Hevc是组成Nalu的基本组织格式。
  • RTSP(Real Time Streaming Protocol):实时流传输协议,是TCP/IP协议体系中的一个应用层协议,该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或UDP完成数据传输。
  • RTP(Real-time Transport Protocol):RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。它是创建在UDP协议上的。

拉流->解码->模型检测->渲染->编码->推流

三、拉流RTSP协议

从零开始写一个RTSP服务器(一)RTSP协议讲解-CSDN博客

rtp数据包中包含的是h264或者h265编码后的数据,而编码数据的呈现为nalu

rtp头部+nalu头部+payload

四、编解码

1、软解码

使用ffmepg工具的解码流程如下:

在这里插入图片描述

**注意:**解码队列缓存导致不同步问题,使用avcodec_flush_buffers()清空缓存

nalu->yuv

2、硬解码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值