1. 程式人生 > >ngnix+rtmpModule+ffmpeg實現直播流媒體伺服器,並於java後臺關聯

ngnix+rtmpModule+ffmpeg實現直播流媒體伺服器,並於java後臺關聯

1、ngnix+rtmpModule+ffmpeg安裝配置

1.1、安裝環境

1.2、ngnix安裝

  • ngnix必要庫安裝

    yum -y install openssl-devel pcre pcre-devel zlib zlib-devel gcc gcc-c++ glibc glibc-devel

    其他缺少的庫根據編譯錯誤提示安裝

  • ngnix安裝和配置

    1、解壓ngnix1.12.2

    tar -zxvf ngnix1.12.2.tar.gz
    unzip ngnix-rtmp-module.zip

    2、配置安裝

    cd ngnix1.12.2
    ./configure –add-module=/homt/root/nginx-rtmp-module
    make
    make install

    3、修改配置檔案

    vi conf/ngnix.conf

    
    #在最外層增加如下配置
    
    rtmp {
        server {
            listen 1935;
    
           #rtmp配置
            application live{
                live on;
                #開始推流回調,url地址為java介面
                on_publish http://192.168.1.62:9001/hello;
                #推流停止回撥,url地址為java介面
                on_done http://192.168.1.62:9001/hello
    ; } #hls配置 application hls { live on; hls on; hls_path /tmp/hls; #開始推流回調,url地址為java介面 on_publish http://192.168.1.62:9001/hello; #推流停止回撥,url地址為java介面 on_done http://192.168.1.62:9001/hello; } } }

1.3、java後臺

只做了個簡單測試,可根據這些引數完善後臺,實現使用者推流開始把使用者ID和推流地址存入redis或其他高效能儲存,前臺展示當前直播的使用者,點選使用者返回推流地址,實現直播,測試程式碼如下,用spring boot寫的

@RestController
@SpringBootApplication
public class DemoApplication {

    @RequestMapping("/hello")
    public String hello(HttpServletRequest request) {
        Map<String, String[]> parameterMap = request.getParameterMap();
        System.out.println("引數數量:"+parameterMap.size());
        /**這三個引數是比較有用的引數
             tcurl:rtmp地址
             name:"rtmp://ngnix伺服器地址/live/id"地址中去除推流地址的最後一個引數,可傳入直播使用者ID
             type:推流型別
        */
        System.out.println("tcurl:"+request.getParameter("tcurl"));
        System.out.println("name:"+request.getParameter("name"));
        System.out.println("type:"+request.getParameter("type"));
        //列印所有回撥傳過來的引數
        for(Entry<String, String[]> entry : parameterMap.entrySet()) {
            System.out.println(entry.getKey() + "====================");
            for(String str : entry.getValue()) {
                System.out.println("\t"+str);
            }
        }

        return "hello world2";
    }

    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(DemoApplication.class);
        app.setBanner(new BannerInfo());
        app.run(args);
    }
}

1.4、測試

1.4.1、使用ffmpeg把一個檔案轉為rtmp流

ffmpeg -re -i F:\1.wmv -c:v libx264 -preset veryfast -maxrate 3000k -bufsize 6000k -pix_fmt yuv420p -g 50 -c:a aac -b:a 160k -ac 2 -ar 44100 -f flv rtmp://ngnix伺服器地址/live/1

java後臺列印結果

引數數量:9
tcurl:rtmp://192.168.1.10:1935/live
name:1
type:live
app====================
    live
flashver====================
    FMLE/3.0 (compatible; Lavf58.5.
swfurl====================

tcurl====================
    rtmp://192.168.1.10:1935/live
pageurl====================

addr====================
    192.168.1.62
clientid====================
    410
call====================
    publish
name====================
    1

1.4.2、然後使用vlc開啟,測試成功

這裡寫圖片描述

1.5、結尾

到此一個簡單的直播平臺就可以實現了,雖然不是一個完整的例子,但是核心就是以上這些,大家可以在次基礎上擴充套件,因為本人目前並沒有應用場景,只是空閒時間瞭解了一些這塊的一些相關東西,做了一下整理,方便以後使用,有什麼不妥的地方希望大家指正,共同學習