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

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

rtmp推流分析
開發(fā)環(huán)境
linux (centos7),Nginx (openresty),nginx-rtmp-module
安裝
由于之前已經(jīng)安裝過了openresty,詳見博文。這里我們只需要安裝nginx-rtmp-module模塊即可。
下載并解壓模塊:
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
unzip master.zip
停止原來的Nginx服務(wù):
nginx -s stop
配置并編輯:
./configure --add-module=/home/nginx-rtmp-module-master
make
復(fù)制Nginx:
## 路徑根據(jù)自己軟件路徑自行配置
cp /home/openresty/build/nginx-1.11.2/objs/nginx /usr/local/openresty/nginx/sbin
配置rtmp服務(wù):
rtmp { #RTMP服務(wù)
server {
listen 1935; #//服務(wù)端口
chunk_size 4096; #//數(shù)據(jù)傳輸塊的大小
Application vod {
play /opt/video; #//視頻文件存放位置。
}
application live{ #直播
live on;
}
}
}
檢查并啟動服務(wù):
nginx -t
nginx
ffmpeg轉(zhuǎn)碼分析
使用shell快速安裝視頻轉(zhuǎn)碼器
#!/bin/bash
#1、保證系統(tǒng)可以連到外網(wǎng),需要下載安裝包和依賴包
#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"