windows下ffmpeg結合Nginx搭建RTMP,直播中的推流和拉流


前幾天經理給我安排了一個新任務,將網絡攝像頭用rtsp協議在頁面播放,因為我以前做的是http協議的,根據攝像頭的API來實現的,所以這一塊根本不懂,看了前輩們寫的博客,學習到了許多,在這里記錄下來,以后用的時候還能看看。
目前需要用到技術有ffmpeg、nginx、rtsp以及rtmp協議,頁面播放器VLC、flash、video.js都可以,在使用之前先對這些技術做一個大體的了解。

  • RTSP
    要知道什么是RTSP?點擊鏈接
  • RTMP
    什么是RTMP?點擊鏈接
  • ffmpeg
    什么是ffmpeg?點擊鏈接
  • nginx
    什么是nginx?點擊鏈接
    ffmpeg的下載地址:https://ffmpeg.zeranoe.com/builds/win64/static/
    nginx的下載地址:http://nginx-win.ecsds.eu/download/
    根據需要下載自己所需要的版本之后,接下來開始搭建服務器。
    ##FFmpeg配置##
    將下載下來的ffmpeg的壓縮文件解壓,然后到C盤下面,新建一個文件夾,名稱就是ffmpeg(在原來的路徑也可以,只不過路徑太麻煩了),然后將解壓的文件全部復制到C://ffmpeg文件夾下面,然后右擊我的電腦圖標——選擇屬性,選擇高級系統設置命令,然后在彈出的窗口中選擇環境變量系統屬性
    在系統變量點擊添加,新建一個Path變量,變量值為解壓的根文件夾,然后打開bin,我的是在C盤下,所以就是:
    這里寫圖片描述
    然后點擊確定,退出頁面。
           按win+R打開命令行窗口,輸入ffmpeg -version,查看是否安裝成功,如果成功的話,顯示下圖。
    這里寫圖片描述
    步驟進行到這里,ffmpeg已經配置完成了。
    ##Nginx##
    首先下載自己需要的版本,點擊鏈接進行下載,將下載的文件解壓到本地,然后再下載一個文件,nginx-rtmp-module-master,將此文件下載之后,解壓放到上面的文件根目錄下即可,下面是配置文件:
    1、配置nginx文件,在conf文件夾里面有一個nginx-win.conf文件,將文件改名為nginx.conf(此處不改我也不知道可不可以,看到博客上這樣寫,我就改了),然后里面配置文件如下:
……
rtmp{
	server{
	listen 1935;

		application live{
		live on;
		record off;
		}
		application hls{
		live on;
		hls on;
		hls_path nginx-rtmp-module/hls;
		hls_cleanup off;
		}
	}
}
http{
……
}
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

原文中還有許多配置,但是我引用之后報錯,不能夠實現,所以我就講其他的刪除了,有需要的可以看一下原文這個地方的配置信息。
2、使用cmd命令啟動nginx,在命令窗口進入之前解壓的文件夾根目錄,然后輸入start nginx.exe,會彈出一個窗口,閃一下就關閉,如下所示
這里寫圖片描述
然后在任務管理器的進程管理中,可以看到nginx.exe正在運行,到此nginx搭建完畢。
這里寫圖片描述
3、在瀏覽器輸入localhost或者127.0.0.1或者本機的IP地址,彈出如下頁面表示搭建成功。
這里寫圖片描述

接下來要做的就是把rtsp流轉換為rtmp流,可以在播放器中實時播放。
1、在cmd窗口中,打開nginx之后,輸入命令ffmpeg -i "rtsp://admin:SHENLAN%402016@192.168.1.64/Streaming/Channels/102" -vcodec copy -acodec copy -f flv "rtmp://127.0.0.1:1935/live/"之后顯示如下界面表示轉碼成功:


這里寫圖片描述
2、轉碼成功之后,將轉碼之后的地址,我這里是rtmp://127.0.0.1:1935/live,放在vlc播放器中查看實時視頻
這里寫圖片描述
3、使用ffplay命令也可以查看,在命令行輸入ffplay “rtmp://127.0.0.1:1935/live”,就會看到實時視頻。
4、如果要在頁面中使用的話,需要進行推流處理,就是將rtmp流通過命令進行推流操作,通過本條命令(start ffmpeg -re -i “rtmp://localhost:1935/live” -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -acodec copy -f flv "rtmp://localhost:1935/hls/mystream -loglevel quiet)可以將rtmp流視頻推送到rtmp://localhost:1935/hls/mystream,這個地址后面的mystream可以隨意寫,但是要跟前面推流過程中寫的一樣;
5、頁面中使用video.js來播放推送過來的rtmp視頻,頁面是要放到服務器中打開的,單獨打開靜態頁面是沒有用的。
攝像頭視頻
6、還有一種方法,不需要轉碼兩次,直接將rtsp視頻轉碼為可以在頁面播放的rtmp流,命令行為(ffmpeg -re -i “rtsp://admin:123456@192.168.2.165:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif” -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -acodec copy -f flv “rtmp://localhost:1935/hls/mystream”)或者(ffmpeg -i “rtsp://admin:123456@192.168.2.165:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif” -f flv -r 25 -s 640*480 -an “rtmp://localhost:1935/hls/mystream”),即可在頁面使用rtmp://localhost:1935/hls/mystream來播放視頻。
頁面部分具體代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <script src="jquery.js"></script>
    <script src="video.js"></script>
    <link href="video-js.css" rel="stylesheet">
    <script>
        videojs.options.flash.swf = "video-js.swf";
    </script>
</head>
<body>
<video id="my-video" class="video-js vjs-default-skin vjs-big-play-centered" width="800" height="600">
    <source src='rtmp://localhost:1935/hls/mystream' type='rtmp/flv'/>
</video>
<script>
    var player = videojs('my-video');
    player.play();
</script>
</body>
</html>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM