利用ffmpeg实现rtmp推流直播
我們這次利用ffmpeg實(shí)現(xiàn)rtmp推流(最終推流地址統(tǒng)一為rtmp://127.0.0.1:1935/live/123)
1.首先下載ffmpeg和ffplay
官方下載鏈接為:FFmpeg
下載后開始配置環(huán)境變量:
系統(tǒng)屬性-環(huán)境變量-path-添加ffmpeg/bin的路徑;
打開命令窗口,輸入ffmpeg,檢測(cè)是否配置成功
?以上代表正常安裝配置(這一步很簡(jiǎn)單,很容易)
2、ffmpeg查看電腦設(shè)備
輸入下面的語(yǔ)句即可列出電腦的設(shè)備
ffmpeg -list_devices true -f dshow -i dummy
?可以看到我電腦里面有一個(gè)名為?VGA USB Camera ?攝像頭,沒有麥克風(fēng)
如果設(shè)備名稱有中文,會(huì)出現(xiàn)亂碼,想看設(shè)備原名,可以去設(shè)備管理器中查看
?最后一行可看到設(shè)備的名字;
3、測(cè)試攝像頭是否可用
cmd中輸入下面語(yǔ)句并回車(VGA USB Camera為攝像頭名稱)
ffplay -f dshow -i video="VGA USB Camera" ?
或者
ffplay -f vfwcap -i 0
如果成功彈出播放窗口,則代表設(shè)備可用,否則可能是設(shè)備不可用或者設(shè)備被占用
4、查看攝像頭和麥克風(fēng)信息
cmd中輸入下面語(yǔ)句即可查詢攝像頭信息
ffmpeg -list_options true -f dshow -i video="VGA USB Camera" ?
麥克風(fēng)的信息:
ffmpeg -list_options true -f dshow -i audio="麥克風(fēng)名字" ?
5、Windows搭建RTMP推流服務(wù)器
搭建服務(wù)器
- 服務(wù)器我們選用高穩(wěn)定性、高并發(fā)的web服務(wù)器nginx,利用nginx中的rtmp模塊進(jìn)行推流,使得nginx成為rtmp流媒體服務(wù)器
- 下載地址http://nginx-win.ecsds.eu/download/
?可選擇nginx 1.7.11.3 Gryphon
解壓后,在nginx 1.7.11.3 Gryphon目錄下新建三個(gè)文件夾:
- m3u8File
- rec
- vod
?在conf目錄下,新建一個(gè)文件“nginx.conf”
worker_processes 1; #Nginx進(jìn)程數(shù),建議設(shè)置為等于CPU總核數(shù)events {worker_connections 1024; #工作模式與連接數(shù)上限 }rtmp_auto_push on;#RTMP服務(wù) rtmp{server{listen 1935; #服務(wù)端口chunk_size 4096; #數(shù)據(jù)傳輸塊的大小application vod{play ./vod; #視頻文件存放位置}application live{live on; # hls on; #開啟hls直播。這個(gè)參數(shù)把直播服務(wù)器改造成實(shí)時(shí)回放服務(wù)器#wait_key on; #對(duì)視頻切片進(jìn)行保護(hù),這樣就不會(huì)產(chǎn)生馬賽克了hls_path ./html/hls; #切片視頻文件存放位置(HLS,m3u8文件存放位置)hls_fragment 2s; #每個(gè)視頻切片的時(shí)長(zhǎng)hls_playlist_length 16s;recorder myRecord{record all manual;record_suffix _.flv;record_path ./rec;}#hls_continuous on; #連續(xù)模式#hls_cleanup on; #對(duì)多余的切片進(jìn)行刪除#hls_nested on; #嵌套模式}} }#HTTP服務(wù) http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80;server_name localhost;location / {root html;index index.html index.htm;}location /live_hls{types{#m3u8 type設(shè)置application/vnd.apple.mpegurl m3u8;#ts分片文件設(shè)置video/mp2t ts;}#指向訪問m3u8文件目錄alias ./html/hls;add_header Cache-Control no-cache; #禁止緩存}location /control{rtmp_control all;}location /stat{rtmp_stat all;rtmp_stat_stylesheet stat.xsl;}location /stat.xsl{root ./nginx-rtmp-module-master;}# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}} }cmd在nginx.exe所在的目錄啟動(dòng)nginx,輸入命令:?start nginx
在瀏覽器輸入127.0.0.1或者localhost
?6、本地視頻的推流
先進(jìn)行簡(jiǎn)單的本地視頻推流模擬,我們?cè)趂fmpeg的目錄下放置一個(gè)視頻,然后cmd進(jìn)入該目錄,把視頻推流至rtmp://127.0.0.1:1935/live/123(127.0.0.1:1935為rtmp服務(wù)器地址、live為nginx配置節(jié)點(diǎn)、123當(dāng)做密鑰,推流拉流地址一樣即可播放),語(yǔ)句如下
ffmpeg -re -i test1.mp4 -f flv rtmp://127.0.0.1:1935/live/123
此時(shí)ffmpeg源源不斷的把視頻推流至服務(wù)器,如果地址沒錯(cuò),可以利用vlc或其他手段實(shí)現(xiàn)拉流,這里就先不解釋如何拉流
7、攝像頭推流
接下來正式把對(duì)攝像頭進(jìn)行推流,從前面我們知道攝像頭名稱為VGA USB Camera,而且推流服務(wù)器ip為127.0.0.1:1935,關(guān)鍵字為live,所以cmd中輸入以下語(yǔ)句:
ffmpeg -f dshow -i video="VGA USB Camera" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://127.0.0.1:1935/live/123
?和本地視頻推流一樣,攝像頭拍到的畫面會(huì)實(shí)時(shí)推流出去(當(dāng)然會(huì)有延遲而且現(xiàn)在是沒有聲音的),當(dāng)?shù)刂氛_時(shí),可以實(shí)現(xiàn)拉流
8、麥克風(fēng)推流
前面介紹了攝像頭畫面推流,可是沒有聲音,這次我們把麥克風(fēng)聲音推流出去,cmd中輸入下面語(yǔ)句
ffmpeg ?-f dshow -i audio="麥克風(fēng)" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://127.0.0.1:1935/live/123
和前面差不多,聲音被推流出去了,通過vlc拉流可以聽到錄制的聲音,但很明顯不會(huì)有畫面
9、攝像頭&麥克風(fēng)推流
要實(shí)現(xiàn)同時(shí)推流攝像頭畫面與聲音,此時(shí)我們的語(yǔ)句應(yīng)該如下
ffmpeg -f dshow -i video="VGA USB Camera" -f dshow -i audio="麥克風(fēng)name" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://127.0.0.1:1935/live/123
或者
ffmpeg -f dshow -i video="VGA USB Camera":audio="麥克風(fēng) name" -vcodec libx264 ?-r 25 ?-preset:v ultrafast -tune:v zerolatency -f flv rtmp://127.0.0.1:1935/live/123
10、拉流
將推送的服務(wù)器的視頻流拉下來播放,我們使用vlc播放器。
?
?OK,到此,我們簡(jiǎn)單的推流服務(wù)器就搭起來了,拉流也可以用其他方式,比如web端的開發(fā)等,這個(gè)不熟,所以暫時(shí)使用VLC可檢測(cè)
總結(jié)
以上是生活随笔為你收集整理的利用ffmpeg实现rtmp推流直播的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2015.2.2号工作日志-------
- 下一篇: Uip WebServer 实现