日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

FFmpeg学习(七)流媒体服务器搭建

發(fā)布時間:2024/5/24 综合教程 43 生活家
生活随笔 收集整理的這篇文章主要介紹了 FFmpeg学习(七)流媒体服务器搭建 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一:音視頻直播架構(gòu)介紹

(一)直播產(chǎn)品種類

泛娛樂化直播:大規(guī)模直播(沒有互動),多為觀看,可以使用該架構(gòu)。支持rtmp、hls、http/flv
實時互動直播:使用了RTP協(xié)議,與目前的學(xué)習(xí)協(xié)議不同;常用webrtc

(二)泛娛樂化直播架構(gòu)

1.主播端發(fā)送信令到信令服務(wù)器,創(chuàng)建房間,返回房間地址 。
2.主播向獲取的房間地址推流
3.也是主播端,同1,只是協(xié)議不同
4.同2
5.觀眾端要觀看節(jié)目,也需要發(fā)送信令給信令服務(wù)器。獲取到主播節(jié)目的媒體流的地址。
6.觀眾端獲取了主播節(jié)目流地址,就可以去流媒體云中去拉流。贊賞、聊天,發(fā)送給信令服務(wù)器處理。

(三)實時互動直播架構(gòu)

左互動(內(nèi)部用戶互動)
右收聽(提供大規(guī)模用戶直播架構(gòu))

(四)直播客戶架構(gòu)

(五)流媒體服務(wù)搭建介紹

1.有多種搭建方式:下面介紹3種

1.使用Nginx搭建本地流媒體服務(wù)器
2.通過SRS搭建RTMP server;實現(xiàn)流媒體服務(wù)器網(wǎng)絡(luò)集群
3.CDN網(wǎng)絡(luò)(現(xiàn)成的,商業(yè)化的),自己會擴(kuò)容

2.介紹Nginx

二:本機搭建Nginx RTMP服務(wù)

(一)下載資源

1.nginx源碼:http://nginx.org/en/download.html

tar -xvf nginx-1.19.10.tar.gz

2.下載ginx-rtmp-module:https://github.com/arut/nginx-rtmp-module

git clone https://github.com/arut/nginx-rtmp-module.git

(二)RTMP環(huán)境搭建

./configure --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module

prefix指定安裝路徑,add-module添加新模塊。

make -j 4

-j開啟多進(jìn)程編譯。

sudo make install

(三)配置環(huán)境

修改nginx下的配置文件nginx.conf

#rtmp服務(wù)
rtmp {
    server {
        #指定服務(wù)端口
        listen 1935;
        chunk_size 4000; #RTMP協(xié)議中需要
        #指定流應(yīng)用:名稱自定義
        application mytv {
            live on;  #直播
            allow play all;  #允許直接進(jìn)行播放
        }
    }
}

(四)啟動服務(wù)

sudo ./sbin/nginx -c conf/nginx.conf

(五)推/拉流測試

1.監(jiān)聽頻道,進(jìn)行拉流

ffplay rtmp://localhost/mytv/room01  #mytv是起的流應(yīng)用名稱;room01是自定義頻道

也可以保存:

 ffmpeg -i rtmp://localhost/mytv/room01 -c copy out2.flv

2.進(jìn)行推流

ffmpeg -re -i ./out.flv -c copy -f flv rtmp://localhost/mytv/room01

注意:在直播系統(tǒng)中不可能直接讓用戶知道視頻流地址,所以需要一個信令服務(wù)器進(jìn)行資源管理!!

三:SRS流媒體服務(wù)

(一)SRS介紹

github地址:https://github.com/ossrs/srs

(二)單機部署SRS服務(wù)器

1.下載源碼

git clone https://gitee.com/winlinvip/srs.oschina.git srs &&
cd srs/trunk && git remote set-url origin https://github.com/ossrs/srs.git && 
git checkout 3.0release && git pull

2.配置與編譯

 ./configure --prefix=/usr/local/srs 
make -j 4

3.安裝

sudo make install

conf:存放配置信息,比如srs.conf、origin.cluster.edge.conf邊緣結(jié)點配置
etc:存放腳本(可以設(shè)置自動啟動)
objs:編譯好的程序,也有日志

srs.conf

# main config for srs.
# @see full.conf for detail config.

listen              1935;  #偵聽端口
max_connections     1000;  #支持最大連接數(shù)
srs_log_tank        file;  #日志輸出形式
srs_log_file        ./objs/srs.log; #日志存放位置
daemon              on;
http_api {            
    enabled         on;
    listen          1985;
}
http_server {
    enabled         on;
    listen          8080;
    dir             ./objs/nginx/html;
}
stats {
    network         0;
    disk            sda sdb xvda xvdb;
}
vhost __defaultVhost__ {
    hls {
        enabled         on;
    }
    http_remux {
        enabled     on;
        mount       [vhost]/[app]/[stream].flv;
    }
}

origin.cluster.edge.conf:配置邊緣節(jié)點與源站之間的關(guān)系

edge.conf:配置邊緣節(jié)點

# the config for srs origin-edge cluster
# @see https://github.com/ossrs/srs/wiki/v1_CN_Edge
# @see full.conf for detail config.

listen              1935;
max_connections     1000;
pid                 objs/edge.pid;
vhost __defaultVhost__ {
    cluster {
        mode            remote;
        origin          127.0.0.1:19350;  #配置源站信息
    }
}

4.啟動

./objs/srs -c conf/srs.conf

5.測試(同前面的nginx測試)

(三)RTMP中的URL與VHOST

1.RTMP URL

標(biāo)準(zhǔn)RTMP URL指的是最大兼容的RTMP URL,基本上所有的服務(wù)器和播放器都能識別的URL,和HTTP URL其實很相似,例如:

HTTP Schema Host Port App Stream
http://192.168.1.10:80/players/srs_player.html http 192.168.1.10 80 players srs_player.html
rtmp://192.168.1.10:1935/live/livestream rtmp 192.168.1.10 1935 live livestream

其中:

Schema:協(xié)議頭,HTTP為HTTP或HTTPS,RTMP為RTMP/RTMPS/RTMPE/RTMPT等眾多協(xié)議,還有新出的RTMFP。
Host:主機,表示要連接的主機,可以為主機DNS名稱或者IP地址。商用時,一般不會用IP地址,而是DNS名稱,這樣可以用CDN分發(fā)內(nèi)容(CDN一般使用DNS調(diào)度,即不同網(wǎng)絡(luò)和地理位置的用戶,通過DNS解析到的IP不一樣,實現(xiàn)用戶的就近訪問)。
Port:端口,HTTP默認(rèn)為80,RTMP默認(rèn)為1935。當(dāng)端口沒有指定時,使用默認(rèn)端口。
Path:路徑,HTTP訪問的文件路徑。
App:RTMP的Application(應(yīng)用)名稱,可以類比為文件夾。以文件夾來分類不同的流,沒有特殊約定,可以任意劃分。
Stream:RTMP的Stream(流)名稱,可以類比為文件

2.Vhost

RTMP的Vhost和HTTP的Vhost概念是一樣的:虛擬主機。詳見下表(假設(shè)域名demo.srs.com被解析到IP為192.168.1.10的服務(wù)器):

HTTP Host Port Vhost
http://demo.srs.com:80/players/srs_player.html 192.168.1.10 80 demo.srs.com
rtmp://demo.srs.com:1935/live/livestream 192.168.1.10 1935 demo.srs.com

Vhost主要的作用是:

支持多用戶:當(dāng)一臺服務(wù)器需要服務(wù)多個客戶,譬如CDN有cctv(央視)和wasu(華數(shù)傳媒)兩個客戶時,如何隔離他們兩個的資源?相當(dāng)于不同的用戶共用一臺計算機,他們可以在自己的文件系統(tǒng)建立同樣的文件目錄結(jié)構(gòu),但是彼此不會沖突。
域名調(diào)度:CDN分發(fā)內(nèi)容時,需要讓用戶訪問離自己最近的邊緣節(jié)點,邊緣節(jié)點再從源站或上層節(jié)點獲取數(shù)據(jù),達(dá)到加速訪問的效果。一般的做法就是Host是DNS域名,這樣可以根據(jù)用戶的信息解析到不同的節(jié)點。
支持多配置:有時候需要使用不同的配置,考慮一個支持多終端(PC/Apple/Android)的應(yīng)用,PC上RTMP分發(fā),Apple和Android是HLS分發(fā),如何讓PC延遲最低,同時HLS也能支持,而且終端播放時盡量地址一致(降低終端開發(fā)難度)?可以使用兩個Vhost,PC和HLS;PC配置為最低延遲的RTMP,并且將流轉(zhuǎn)發(fā)給HLS的Vhost,可以對音頻轉(zhuǎn)碼(可能不是H264/AAC)后切片為HLS。PC和HLS這兩個Vhost的配置肯定是不一樣的,播放時,流名稱是一樣,只需要使用不同的Host就可以。

listen              1935;
vhost show.cctv.cn {
    chunk_size 128;
}
vhost show.wasu.cn {
    chunk_size 4906;
}

nginx配置虛擬主機vhost的方法詳解

(四)SRS集群部署

1.部署圖

源節(jié)點:

兩個邊緣節(jié)點:

開啟集群:

sudo ./objs/srs -c conf/origin.conf
sudo ./objs/srs -c conf/edge.conf
sudo ./objs/srs -c conf/edge2.conf

推流/拉流測試:

ffmpeg -re -i ./out.flv -c copy -f flv rtmp://127.0.0.1:1935/mytv/room01

ffplay rtmp://127.0.0.1:1936/mytv/room01

四:CDN了解

(一)CDN

(二)阿里云架構(gòu)

總結(jié)

以上是生活随笔為你收集整理的FFmpeg学习(七)流媒体服务器搭建的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。