基于 Nginx 和 FFmpeg 搭建流媒体服务器

什么是流媒体

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

什么是流式传输

客户端通过链接视频服务器实时传输音、视频信息,实现“边下载边播放”。

  • 顺序流式传输即顺序下载音、视频文件,可以实现边下载边播放,不过,用户只能观看已下载的视频内容,无法快进到未下载的视频部分,顺序流式传输可以使用Http服务器来实现,比如Nginx、Apache等。
  • 实时流式传输实时流式传输可以解决顺序流式传输无法快进的问题,它与Http流式传输不同,它必须使用流媒体服务器并 且使用流媒体协议来传输视频,它比Http流式传输复杂。常见的实时流式传输协议有RTSP、RTMP、RSVP 等。

业务流程

1.将原始的视频文件通过编码器转换为适合网络传输的流格式,编码后的视频直接输送给媒体服务器

2.媒体服务获取到编码好的视频文件,对外提供流媒体数据传输接口,接口协议包括 :HTTP、RTSP、 RTMP等

3.播放器通过流媒体协议与媒体服务器通信,获取视频数据,播放视频

视频点播方案

  • 方案1播放器通过 http协议从http服务器上下载视频文件进行播放问题: 「必须等到视频下载完才可以播放」,不支持快进到某个时间点进行播放
  • 方案2播放器通过rtmp协议连接媒体服务器以实时流方式播放视频问题: 使用rtmp协议需要架设媒体服务器,「造价高」,对于直播多采用此方案
  • 方案3播放器使用HLS协议连接http服务器(Nginx、Apache等)实现近实时流方式播放视频「HLS协议」:基于Http协议,视频封装格式为ts,视频的编码格式为H264,音频编码格式为MP3、AAC或者AC- 3。采用HLS方案可以实现边下载边播放,并且不用使用rtmp流媒体协议,不用构建专门的媒体服务器,节省成本「所以我们这里选择方案3」

什么是HLS

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

iOS、Android设备、及各大浏览器都支持HLS协议。

  • HLS的工作方式将视频拆分成若干ts格式的小文件,通过m3u8格式的索引文件对这些ts小文件建立索引。一般 10秒一个ts文件,播放器连接m3u8文件播放,当快进时通过m3u8即可找到对应的索引文件,并去下载对应的ts文 件,从而实现快进、快退以近实时 的方式播放视频。
  • HLS视频编码将视频编码成HLS格式,最终会输出两类文件,m3u8文件和ts文件
  • 视频播放1.客户端先下载m3u8文件2.根据m3u8文件列表下载ts文件3.客户端播放ts文件

什么是视频编码

所谓视频编码方式就是指通过压缩技术,将原始视频格式的文件转换成另一种视频格式文件的方式。

  • 文件格式指.mp4、.avi、.rmvb等 这些不同扩展名的视频文件的文件格式。
  • 编码格式通过音视频的压缩技术,将视频格式转换成另一种视频格式,通过视频编码实现流媒体的传输。比如:一个.avi的视频文件原来的编码是a,通过编码后编码格式变为b,音频原来为c,通过编码后变为d。
  • 常见音视频编码格式

MPEG系列 (由ISO[国际标准组织机构]下属的MPEG[运动图象专家组]开发 )视频编码方面主要是Mpeg1(vcd用 的就是它)、Mpeg2(DVD使用)、Mpeg4(的DVDRIP使用的都是它的变种,如:sectionx,xvid等)、Mpeg4 AVC(正热门);

音频编码方面主要是MPEG Audio Layer 1/2、MPEG Audio Layer 3(大名鼎鼎的mp3)、 MPEG-2 AAC 、MPEG-4 AAC等等。注意:DVD音频没有采用Mpeg的。

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

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

相关视频推荐

快速掌握SRS 4.0流媒体服务器

腾讯音视频面试-RTSP_RTMP推流的各种坑分析

90分钟搞定直播逻辑-推流-流媒体服务器-拉流

【免费】FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发免费学习地址

【纯干货免费分享】C++音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击671977938加群免费领取哦~

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被许多开源项目采用,QQ影音、暴风影音等。

  • Linux下安装ffmpeg

# 1.安装ffmpeg时需要提前安装yasm插件
wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar -xvf yasm-1.3.0.tar.gz
cd yasm-1.3.0/
./configure && make && make install
# 2.安装ffmpeg
wget http://www.ffmpeg.org/releases/ffmpeg-3.4.tar.gz
tar -xvf ffmpeg-3.4.tar.gz
cd ffmpeg-3.4/
./configure && make && make install
# 3.查看版本号
[root@centos7-app ffmpeg-3.4]# ffmpeg -version
ffmpeg version 3.4 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-28)
configuration:
libavutil 55. 78.100 / 55. 78.100
libavcodec 57.107.100 / 57.107.100
libavformat 57. 83.100 / 57. 83.100
libavdevice 57. 10.100 / 57. 10.100
libavfilter 6.107.100 / 6.107.100
libswscale 4. 8.100 / 4. 8.100
libswresample 2. 9.100 / 2. 9.100

<< · Back Index ·>>

发表回复

相关推荐

深度解析组织绩效V模型,深入理解组织

在《什么是组织?组织的开门七件事》一文中,我们曾用“开门七件事”的方式来回答“什么是组织”这个问题。在本文里,我们再从另 ...

· 38秒前

西南交通大學藥學考研:名詞解釋必背系列!

今天是由我們西南交通大學藥學考研的授課老師——九月學姐,為我們帶來西交藥學考研名詞解釋必背系列,大傢小本本準備好,直接...

· 1分钟前

歐美猥瑣房東逼女租客“肉償”租金:住我這免費,但得每周陪睡!

英國《每日郵報》報道,去年3月因為疫情開始傳播重創經濟後,至少有3萬名女性在尋找可以負擔的出租房時,遇到瞭房東“以性代租...

· 3分钟前

乌鲁木齐市地铁地图

笔者是乌鲁木齐人,乌鲁木齐是新疆唯一有地铁的城市。

· 3分钟前

成績造假、虛假宣傳以及刷贊:點一點雅思前考官米米Reme(路敏)

2022年4月份更新:reme在小紅書上誹謗湯老師,被逮個正著,現在又裝死不回應瞭:--------------------------------------------

· 4分钟前