视频处理

1、流媒体

1.1、流媒体的概念

所谓流媒体是指采用流式传输的方式在Internet播放的媒体格式。 流媒体又叫流式媒体,它是指商家用一个视频传送服务器把节目当成数据包发出,传送到网络上。用户通过解压设备对这些数据进行解压后,节目就会像发送前那样显示出来。

流媒体(Streaming Media)的出现极大地方便了人们的工作和生活。在地球的另一端,某大学的课堂上,某个教授正在兴致盎然地传授一门你喜欢的课程,想听?太远!放弃?可惜!没关系,网络时代能满足你的愿望。在网络上找到该在线课程,课程很长,但没关系,只管点击播放,教授的身影很快出现在屏幕上,课程一边播放一边下载,虽然远在天涯,却如亲临现场!除了远程教育,流媒体在视频点播、网络电台、网络视频等方面也有着广泛的应用。

流媒体,又叫流式媒体,是边传边播的媒体,是多媒体的一种。边传边播是指媒体提供商在网络上传输媒体的"同时",用户一边不断地接收并观看或收听被传输的媒体。"流"媒体的"流"指的是这种媒体的传输方式(流的方式),而并不是指媒体本身。

小结:流媒体就是将视频文件分成许多小块,将这些小块作为数据包通过网络发送出去,实现一边传输视频数 包一边观看视频。

1.2、流式传输

在网络上传输音/视频等多媒体信息,目前主要有下载和流式传输两种方案。

  • 下载:就是把音、视频文件完全下载到本机后开始播放,它的特点是必须等到视频文件下载完成方可播放,播放等待时间较长,无法去播放还未下载的部分视频。
  • 流式传输:就是客户端通过链接视频服务器实时传输音、视频信息,实现“边下载边播放”。

流媒体实现的关键技术就是流式传输。流式传输定义很广泛,现在主要指通过网络传送媒体(如视频、音频)的技术总称。其特定含义为通过Internet 将影视节目传送到PC机。实现流式传输有两种方法:实时流式传输(Realtime streaming)和顺序流式传输(progressive streaming)。一般说来,如视频为实时广播,或使用流式传输媒体服务器,或应用如RTSP的实时协议,即为实时流式传输。如使用HTTP服务器,文件即通过顺序流发送。采用哪种传输方法依赖你的需求。当然,流式文件也支持在播放前完全下载到硬盘。

(1)顺序流式传输

顺序流式传输是顺序下载,在下载文件的同时用户可观看在线媒体,在给定时刻,用户只能观看已下载的那部分,而不能跳到还未下载的前头部分,顺序流式传输不象实时流式传输在传输期间根据用户连接的速度做调整。由于标准的HTTP服务器可发送这种形式的文件,也不需要其他特殊协议,它经常被称作HTTP流式传输。顺序流式传输比较适合高质量的短片段,如片头、片尾和广告,由于该文件在播放前观看的部分是无损下载的,这种方法保证电影播放的最终质量。这意味着用户在观看前,必须经历延迟,对较慢的连接尤其如此。对通过调制解调器发布短片段,顺序流式传输显得很实用,它允许用比调制解调器更高的数据速率创建视频片段。尽管有延迟,毕竟可让你发布较高质量的视频片段。顺序流式文件是放在标准HTTP或 FTP服务器上,易于管理,基本上与防火墙无关。顺序流式传输不适合长片段和有随机访问要求的视频,如:讲座、演说与演示。它也不支持现场广播,严格说来,它是一种点播技术。

小结:顺序下载音、视频文件,可以实现边下载边播放,不过,用户只能观看已下载的视频内容,无法快进到未下载的视频部分,顺序流式传输可以使用Http服务器来实现,比如Nginx、Apache等。

(2)实时流式传输

实时流式传输指保证媒体信号带宽与网络连接匹配,使媒体可被实时观看到。实时流与HTTP流式传输不同,他需要专用的流媒体服务器与传输协议。实时流式传输总是实时传送,特别适合现场事件,也支持随机访问,用户可快进或后退以观看前面或后面的内容。理论上,实时流一经播放就可不停止,但实际上,可能发生周期暂停。实时流式传输必须匹配连接带宽,这意味着在以调制解调器速度连接时图象质量较差。而且,由于出错丢失的信息被忽略掉,网络拥挤或出现问题时,视频质量很差。如欲保证视频质量,顺序流式传输也许更好。实时流式传输需要特定服务器,如:QuickTime Streaming Server、RealServer与Windows Media Server。这些服务器允许你对媒体发送进行更多级别的控制,因而系统设置、管理比标准HTTP服务器更复杂。实时流式传输还需要特殊网络协议,如:RTSP (Realtime Streaming Protocol)或MMS (Microsoft Media Server)。这些协议在有防火墙时有时会出现问题,导致用户不能看到一些地点的实时内容。

小结:实时流式传输可以解决顺序流式传输无法快进的问题,它与Http流式传输不同,它必须使用流媒体服务器并且使用流媒体协议来传输视频,它比Http流式传输复杂。常见的实时流式传输协议有RTSP、RTMP、RSVP等。

1.3、流媒体系统的概要结构

流媒体系统的基本业务流程如下:
在这里插入图片描述
说明:

  • 将原始的视频文件通过编码器转换为适合网络传输的流格式,编码后的视频直接输送给媒体服务器。原始的视频文件通常是事先录制好的视频,比如通过摄像机、摄像头等录像、录音设备采集到的音视频文件,体积较大,要想在网络上传输需要经过压缩处理,即通过编码器进行编码 。
  • 媒体服务获取到编码好的视频文件,对外提供流媒体数据传输接口,接口协议包括 :HTTP、RTSP、RTMP等 。
  • 播放器通过流媒体协议与媒体服务器通信,获取视频数据,播放视频。

2、在线视频点播

在线视频点播有几种方式:

(1)基于Http协议

播放器通过http协议从http服务器上下载视频文件进行播放。问题是必须等到视频下载完才可以播放,不支持快进到某个时间点进行播放。也就是无法快进、后退。

(2)基于rmtp协议

播放器通过rtmp协议连接媒体服务器以实时流方式播放视频。使用rtmp协议需要架设媒体服务器,造价高,对于直播多采用此种方式。

(3)基于HLS协议

播放器使用HLS协议连接http服务器(Nginx、Apache等)实现近实时流方式播放视频。
HLS协议规定:基于Http协议,视频封装格式为ts,视频的编码格式为H264,音频编码格式为MP3、AAC或者AC-3。

3、HLS

HLS (HTTP Live Streaming)是Apple的动态码率自适应技术。主要用于PC和Apple终端的音视频服务。包括一个m3u(8)的索引文件,TS媒体分片文件和key加密串文件。

HLS把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些。HLS 协议由三部分组成:HTTP、M3U8、TS。这三部分中,HTTP 是传输协议,M3U8 是索引文件,TS 是音视频的媒体信息。

HLS原理:

将视频拆分成若干ts格式的小文件,通过m3u8格式的索引文件对这些ts小文件建立索引。一般10秒一个ts文件,播放器连接m3u8文件播放,当快进时通过m3u8即可找到对应的索引文件,并去下载对应的ts文件,从而实现快进、快退以近实时的方式播放视频。IOS、Android设备、及各大浏览器都支持HLS协议。
在这里插入图片描述

  • 客户端首先下载m3u8文件。m3u8文件里面记录了一个个的ts片。
  • 客户端根据m3u8文件的列表来下载ts文件。ts文件是一个个的视频片段。
  • 在客户端播放ts片段。

采用HLS方式即可实现边下载边播放,并且不用使用rtmp等流媒体协议,不用构建专用的媒体服务器,节省成本。

4、视频编码

所谓视频编码方式就是指通过特定的压缩技术,将某个视频格式的文件转换成另一种视频格式文件的方式。视频流传输中最为重要的编解码标准有国际电联的H.261、H.263、H.264,运动静止图像专家组的M-JPEG和国际标准化组织运动图像专家组的MPEG系列标准,此外在互联网上被广泛应用的还有Real-Networks的RealVideo、微软公司的WMV以及Apple公司的QuickTime等。

视频编码格式需要与视频文件格式进行区分。

视频文件格式:是指.mp4、.avi、.rmvb等,这些不同扩展名的视频文件的文件格式 ,视频文件的内容主要包括视频和音频,其文件格式是按照一 定的编码格式去编码,并且按照该文件所规定的封装格式将视频、音频、字幕等信息封装在一起,播放器会根据它们的封装格式去提取出编码,然后由播放器解码,最终播放音视频。

视频编码格式:通过音视频的压缩技术,将视频格式转换成另一种视频格式,通过视频编码实现流媒体的传输。比如:一个.avi的视频文件原来的编码是a,通过编码后编码格式变为b,音频原来为c,通过编码后变为d。

4.1、音视频编码格式介绍

音频视频编码方案有很多,用百家争鸣形容不算过分,常见的音频视频编码有以下几类:

(1)MPEG系列

(由ISO[国际标准组织机构]下属的MPEG[运动图象专家组]开发 )视频编码方面主要是Mpeg1(vcd用的就是它)、Mpeg2(DVD使用)、Mpeg4(的DVDRIP使用的都是它的变种,如:divx,xvid等)、Mpeg4 AVC(正热门);音频编码方面主要是MPEG Audio Layer 1/2、MPEG Audio Layer 3(大名鼎鼎的mp3)、MPEG-2 AAC 、MPEG-4 AAC等等。注意:DVD音频没有采用MPEG的。

(2)H.26X系列

(由ITU[国际电传视讯联盟]主导,侧重网络传输,注意:只是视频编码)包括H.261、H.262、H.263、H.263+、H.263++、H.264(就是MPEG4 AVC-合作的结晶)。

目前最常用的编码标准是视频H.264,音频AAC。

4.2、视频格式介绍

(1)AVI格式

它的英文全称为Audio Video Interleaved,即音频视频交错格式。它于1992年被Microsoft公司推出,随Windows3.1一起被人们所认识和熟知。所谓“音频视频交错”,就是可以将视频和音频交织在一起进行同步播放。这种视频格式的优点是图像质量好,可以跨多个平台使用,但是其缺点是体积过于庞大,而且更加糟糕的是压缩标准不统一,因此经常会遇到高版本Windows媒体播放器播放不了采用早期编码编辑的AVI格式视频,而低版本Windows媒体播放器又播放不了采用最新编码编辑的AVI格式视频。

(2)DV-AVI格式

DV的英文全称是Digital Video Format,是由索尼、松下、JVC等多家厂商联合提出的一种家用数字视频格式。非常流行的数码摄像机就是使用这种格式记录视频数据的。它可以通过电脑的IEEE 1394端口传输视频数据到电脑,也可以将电脑中编辑好的的视频数据回录到数码摄像机中。这种视频格式的文件扩展名一般也是.avi,所以我们习惯地叫它为DV-AVI格式。

(3)MPEG格式

它的英文全称为Moving Picture Expert Group,即运动图像专家组格式,家里常看的VCD、SVCD、DVD就是这种格式。MPEG文件格式是运动图像压缩算法的国际标准,它采用了有损压缩方法从而减少运动图像中的冗余信息。MPEG的压缩方法说的更加深入一点就是保留相邻两幅画面绝大多数相同的部分,而把后续图像中和前面图像有冗余的部分去除,从而达到压缩的目的。MPEG格式有三个压缩标准,分别是MPEG-1、MPEG-2、和MPEG-4,另外,MPEG-7与MPEG-21仍处在研发阶段。

MPEG-1:制定于1992年,它是针对1.5Mbps以下数据传输率的数字存储媒体运动图像及其伴音编码而设计的国际标准。也就是我们通常所见到的VCD制作格式。这种视频格式的文件扩展名包括.mpg、.mlv、.mpe、.mpeg及VCD光盘中的.dat文件等。

MPEG-2:制定于1994年,设计目标为高级工业标准的图像质量以及更高的传输率。这种格式主要应用在DVD/SVCD的制作(压缩)方面,同时在一些HDTV(高清晰电视广播)和一些高要求视频编辑、处理上面也有相当的应用。这种视频格式的文件扩展名包括.mpg、.mpe、.mpeg、.m2v及DVD光盘上的.vob文件等。

MPEG-4:制定于1998年,MPEG-4是为了播放流式媒体的高质量视频而专门设计的,它可利用很窄的带度,通过帧重建技术,压缩和传输数据,以求使用最少的数据获得最佳的图像质量。MPEG-4最有吸引力的地方在于它能够保存接近于DVD画质的小体积视频文件。这种视频格式的文件扩展名包括.asf、.mov和DivX 、AVI等。

(4)DivX格式

这是由MPEG-4衍生出的另一种视频编码(压缩)标准,也即我们通常所说的DVDrip格式,它采用了MPEG4的压缩算法同时又综合了MPEG-4与MP3各方面的技术,说白了就是使用DivX压缩技术对DVD盘片的视频图像进行高质量压缩,同时用MP3或AC3对音频进行压缩,然后再将视频与音频合成并加上相应的外挂字幕文件而形成的视频格式。其画质直逼DVD并且体积只有DVD的数分之一。

(5)MOV格式

美国Apple公司开发的一种视频格式,默认的播放器是苹果的QuickTimePlayer。具有较高的压缩比率和较完美的视频清晰度等特点,但是其最大的特点还是跨平台性,即不仅能支持MacOS,同样也能支持Windows系列。

(6)ASF格式

它的英文全称为Advanced Streaming format,它是微软为了Real Player竞争而推出的一种视频格式,用户可以直接使用Windows自带的Windows Media Player对其进行播放。由于它使用了MPEG-4的压缩算法,所以压缩率和图像的质量都很不错。

(7)WMV格式

它的英文全称为Windows Media Video,也是微软推出的一种采用独立编码方式并且可以直接在网上实时观看视频节目的文件压缩格式。WMV格式的主要优点包括:本地或网络回放、可扩充的媒体类型、可伸缩的媒体类型、多语言支持、环境独立性、丰富的流间关系以及扩展性等。

(8)RM格式

Networks公司所制定的音频视频压缩规范称之为Real Media,用户可以使用RealPlayer或RealOne Player对符合RealMedia技术规范的网络音频/视频资源进行实况转播,并且RealMedia还可以根据不同的网络传输速率制定出不同的压缩比率,从而实现在低速率的网络上进行影像数据实时传送和播放。这种格式的另一个特点是用户使用RealPlayer或RealOne Player播放器可以在不下载音频/视频内容的条件下实现在线播放。

(9)RMVB格式

这是一种由RM视频格式升级延伸出的新视频格式,它的先进之处在于RMVB视频格式打破了原先RM格式那种平均压缩采样的方式,在保证平均压缩比的基础上合理利用比特率资源,就是说静止和动作场面少的画面场景采用较低的编码速率,这样可以留出更多的带宽空间,而这些带宽会在出现快速运动的画面场景时被利用。这样在保证了静止画面质量的前提下,大幅地提高了运动图像的画面质量,从而图像质量和文件大小之间就达到了微妙的平衡。

5、ffmpeg

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。

FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。这个项目最早由Fabrice Bellard发起,2004年至2015年间由Michael Niedermayer主要负责维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"。 FFmpeg编码库可以使用GPU加速。

FFmpeg被许多开源项目采用,如QQ影音、暴风影音、VLC等。

(1)下载及安装

直接去ffmpeg官网下载对应版本的,下载完解压,解压后的内容如下:
在这里插入图片描述
主要是bin目录:
在这里插入图片描述
需要配置环境变量:
在这里插入图片描述
加到Path中去:
在这里插入图片描述
配置完成后,检查是否成功:
在这里插入图片描述
安装配置成功。

(2)视频文件格式转换

测试将一个.avi文件转成mp4、mp3、gif等。
在这里插入图片描述
现在想将这个1.avi文件转换mp4格式,打开commond命令:

ffmpeg -i e:/ffmpeg/1.avi e:/ffmpeg/1.mp4

注意,avi文件的路径要写正确。
在这里插入图片描述
转换完成,查看:
在这里插入图片描述
转换完成了,并且也输出到了指定路径。

(3)生成m3u8文件

现在想将一个avi格式的视频文件转换成m3u8格式的。还是以1.avi这个文件为例。

a、先将avi转码成mp4格式

将上面的1.mp4文件删除掉,重新转换。如下:

ffmpeg -i e:/ffmpeg/1.avi -c:v libx264 -s 1280x720 -pix_fmt yuv420p -b:a 63k -b:v 753k -r 18 e:/ffmpeg/1.mp4

参数说明:

  • -c:v 视频编码为x264 ,x264编码是H264的一种开源编码格式。
  • -s 设置分辨率。
  • -pix_fmt yuv420p:设置像素采样方式,主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0,它的作用是根据采样方式来从码流中还原每个像素点的YUV(亮度信息与色彩信息)值。
  • -b 设置码率,-b:a和-b:v分别表示音频的码率和视频的码率,-b表示音频加视频的总码率。码率对一个视频质量有很大的作用。
  • -r:帧率,表示每秒更新图像画面的次数,通常大于24肉眼就没有连贯与停顿的感觉了。
    在这里插入图片描述
    在这里插入图片描述
    转换完成,查看:
    在这里插入图片描述
    可以看到转换完成后的视频文件大小超过了原格式文件,因为设置了一些参数,第一次转换的时候没设置参数直接转换,明显文件比原文件小,这里因为设置了参数导致比原文件大。

b、将mp4格式转成m3u8格式

在这里插入图片描述
这里我建个hls目录,用来存放m3u8文件及一些ts文件。
命令如下:

ffmpeg -i e:/ffmpeg/1.mp4 -hls_time 10 -hls_list_size 0 -hls_segment_filename e:/ffmpeg/hls/1_%05d.ts e:/ffmpeg/hls/1.m3u8

参数说明:

  • -hls_time 设置每片的长度,单位为秒。
  • -hls_list_size n: 保存的分片的数量,设置为0表示保存所有分片。
  • -hls_segment_filename :段文件的名称,%05d表示5位数字。
    在这里插入图片描述
    在这里插入图片描述
    转换成功了,查看:
    在这里插入图片描述
    最后的效果就是将1.mp4视频文件每10秒生成一个ts文件,最后生成一个m3u8文件,m3u8文件是ts的索引文件。m3u8内容如下:
    在这里插入图片描述

6、码率

码率又叫比特率,即每秒传输的bit数,单位为bps(Bit Per Second),码率越大传送数据的速度越快。
码率的计算公式是:

文件大小(转成bit)/ 时长(秒)/1024 = kbps 即每秒传输千位数

例如一个1M的视频,它的时长是10s,它的码率等于:

1*1024*1024*8/10/1024 = 819Kbps

如果是大小是以M为单位的话,可以简化一下,比如文件大小文nM,时长为a秒钟,那么码率为:

n * 1024 * 8 /a = xKbps

例如这个文件:
在这里插入图片描述
在这里插入图片描述

大小为37.2M,时长为8分51秒,那么该mp4视频的码率为:

37.2 * 1024 * 8 /(8 * 60 + 51) = 574Kbps

在这里插入图片描述
实际码率为580,差不多。

码率设置到多少才能达到最好,可以根据一些视频网台给出的参考,下图是优酷对码率的要求:
在这里插入图片描述
视频的码率设置不是越大越好的,只要能够达到业务的播放要求即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值