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