目錄
整天框架分析
rtmp拉流分析
rtmp推流分析
hls拉流分析
hsl推流分析
http-flv拉流分析
http-flv推流分析
ffmpeg轉碼分析
首屏秒開技術分析
1.1 RTMP的簡介
RTMP是Real Time Messaging Protocol(實時消息傳輸協議)的首字母縮寫。該協議基于TCP,是一個協議族,包括RTMP基本協議及RTMPT/RTMPS/RTMPE等多種變種。RTMP是一種設計用來進行實時數據通信的網絡協議,主要用來在Flash/AIR平臺和支持RTMP協議的流媒體/交互服務器之間進行音視頻和數據通信。支持該協議的軟件包括Adobe Media Server/Ultrant Media Server/red5等。
.2 集成FFmpeg目的
Nginx的RTMP模塊提供的流媒體功能不足之處就是對很多媒體格式不支持,故需要借助FFmpeg功能來補充。
1.3 FFmpeg官方架構介紹

流媒體廣播服務器(FFserver),對多個輸入源進行轉碼、重映射、廣播
- 輸入源(FFmpeg),將音頻或視頻發送給流媒體播放器
- 媒體播放器
1.4 FFmpeg官方工作模型

rtmp推流分析
開發環境
linux (centos7),Nginx (openresty),nginx-rtmp-module
安裝
由于之前已經安裝過了openresty,詳見博文。這里我們只需要安裝nginx-rtmp-module模塊即可。
下載并解壓模塊:
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
unzip master.zip
停止原來的Nginx服務:
nginx -s stop
配置并編輯:
./configure --add-module=/home/nginx-rtmp-module-master
make
復制Nginx:
## 路徑根據自己軟件路徑自行配置
cp /home/openresty/build/nginx-1.11.2/objs/nginx /usr/local/openresty/nginx/sbin
配置rtmp服務:
rtmp { #RTMP服務
server {
listen 1935; #//服務端口
chunk_size 4096; #//數據傳輸塊的大小
Application vod {
play /opt/video; #//視頻文件存放位置。
}
application live{ #直播
live on;
}
}
}
檢查并啟動服務:
nginx -t
nginx
ffmpeg轉碼分析
使用shell快速安裝視頻轉碼器
#!/bin/bash
#1、保證系統可以連到外網,需要下載安裝包和依賴包
#2、依賴gcc編譯器
#3、測試命令:ffmpeg -i test.avi out.mp4
set -e
ffmDir="/usr/myapp"
ffmVer="ffmpeg-3.4.1"
yasmVer="yasm-1.3.0"
mkdir $ffmDir -pv
yum install wget gcc -y
cd /usr/local/src
wget http://ffmpeg.org/releases/ffmpeg-3.4.1.tar.bz2
wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar xf ffmpeg-3.4.1.tar.bz2
tar xf yasm-1.3.0.tar.gz
cd $yasmVer
./configure && make && make install
cd ../$ffmVer
./configure --enable-shared --prefix=$ffmDir/ffmpeg && make && make install
echo "$ffmDir/ffmpeg/lib" > /etc/ld.so.conf.d/ffmpeg.conf
ldconfig
cd $ffmDir/ffmpeg/bin && ls
echo -e "33[31m Usage:nt./ffmpeg -i test.avi out.mp4 33[0m"