文章目录
- 1 流媒体基础
-
- 1.1 流媒体
- 1.2 流式传输方式
-
- 1.2.1 顺序流式传输
- 1.2.2 实时流式传输
- 1.3 流媒体传输协议
-
- 1.3.1 rtmp协议
- 1.3.2 HLS协议
- 1.3.3 RTSP协议
- 1.3.4 视频流的对比
- 1.4 视频编码(codec)
- 1.5 分辨率的规范
-
- 分辨率簡介:
- 1.5.2 分辨率單位
- 1.6 码率
- 1.7 针速率 FPS
-
- 1.7.1 常见媒体的FPS帧率
- 1.7 屏幕类型
- 2 视频点播解决方案
- 3 视频直播解决方案
-
- 3.1 视频直播流程
-
- 3.1.1 视频采集:
- 3.1.2 处理
- 3.2 推流拉流环境搭建
- 3.3 DVR录制
- 3.4 鉴权(HTTP回调和服务器定制)
- 3.5 http接口
- 4 ffmpeg集成
-
- 4.1 ffmpeg简介
- 4.2 ffmpeg 环境搭建
- 4.3 ffmpeg命令使用
-
- 通用选项
- 视频选项
- 高级选项
- 音频选项
- 音视频捕获选项
- 高级选项
- 实例:
- 未测试demo
- 5 srs 集群与转码
-
- 5.1 Forward小型集群
-
- 5.1.1 簡介
- 5.1.2 原理
- 5.1.3 配置
- 5.2 Edge边缘服务器集群
-
- 5.2.1 edge简介
- 5.2.2 Edge的主要应用场景:
- 5.2.3 配置
- 5.3 ffmpeg转码
-
- 5.3.1 应用场景
- 5.3.2 SRS转码的主要流程包括
- 5.3.3 ffmpeg配置:
- Other Transcode Config
- 6 终端设备播放
- 7 调试相关工具
-
- 5.1 推流测试工具:OBS
- 5.2 拉流测试工具
- 5.3 h5开源:B站开源的flv.js ,vidio.js
- 5.4 音视频查看工具,MediaInfo_GUI_20
- 8 参考:官方
- 9 直播会议解决方案(未完待续)
1 流媒体基础
1.1 流媒体
流媒体(Streaming Media)技术是指将一连串的媒体数据压缩后,以流的方式在网络中分段传送,实现在网络上实时传输影音以供观赏的一种技术。 [2] 流媒体实际指的是一种新的媒体传送方式,有声音流、视频流、文本流、图像流、动画流等,而非一种新的媒体。 [2] 流媒体文件格式是支持采用流式传输及播放的媒体格式。常用格式有:RA:实时声音;RM:实时视频或音频的实时媒体;RT:实时文本;RP:实时图像;SMII.:同步的多重数据类型综合设计文件;SWF:real flash和shockwavc flash动面文件;RPM: HTMI。文件的插件;[RAM](https://baike.baidu.com/item/RAM/144481):流媒体的源文件,是包含RA、RM、SMIIJ文件地址(URL地址)的文本文件;CSF:一种类似媒体容器的文件格式,可以将非常多的媒体格式包含在其中,而不仅仅限于音、视频。quicktime,mov,asf,[wmv](https://baike.baidu.com/item/wmv/1195900),wma,avi,mpeg,mpg,dat,mts; aam多媒体教学课件格式,可将authorware生成的文件压缩为aam和aas流式文件播放
1.2 流式传输方式
在网络上传输音、视频信息有两个方式:下载和流式传输。
下载:就是把音、视频文件完全下载到本机后开始播放,它的特点是必须等到视频文件下载完成方可播放,播放等待时间较长,无法去播放还未下载的部分视频 流式传输:就是客户端通过链接视频服务器实时传输音、视频信息,实现“边下载边播放”。
流式传输是指通过网络传送媒体(音频、视频等)技术的总称。
实现流式传输主要有两种方式:顺序流式传输( progressive streaming)和实时流式传输( real time streaming)
1.2.1 顺序流式传输
顺序流式传输是顺序下载,用户在观看在线媒体的同时下载文件,在这一过程中,用户只能观看下载完的部分,而不能直接观看未下载部分。也就是说,用户总是在一段延时后才能看到服务器传送过来的信息。由于标准的HTTP服务器就可以发送这种形式的文件,它经常被称为HTTP流式传输。
由于顺序流式传输能够较好地保证节目播放的质量,因此比较适合在网站上发布的、可供用户点播的、高质量的视频。
顺序流式文件是放在标准HTTP或FTP服务器上,易于管理,基本上与防火墙无关。顺序流式传输不适合长片段和有随机访问要求的视频,如:讲座、演说与演示。它也不支持现场广播
1.2.2 实时流式传输
实时流式传输必须保证匹配连接带宽,使媒体可以被实时观看到。在观看过程中用户可以任意观看媒体前面或后面的内容,但在这种传输方式中,如果网络传输状况不理想,则收到的图像质量就会比较差实时流式传输需要特定服务器,如 Quick Time Streaming Server、 Realserver或 Windows Media server。这些服务器允许对媒体发送进行更多级别的控制,因而系统设置、管理比标准HTTP服务器更复杂。
实时流式传输还需要特殊网络协议,如:RTSP( realtime streaming protocol)或MMS(microsoft media server)。在有防火墙时,有时会对这些协议进行屏闭,导致用户不能看到一些地点的实时内容,实时流式传输总是实时传送,因此特别适合现场事件
#常见的实时流式传输协议有RTSP、RTMP、RSVP 等
1.3 流媒体传输协议
(rtp/rtcp/rtsp/rtmp/mms/hls)
常用的 rtmp 与hls http-flv
1.3.1 rtmp协议
RTMP(Real Time Messaging Protocol)是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议。它有三种变种:
(1)工作在TCP之上的明文协议,使用端口1935;
(2)RTMPT封装在HTTP请求之中,可穿越防火墙;
(3)RTMPS类似RTMPT,但使用的是HTTPS连接。
RTMP视频播放的特点:
(1)RTMP协议是采用实时的流式传输,所以不会缓存文件到客户端,这种特性说明用户想下载RTMP协议下的视频是比较难的;
(2)视频流可以随便拖动,既可以从任意时间点向服务器发送请求进行播放,并不需要视频有关键帧。相比而言,HTTP协议下视频需要有关键帧才可以随意拖动。
(3)RTMP协议支持点播/回放(通俗点将就是支持把flv,f4v,mp4文件放在RTMP服务器,客户端可以直接播放),直播(边录制视频边播放)。
RTMP环境的架设:
因为该协议是adobe公司开发的,所以最初服务器端架设的环境是FMS(Flash Media Server),该软件为收费软件,价格昂贵。后来,开源软件red5的推出,使rtmp协议的架设成本大大缩小,但是在性能方面不如fms的稳定。此外,wowza虽然是收费的,但价格比较适中。
1.3.2 HLS协议
HTTP Live Streaming(HLS)是苹果公司实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,主要应用于iOS系统。`HLS点播是分段HTTP点播,不同在于它的分段非常小。要实现HLS点播,重点在于对媒体文件分段,目前有不少开源工具可以使用。
相对于常见的流媒体直播协议,HLS直播最大的不同在于,直播客户端获取到的并不是一个完整的数据流,HLS协议在服务器端将直播数据流存储为连续的、很短时长的媒体文件(MPEG-TS格式),而客户端则不断的下载并播放这些小文件,因为服务器总是会将最新的直播数据生成新的小文件,这样客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播。由此可见,基本上可以认为,HLS是以点播的技术方式实现直播。由于数据通过HTTP协议传输,所以完全不用考虑防火墙或者代理的问题,而且分段文件的时长很短,客户端可以很快的选择和切换码率,以适应不同带宽条件下的播放。不过HLS的这种技术特点,决定了它的延迟一般总是会高于普通的流媒体直播协议。
`原理就是把整个流分成一个个小小的基于Http的文件来下载,这样可以以不同的速率来下载同样的源(码流自适应),最开始会先去下载一个m3u8,这是一个playList,找到可以用的流,
'HLS协议规定:
1)封装格式是TS
2)视频编码格式是H264,音频是MP3/AAC/AC3
HLS的工作方式是:将视频拆分成若干ts格式的小文件,通过m3u8格式的索引文件对这些ts小文件建立索引。一般
10秒一个ts文件,播放器连接m3u8文件播放,当快进时通过m3u8即可找到对应的索引文件,并去下载对应的ts文
件,从而实现快进、快退以近实时 的方式播放视频。
IOS、Android设备、及各大浏览器都支持HLS协议。
1.3.3 RTSP协议
RTSP(Real Time Streaming Protocol):实时流传送协议,是用来控制声音或影像的多媒体串流协议, 由RealNetworks和Netscape共同提出的;
1.3.4 视频流的对比
协议 | httpflv | rtmp | hls | dash |
---|---|---|---|---|
传输方式 | http流 | tcp流 | http | http |
视频封装格式 | flv | flv tag | Ts文件 | Mp4 3gp webm |
延时 | 低 | 低 | 高 | 高 |
数据分段 | 连续流 | 连续流 | 切片文件 | 切片文件 |
Html5播放 | 可通过html5解封包播放(flv.js) | 不支持 | 可通过html5解封包播放(hls.js) | 如果dash文件列表是mp4webm文件,可直接播放 |
1.4 视频编码(codec)
所谓视频编码方式就是指通过压缩技术,将原始视频格式的文件转换成另一种视频格式文件的方式。视频流传输中最为重要的编解码标准有国际电联的H.261、H.263、H.264,运动静止图像专家组的M-JPEG和国际标准化组织运动图像专家组的MPEG系列标准,此外在互联网上被广泛应用的还有Real-Networks的RealVideo、微软公司的WMV以及Apple公司的QuickTime
视频编码的意义:
原始视频数据存储空间大,一个 1080P 的 7s 视频需要 817 MB
原始视频数据传输占用带宽大,10 Mbps 的带宽传输上述 7 s 视频需要 11 分钟。而经过 H.264 编码压缩之后,视频大小只有 708 k ,10 Mbps 的带宽仅仅需要 500 ms ,可以满足实时传输的需求,所以从视频采集传感器采集来的原始视频势必要经过视频编码。
基本原理:
为什么巨大的原始视频可以编码成很小的视频呢?这其中的技术是什么呢?核心思想就是去除冗余信息:
1)空间冗余:图像相邻像素之间有较强的相关性
2)时间冗余:视频序列的相邻图像之间内容相似
3)编码冗余:不同像素值出现的概率不同
4)视觉冗余:人的视觉系统对某些细节不敏感
5)知识冗余:规律性的结构可由先验知识和背景知识得到
编码器的选择:
视频编码器经历了数十年的发展,已经从开始的只支持帧内编码演进到现如今的 H.265 和 VP9 为代表的新一代编码器,下面是一些常见的视频编码器:
1)H.264/AVC
2)HEVC/H.265
3)VP8
4)VP9
5)FFmpeg
注:音频编码器有Mp3, AAC等。
视频和音频都需要经过编码,才能保存成文件。不同的编码格式(CODEC),有不同的压缩率,会导致文件大小和清晰度的差异。
常用的视频编码格式如下。
H.262
H.264
H.265
#以上编码格式都是有版权的,但是可以免费使用
#还有几种无版权的视频编码格式。
VP8
VP9
AV1
音频编码
常用的音频编码格式
MP3
AAC
1.5 分辨率的规范
标清: 480x320, 640x480
高清: 1024x720p 或 1920x1080i (隔行扫描)
全高清: 1920x1080p
超(高)清: 3840x2160,7680x4320
4K: 4K分辨率是1080p的4倍 3840×2160 = 1920×2×1080×2
8K: 8K分辨率是4K的4倍 7680×4320 = 3840×2×2160×2
ps:
P:progressive,意思是逐行扫描,帧编码
I:interlace,意思是隔行扫描,场编码
#两者是视频编码里的编码方式,分辨率一样
美国消费电子协会(CEA)将4K的分辨率正式命名为Ultra HD(Ultra High-Definition)
https://www.cnblogs.com/chengfangming/p/4804958.html
http://service.ivideostar.com/bbs/thread-540-1-7.html
分辨率簡介:
分辨率,又称解析度、解像度,可以细分为显示分辨率、图像分辨率、打印分辨率和扫描分辨率等。
显示分辨率(屏幕分辨率)是屏幕图像的精密度,是指显示器所能显示的像素有多少。由于屏幕上的点、线和面都是由像素组成的,显示器可显示的像素越多,画面就越精细,同样的屏幕区域内能显示的信息也越多,所以分辨率是个非常重要的性能指标。可以把整个图像想象成是一个大型的棋盘,而分辨率的表示方式就是所有经线和纬线交叉点的数目。显示分辨率一定的情况下,显示屏越小图像越清晰,反之,显示屏大小固定时,显示分辨率越高图像越清晰。
通常情况下,图像的分辨率越高,所包含的像素就越多,图像就越清晰,印刷的质量也就越好。同时,它也会增加文件占用的存储空间
1.5.2 分辨率單位
描述分辨率的单位有:dpi([点每英寸])、lpi(线每英寸)、ppi([像素每英寸])和[PPD](PPPixels Per Degree 角分辨率,像素每度)。但只有lpi是描述光学分辨率的尺度的。虽然dpi和ppi也属于分辨率范畴内的单位,但是他们的含义与lpi不同。而且lpi与dpi无法换算,只能凭经验估算。 [2]
另外,ppi和dpi经常都会出现混用现象。但是他们所用的领域也存在区别。从技术角度说,“像素”只存在于电脑显示领域,而“点”只出现于打印或印刷领域
像素
像素即px,是画面中最小的点(单位色块)。分辨率=画面水平方向的像素值 * 画面垂直方向的像素值。
分辨率可以分为两方面:屏幕分辨率和图像分辨率。
1. 屏幕分辨率:
例如,屏幕分辨率是1024×768,也就是说设备屏幕的水平方向上有1024个像素点,垂直方向上有768个像素点。像素的大小是没有固定长度的,不同设备上一个单位像素色块的大小是不一样的。 例如,尺寸面积大小相同的两块屏幕,分辨率大小可以是不一样的,分辨率高的屏幕上面像素点(色块)就多,所以屏幕内可以展示的画面就更细致,单个色块面积更小。而分辨率低的屏幕上像素点(色块)更少,单个像素面积更大,可以显示的画面就没那么细致。
2. 图像分辨率:
例如,一张图片分辨率是500x200,也就是说这张图片在屏幕上按1:1放大时,水平方向有500个像素点(色块),垂直方向有200个像素点(色块)。 在同一台设备上,图片分辨率越高,这张图片1:1放大时,图片面积越大;图片分辨率越低,这张图片1:1缩放时,图片面积越小。(可以理解为图片的像素点和屏幕的像素点是一个一个对应的)。 但是,在屏幕上把图片超过100%放大时,为什么图片上像素色块也变的越大,其实是设备通过算法对图像进行了像素补足,我们把图片放的很大后看到的一块一块的方格子,虽然理解为一个图像像素,但是其实是已经补充了很多个屏幕像素;同理,把图片小于100%缩小时,也是通过算法将图片像素进行减少。 最后,虽然不同设备上像素块大小会不一样,但是同一台硬件设备上的屏幕分辨率、像素块大小是不会变的。PC电脑上之所以可以调整屏幕分辨率,其实也是通过算法转换了
1.6 码率
码率又叫比特率即每秒传输的bit数,单位为bps(Bit Per Second),码率越大传送数据的速度越快。
码率的计算公式是:文件大小(转成bit)/ 时长(秒)/1024 = kbps 即每秒传输千位数
例如一个1M的视频,它的时长是10s,它的码率等于
1*1024*1024*8/10/1024 = 819Kbps
1.7 针速率 FPS
每秒传输帧数(Frames Per Second)
FPS是图像领域中的定义,是指画面每秒传输帧数,通俗来讲就是指动画或视频的画面数。FPS是测量用于保存、显示动态视频的信息数量。每秒钟帧数越多,所显示的动作就会越流畅。通常,要避免动作不流畅的'最低是30'。某些计算机视频格式,每秒只能提供15帧。
FPS”也可以理解为我们常说的“刷新率(单位为Hz)”,例如我们常在CS游戏里说的“FPS值”。我们在装机选购显卡和显示器的时候,都会注意到“刷新率”。一般我们设置缺省刷新率都在75Hz(即75帧/秒)以上。例如:75Hz的刷新率刷也就是指屏幕一秒内只扫描75次,即75帧/秒。而当刷新率太低时我们肉眼都能感觉到屏幕的闪烁,不连贯,对图像显示效果和视觉感观产生不好的影响。
电影以每秒24张画面的速度播放,也就是一秒钟内在屏幕上连续投射出24张静止画面。有关动画播放速度的单位是fps,其中的f就是英文单词Frame(画面、帧),p就是Per(每),s就是Second(秒)。用中文表达就是多少帧每秒,或每秒多少帧。电影是24fps,通常简称为24帧。
1.7.1 常见媒体的FPS帧率
电影:24fps
电视(PAL):25fps
电视(NTSC):30fps
CRT显示器:75Hz以上
液晶显示器:一般为60Hz
#在游戏过程中一般人能接受的最低FPS约为30Hz,基本流畅等级则需要>60Hz。
1.7 屏幕类型
普屏4:3 320*240 640*480
宽屏16:9 480*272 640*360 672*378 720*480 1024*600 1280*720 1920*1080
2 视频点播解决方案
3 视频直播解决方案
3.1 视频直播流程
采集 —>处理—>编码和封装—>推流到服务器—>服务器流分发—>播放器流播放
3.1.1 视频采集:
#音频采集
音频数据既能与图像结合