1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      使用Nginx-rtmp怎么實(shí)現(xiàn)一個直播媒體實(shí)時(shí)流效果

      使用Nginx-rtmp怎么實(shí)現(xiàn)一個直播媒體實(shí)時(shí)流效果?針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

      創(chuàng)新互聯(lián)公司是一家專業(yè)提供祁縣企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作H5開發(fā)、小程序制作等業(yè)務(wù)。10年已為祁縣眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。

      流程圖

      使用Nginx-rtmp怎么實(shí)現(xiàn)一個直播媒體實(shí)時(shí)流效果

      ?

      1

      2

      3

      4

      5

      6

      7

      1. 客戶端A無法進(jìn)行P2P穿透,請求業(yè)務(wù)服務(wù)器要進(jìn)行轉(zhuǎn)發(fā)。

      2. 業(yè)務(wù)服務(wù)器根據(jù)客戶端A,請求類型,返回對應(yīng)的轉(zhuǎn)發(fā)服務(wù)器地址和對應(yīng)的房間號RoomID/Token等信息

      3. 上述請求類型,可以是請求自建RTMP流媒體服務(wù),購買于云廠商RTMP流媒體服務(wù)或者自定義協(xié)議媒體轉(zhuǎn)發(fā)服務(wù)

      4. 客戶端A得到業(yè)務(wù)服務(wù)器返回的媒體服務(wù)器地址和RoomID/Token

      5. 通過信令服務(wù)器或者M(jìn)QTT服務(wù)器,把對應(yīng)的媒體服務(wù)器地址和RoomID/Token告訴另一端客戶端B

      6. 客戶端A和客戶端B同時(shí)進(jìn)入相同房間Room,客戶端A進(jìn)行推流,客戶端B進(jìn)行拉流

      7. 其他媒體信息,如編解碼格式,清晰度,播放,暫停,拍照等命令,通過上述信令或MQTT服務(wù)器進(jìn)行命令控制

      1. 編譯Nginx

      RTMP流媒體服務(wù)器,現(xiàn)成的開源方案有很多,有SRS,Red5,wowoza,F(xiàn)MS等,我這里使用的是Nginx的rtmp插件實(shí)現(xiàn)實(shí)時(shí)流轉(zhuǎn)發(fā)。

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

      重新編譯nginx

      ?

      1

      --prefix=/opt/nginx --with-stream --with-http_ssl_module --with-stream_ssl_module --with-debug --add-module=../nginx-rtmp-module

      2. 配置Nginx.conf

      基本的nginx配置,這里就不進(jìn)行介紹了,需要了解的可以參考我其他博客,里面有介紹。這里只介紹rtmp段的定義。

      ?

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      rtmp{

        server{

          listen 8081;

          access_log logs/rtmp_access.log;

          on_connect http://127.0.0.1:8080/v1/rtmp/on_connect;

          application rtmp {

            live on;

            notify_method get;

            on_play http://127.0.0.1:8080/v1/rtmp/on_play;

            on_publish http://127.0.0.1:8080/v1/rtmp/on_publish;

            on_done http://127.0.0.1:8080/v1/rtmp/on_done;

            on_play_done http://127.0.0.1:8080/v1/rtmp/on_play_done;

            on_publish_done http://127.0.0.1:8080/v1/rtmp/on_publish_done;

            on_record_done http://127.0.0.1:8080/v1/rtmp/on_record_done;

            on_update http://127.0.0.1:8080/v1/rtmp/on_update;

            notify_update_timeout 10s;

          }

          application vod {

            play /opt/openresty/video;

          }

        }

      }

      3. HTTP異步通知回調(diào)

         Nginx-rtmp-module插件實(shí)現(xiàn)了針對RTMP協(xié)議的一些命令做了事件通知。這里我通過一個簡單的SpringBoot項(xiàng)目,快速搭建一個HTTP服務(wù)來接收RTMP的回調(diào)。

      ?

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      package com.wunaozai.rtmp.notify.controller;

      import javax.servlet.http.HttpServletRequest;

      import org.springframework.web.bind.annotation.GetMapping;

      import org.springframework.web.bind.annotation.RequestMapping;

      import org.springframework.web.bind.annotation.RestController;

      @RestController

      @RequestMapping(value="/v1/rtmp/")

      public class RTMPNotifyController {

        @GetMapping(value="/on_connect")

        public String onConnect(HttpServletRequest request){

          debug(request, "on_connect");

          return "on_connect";

        }

        @GetMapping(value="/on_play")

        public String onPlay(HttpServletRequest request){

          debug(request, "on_play");

          return "on_play";

        }

        @GetMapping(value="/on_publish")

        public String onPublish(HttpServletRequest request){

          debug(request, "on_publish");

          return "on_publish";

        }

        @GetMapping(value="/on_done")

        public String onDone(HttpServletRequest request){

          debug(request, "on_done");

          return "on_done";

        }

        @GetMapping(value="/on_play_done")

        public String onPlayDone(HttpServletRequest request){

          debug(request, "on_play_done");

          return "on_play_done";

        }

        @GetMapping(value="/on_publish_done")

        public String onPublishDone(HttpServletRequest request){

          debug(request, "on_publish_done");

          return "on_publish_done";

        }

        @GetMapping(value="/on_record_done")

        public String onRecordDone(HttpServletRequest request){

          debug(request, "on_record_done");

          return "on_record_done";

        }

        @GetMapping(value="/on_update")

        public String onUpdate(HttpServletRequest request){

          debug(request, "on_update");

          return "on_update";

        }

        private String debug(HttpServletRequest request, String action){

          String str = action + ": " + request.getRequestURI() + " " + request.getQueryString();

          System.out.println(str);

          return str;

        }

      }

      4. 運(yùn)行效果

      (1) 啟動nginx和SpringBoot

      (2) 以下是SpringBoot打印信息(各位可以簡單分析一下這些日志的)

      ?

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      on_connect: /v1/rtmp/on_connect app=rtmp&flashver=FMLE/3.0%20(compatible%3B%20FMSc/1.0)&swfurl=&tcurl=rtmp://120.24.210.62:8081/rtmp&pageurl=&addr=113.74.127.195&epoch=178269841&call=connect

      on_publish: /v1/rtmp/on_publish app=rtmp&flashver=FMLE/3.0%20(compatible%3B%20FMSc/1.0)&swfurl=&tcurl=rtmp://120.24.210.62:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=541&call=publish&name=room&type=live

      on_update: /v1/rtmp/on_update app=rtmp&flashver=FMLE/3.0%20(compatible%3B%20FMSc/1.0)&swfurl=&tcurl=rtmp://120.24.210.62:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=541&call=update_publish&time=10×tamp=3999&name=room

      on_done: /v1/rtmp/on_done app=rtmp&flashver=FMLE/3.0%20(compatible%3B%20FMSc/1.0)&swfurl=&tcurl=rtmp://120.24.210.62:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=541&call=done&name=room

      on_publish_done: /v1/rtmp/on_publish_done app=rtmp&flashver=FMLE/3.0%20(compatible%3B%20FMSc/1.0)&swfurl=&tcurl=rtmp://120.24.210.62:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=541&call=publish_done&name=room

      on_connect: /v1/rtmp/on_connect app=rtmp&flashver=FMLE/3.0%20(compatible%3B%20FMSc/1.0)&swfurl=&tcurl=rtmp://120.24.210.62:8081/rtmp&pageurl=&addr=113.74.127.195&epoch=178305623&call=connect

      on_publish: /v1/rtmp/on_publish app=rtmp&flashver=FMLE/3.0%20(compatible%3B%20FMSc/1.0)&swfurl=&tcurl=rtmp://120.24.210.62:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=547&call=publish&name=room&type=live

      on_update: /v1/rtmp/on_update app=rtmp&flashver=FMLE/3.0%20(compatible%3B%20FMSc/1.0)&swfurl=&tcurl=rtmp://120.24.210.62:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=547&call=update_publish&time=10×tamp=7296&name=room

      on_update: /v1/rtmp/on_update app=rtmp&flashver=FMLE/3.0%20(compatible%3B%20FMSc/1.0)&swfurl=&tcurl=rtmp://120.24.210.62:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=547&call=update_publish&time=20×tamp=17248&name=room

      on_update: /v1/rtmp/on_update app=rtmp&flashver=FMLE/3.0%20(compatible%3B%20FMSc/1.0)&swfurl=&tcurl=rtmp://120.24.210.62:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=547&call=update_publish&time=30×tamp=27328&name=room

      on_update: /v1/rtmp/on_update app=rtmp&flashver=FMLE/3.0%20(compatible%3B%20FMSc/1.0)&swfurl=&tcurl=rtmp://120.24.210.62:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=547&call=update_publish&time=40×tamp=37280&name=room

      on_update: /v1/rtmp/on_update app=rtmp&flashver=FMLE/3.0%20(compatible%3B%20FMSc/1.0)&swfurl=&tcurl=rtmp://120.24.210.62:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=547&call=update_publish&time=50×tamp=47296&name=room

      on_update: /v1/rtmp/on_update app=rtmp&flashver=FMLE/3.0%20(compatible%3B%20FMSc/1.0)&swfurl=&tcurl=rtmp://120.24.210.62:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=547&call=update_publish&time=60×tamp=57312&name=room

      on_update: /v1/rtmp/on_update app=rtmp&flashver=FMLE/3.0%20(compatible%3B%20FMSc/1.0)&swfurl=&tcurl=rtmp://120.24.210.62:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=547&call=update_publish&time=70×tamp=67264&name=room

      on_connect: /v1/rtmp/on_connect app=rtmp&flashver=&swfurl=&tcurl=rtmp://rtmp.wunaozai.com:8081/rtmp&pageurl=&addr=113.74.127.195&epoch=178380351&call=connect

      on_play: /v1/rtmp/on_play app=rtmp&flashver=&swfurl=&tcurl=rtmp://rtmp.wunaozai.com:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=557&call=play&name=room&start=4294966296&duration=0&reset=0&pass=12345

      on_play_done: /v1/rtmp/on_play_done app=rtmp&flashver=&swfurl=&tcurl=rtmp://rtmp.wunaozai.com:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=557&call=play_done&name=room&pass=12345

      on_done: /v1/rtmp/on_done app=rtmp&flashver=&swfurl=&tcurl=rtmp://rtmp.wunaozai.com:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=557&call=done&name=room&pass=12345

      on_update: /v1/rtmp/on_update app=rtmp&flashver=FMLE/3.0%20(compatible%3B%20FMSc/1.0)&swfurl=&tcurl=rtmp://120.24.210.62:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=547&call=update_publish&time=80×tamp=77344&name=room

      on_connect: /v1/rtmp/on_connect app=rtmp&flashver=&swfurl=&tcurl=rtmp://rtmp.wunaozai.com:8081/rtmp&pageurl=&addr=113.74.127.195&epoch=178388202&call=connect

      on_play: /v1/rtmp/on_play app=rtmp&flashver=&swfurl=&tcurl=rtmp://rtmp.wunaozai.com:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=563&call=play&name=room&start=4294966296&duration=0&reset=0&pass=12345

      on_done: /v1/rtmp/on_done app=rtmp&flashver=&swfurl=&tcurl=rtmp://rtmp.wunaozai.com:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=563&call=done&name=room&pass=12345

      on_play_done: /v1/rtmp/on_play_done app=rtmp&flashver=&swfurl=&tcurl=rtmp://rtmp.wunaozai.com:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=563&call=play_done&name=room&pass=12345

      on_update: /v1/rtmp/on_update app=rtmp&flashver=FMLE/3.0%20(compatible%3B%20FMSc/1.0)&swfurl=&tcurl=rtmp://120.24.210.62:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=547&call=update_publish&time=90×tamp=87360&name=room

      on_connect: /v1/rtmp/on_connect app=rtmp&flashver=&swfurl=&tcurl=rtmp://rtmp.wunaozai.com:8081/rtmp&pageurl=&addr=113.74.127.195&epoch=178396146&call=connect

      on_play: /v1/rtmp/on_play app=rtmp&flashver=&swfurl=&tcurl=rtmp://rtmp.wunaozai.com:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=569&call=play&name=room&start=4294966296&duration=0&reset=0&pass=12345

      on_done: /v1/rtmp/on_done app=rtmp&flashver=&swfurl=&tcurl=rtmp://rtmp.wunaozai.com:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=569&call=done&name=room&pass=12345

      on_play_done: /v1/rtmp/on_play_done app=rtmp&flashver=&swfurl=&tcurl=rtmp://rtmp.wunaozai.com:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=569&call=play_done&name=room&pass=12345

      on_connect: /v1/rtmp/on_connect app=rtmp&flashver=&swfurl=&tcurl=rtmp://rtmp.wunaozai.com:8081/rtmp&pageurl=&addr=113.74.127.195&epoch=178403666&call=connect

      on_play: /v1/rtmp/on_play app=rtmp&flashver=&swfurl=&tcurl=rtmp://rtmp.wunaozai.com:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=574&call=play&name=room&start=4294966296&duration=0&reset=0&pass=12345

      on_update: /v1/rtmp/on_update app=rtmp&flashver=FMLE/3.0%20(compatible%3B%20FMSc/1.0)&swfurl=&tcurl=rtmp://120.24.210.62:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=547&call=update_publish&time=100×tamp=97311&name=room

      on_update: /v1/rtmp/on_update app=rtmp&flashver=&swfurl=&tcurl=rtmp://rtmp.wunaozai.com:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=574&call=update_play&time=10×tamp=105504&name=room&pass=12345

      on_update: /v1/rtmp/on_update app=rtmp&flashver=FMLE/3.0%20(compatible%3B%20FMSc/1.0)&swfurl=&tcurl=rtmp://120.24.210.62:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=547&call=update_publish&time=110×tamp=107199&name=room

      on_done: /v1/rtmp/on_done app=rtmp&flashver=&swfurl=&tcurl=rtmp://rtmp.wunaozai.com:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=574&call=done&name=room&pass=12345

      on_play_done: /v1/rtmp/on_play_done app=rtmp&flashver=&swfurl=&tcurl=rtmp://rtmp.wunaozai.com:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=574&call=play_done&name=room&pass=12345

      on_update: /v1/rtmp/on_update app=rtmp&flashver=FMLE/3.0%20(compatible%3B%20FMSc/1.0)&swfurl=&tcurl=rtmp://120.24.210.62:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=547&call=update_publish&time=120×tamp=117344&name=room

      on_update: /v1/rtmp/on_update app=rtmp&flashver=FMLE/3.0%20(compatible%3B%20FMSc/1.0)&swfurl=&tcurl=rtmp://120.24.210.62:8081/rtmp&pageurl=&addr=113.74.127.195&clientid=547&call=update_publish&time=130×tamp=122815&name=room

      (3) 客戶端進(jìn)行推流,這里的推流軟件,我是使用這個 http://www.iavcast.com/html/ruanjian/iavcast.html

      使用Nginx-rtmp怎么實(shí)現(xiàn)一個直播媒體實(shí)時(shí)流效果

      (4) 移動端,我使用微信小程序里的 騰訊視頻云  這個小程序里面有RTMP測試

      使用Nginx-rtmp怎么實(shí)現(xiàn)一個直播媒體實(shí)時(shí)流效果

      (5) nginx-rtmp 日志

      ?

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      1 113.74.127.195 [05/Aug/2018:16:18:08 +0800] PUBLISH "rtmp" "room" "" - 2646572 687 "" "FMLE/3.0 (compatible; FMSc/1.0)" (1m 46s)

       2 113.74.127.195 [05/Aug/2018:16:19:49 +0800] PLAY "rtmp" "room" "pass=12345" - 413 542 "" "" (4s)

       3 113.74.127.195 [05/Aug/2018:16:19:57 +0800] PLAY "rtmp" "room" "pass=12345" - 413 542 "" "" (4s)

       4 113.74.127.195 [05/Aug/2018:16:20:05 +0800] PLAY "rtmp" "room" "pass=12345" - 413 542 "" "" (4s)

       5 113.74.127.195 [05/Aug/2018:16:20:13 +0800] PLAY "rtmp" "room" "pass=12345" - 413 542 "" "" (4s)

       6 113.74.127.195 [05/Aug/2018:16:30:39 +0800] PLAY "rtmp" "room" "pass=12345" - 413 871 "" "" (4s)

       7 113.74.127.195 [05/Aug/2018:16:30:54 +0800] PLAY "rtmp" "room" "pass=12345" - 413 647163 "" "" (12s)

       8 113.74.127.195 [05/Aug/2018:16:31:08 +0800] PUBLISH "rtmp" "room" "" - 4961955 409 "" "FMLE/3.0 (compatible; FMSc/1.0)" (1m 30s)

       9 113.74.127.195 [05/Aug/2018:23:06:47 +0800] PUBLISH "rtmp" "room" "" - 425763 529 "" "FMLE/3.0 (compatible; FMSc/1.0)" (13s)

      10 113.74.127.195 [05/Aug/2018:23:08:29 +0800] PLAY "rtmp" "room" "pass=12345" - 413 871 "" "" (4s)

      11 113.74.127.195 [05/Aug/2018:23:08:37 +0800] PLAY "rtmp" "room" "pass=12345" - 413 871 "" "" (4s)

      12 113.74.127.195 [05/Aug/2018:23:08:45 +0800] PLAY "rtmp" "room" "pass=12345" - 413 871 "" "" (4s)

      13 113.74.127.195 [05/Aug/2018:23:09:05 +0800] PLAY "rtmp" "room" "pass=12345" - 413 926026 "" "" (17s)

      14 113.74.127.195 [05/Aug/2018:23:09:30 +0800] PUBLISH "rtmp" "room" "" - 7061016 409 "" "FMLE/3.0 (compatible; FMSc/1.0)" (2m 20s)

      5. RTMP鑒權(quán)方式

      一般商用的話,為了防止被其他人使用和安全性考慮,所以需要對RTMP進(jìn)行鑒權(quán)處理。鑒權(quán)如果有特殊性的,可以通過修改nginx-rtmp-module的源代碼,然后進(jìn)行修改,其實(shí)就是增加個auth函數(shù),這個函數(shù)可以查詢數(shù)據(jù)庫之類的,然后決定返回0成功還是-1表示失敗。

      除了上面說到的方式,還可以通過簡單的方式,就是上面提到的HTTP回調(diào)。如果HTTP回調(diào)返回的HTTP狀態(tài)碼是2xx的,表示成功。如果是返回5xx的狀態(tài)碼,那么表示失敗。那樣的話,服務(wù)器就是斷開RTMP連接。

      就是在 rtmp://rtmp.wunaozai.com/rtmp_live/room?username=username&password=password

      至于實(shí)現(xiàn),這里暫時(shí)還沒有,其實(shí)就是在SpringBoot項(xiàng)目中對每個請求,判斷一下參數(shù)即可。如果后面有機(jī)會就詳細(xì)寫一下,關(guān)聯(lián)redis數(shù)據(jù)庫,實(shí)現(xiàn)房間號功能。但是可能不會寫了,因?yàn)閷?shí)際上不難。就是整個流程跑通還是比較多代碼要寫的,在博客里貼太多代碼有點(diǎn)不好。博客最主要的還是提供思路。實(shí)際實(shí)現(xiàn)就應(yīng)該在項(xiàng)目中實(shí)現(xiàn)了。

      6. 其他

      這里是一些配置說明和示例

      ?

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      59

      60

      61

      62

      63

      64

      65

      66

      67

      68

      69

      70

      71

      72

      73

      74

      75

      76

      77

      78

      79

      80

      81

      82

      83

      84

      85

      86

      87

      88

      89

      90

      91

      92

      93

      94

      95

      96

      97

      98

      99

      100

      101

      102

      103

      104

      105

      106

      107

      108

      109

      110

      111

      112

      113

      114

      115

      116

      117

      118

      119

      120

      121

      122

      123

      124

      125

      126

      127

      128

      129

      130

      131

      132

      133

      134

      135

      136

      137

      138

      139

      140

      141

      142

      143

      144

      145

      146

      147

      148

      149

      150

      151

      152

      153

      154

      155

      156

      157

      158

      159

      160

      161

      162

      163

      164

      165

      166

      167

      168

      169

      170

      171

      172

      173

      174

      175

      176

      177

      178

      179

      180

      181

      182

      183

      184

      185

      186

      187

      188

      189

      190

      191

      192

      193

      194

      195

      196

      197

      198

      199

      200

      201

      202

      203

      204

      205

      206

      207

      208

      209

      210

      211

      212

      213

      214

      215

      216

      217

      218

      219

      220

      221

      222

      223

      224

      225

      226

      227

      228

      229

      230

      231

      232

      233

      234

      235

      236

      237

      238

      239

      240

      241

      242

      243

      244

      245

      246

      247

      248

      249

      Application 創(chuàng)建一個RTMP應(yīng)用,這里有點(diǎn)區(qū)別于http的location

      Timeout 60s

      stocket超時(shí),可以配合keepalive和ping值來實(shí)現(xiàn)不讓服務(wù)器端長期處于監(jiān)聽連接客戶端狀態(tài),實(shí)現(xiàn)快速關(guān)掉socket

      Ping 3m

      ping_timeout 30s

      RTMP ping用于檢查活動連接的協(xié)議。發(fā)送一個特殊的包遠(yuǎn)程連接,在ping_timeout指定時(shí)間內(nèi)期待一個回復(fù),如果沒有收到回復(fù),連接斷開

      max_streams 32

      設(shè)置RTMP流的最大數(shù)目,單一流數(shù)據(jù)最大限制,一般默認(rèn)的32就可以了

      ack_window 5000000

      設(shè)置RTMP窗口的大小

      chunk_size 4096

      數(shù)據(jù)塊大小 設(shè)置值越大CPU負(fù)載就越小

      max_queue

      最大隊(duì)列數(shù),一般默認(rèn)即可

      max_message 1M

      輸入數(shù)據(jù)消息的最大大小。所有輸入數(shù)據(jù)消息都會保存在內(nèi)存中,等待完成流媒體轉(zhuǎn)發(fā)。在理論上傳入的消息可以是非常大,對服務(wù)器穩(wěn)定性影響較大,所以一般默認(rèn)即可。

      out_queue

      out_cork

      Buflen 5s

      設(shè)置默認(rèn)緩沖區(qū)長度。通常客戶端發(fā)送播放前RTMP set_buflen命令并重置該設(shè)置

      訪問控制

      Access

      Allow/deny

      允許來自指定地址或者所有地址發(fā)布/播放

      Allow public 127.0.0.1

      Deny publish all;

      Allow play 192.168.0.0/24

      Deny play all;

      Exec命令

      Exce

      exec_options on;

      啟動一些exec指令選項(xiàng),通過一些exec事件來干預(yù)整個RTMP流

      可以仔細(xì)一些外部編解碼功能

      Exec ffmpeg -i rtmp://localhost?src/$name -vcodec libx264 -vprofile baseline -g 10 -s 300x200 -acodec libfaac -ar 44100 -ac 1 -f flv rtmp://localhost/hls/$name 2>> /var/log/ffmpeg-$name.log;

      Exce_statc

      類似exce,屬于靜態(tài)命令,不支持傳遞上下文參數(shù)

      Exec_kill_signal term;

      Exec_kill_signal user1;

      Exec_kill_signal 3;

      Exec_pull

      Exec_push

      Exec_publish

      指定與參數(shù)外部命令要在發(fā)布事件執(zhí)行。

      Exec_play

      指定與要在打開事件執(zhí)行外部命令

      Exec_play_done

      指定要在打開完成事件執(zhí)行外部命令

      Exec_publish_done

      Exec_record_done

      例子

      exec_play bash -c “echo $addr $pageurl >> /tmp/clients

      Exec_publish base -c “echo $addr $flashver >> /tmp/publishers

      轉(zhuǎn)錄

      Exec_record_done ffmpeg -y -i $path -acodec libmp31ame -ar 44100 -ac 1 -vcodec libx264 $dirname/$basename.mp4

      Live 模式

      Live on

      切換直播模式,即一對多廣播

      Meta on/copy/off

      奇幻發(fā)送元數(shù)據(jù)到客戶端 默認(rèn)on

      Interleave on/off

      切換交叉模式。在該模式下,音視頻會在同一個RTMPchunk流中傳輸。默認(rèn)為off

      wait_key on|off

      使視頻流從一個關(guān)鍵幀開始,默認(rèn)為off

      wait_video on|off

      在一個視頻幀發(fā)送前禁用音頻。默認(rèn)off

      通過wait_key/wait_video進(jìn)行組合以使客戶端可以收到具有所有其他數(shù)據(jù)的視頻關(guān)鍵幀。但這樣會增加連接延遲。不過可以通過編解碼器中調(diào)整關(guān)鍵幀間隔來減少延遲。

      Publish_notify on

      發(fā)送NetStream.Publish.Start和NetStream.Publish.Stop給用戶,默認(rèn)off

      Drop_idle_publisher 10s

      終止指定時(shí)間內(nèi)閑置(沒有音頻、視頻)的發(fā)布連接,默認(rèn)為off。注意這個僅僅對于發(fā)布模式的連接起作用(發(fā)送publish命令之后)

      Sync 10ms

      同步音視頻流。如果用戶帶寬不足以接收發(fā)布率,服務(wù)器會丟棄一些幀。這將導(dǎo)致同步問題。當(dāng)時(shí)間戳差超過sync指定值,將會發(fā)送一個絕對幀來解決這個問題,默認(rèn)為300ms

      Play_restart off

      使nginx-rtmp能夠在發(fā)布啟動或者停止時(shí)發(fā)送NetStream.Play.Start 和 NetStrem.Play.Stop到每個用戶。如果關(guān)閉的話,那么每個用戶就只能在回放的開始結(jié)束時(shí)收到該通知了。默認(rèn)為on

      Record 模式

      Record off|all|audio|video|keyframes|manual

      切換錄制模式,流可以被記錄到flv文件

      Off 不錄制

      All 錄制音頻和視頻

      Audio

      Video

      Keyframes 只錄制關(guān)鍵視頻幀

      Manual 不自動啟動錄制,使用控制接口來進(jìn)行啟動和停止

      Record_path /tmp/rec

      指定錄制的flv文件存放目錄

      Record_suffix -%d-%b-%y-%T.flv

      錄制后綴strftime格式

      Record_unique on|off

      是否添加時(shí)間戳到錄制文件,防止文件被覆蓋,默認(rèn)off

      record_append on|off

      切換文件附加模式。開啟后,錄制時(shí)將新數(shù)據(jù)附加到舊文件后面。默認(rèn)off

      record_lock on|off

      鎖定文件,調(diào)用系統(tǒng)的fcntl

      record_max_size 128K

      設(shè)置錄制文件的最大值

      Record_max_frames 2

      設(shè)置每個錄制文件的視頻幀最大數(shù)量

      Record_interval 1s/15m

      在這個指令指定的時(shí)間之后重啟錄制。默認(rèn)off設(shè)置為0表示錄制中無延遲。如果record_unique為off時(shí)所有的記錄都會被寫到同一個文件中。否則就會以時(shí)間戳區(qū)分在不同文件

      Record_notify on|off

      奇幻當(dāng)定義錄制啟動或者停止文件時(shí)發(fā)送NetStream.Record.Start和NetStream.Record.Stop狀態(tài)信息onStatus到發(fā)布者。

      應(yīng)用

      Application rtmp{

      Live on;

      Record all;

      Record_path /var/rec;

      Recorder audio{

      Record audio;

      Record_suffix .audio.flv;

      }

      Recorder chunked{

      Record all;

      Record_interval 15s;

      Record_path /var/rec/chunked;

      }

      }

      創(chuàng)建錄制塊。可以在單個application中創(chuàng)建多個記錄 。

      VOD媒體

      Play dir|http://loc

      播放指定目錄或者HTTP地址的flv或者mp4文件。注意HTTP播放是要在整個文件下載完后才開始播放。同一個play可以播放多個視頻地址(用于負(fù)載)。MP4格式要在編解碼都被RTMP支持才可以播放。一般常見的就是H264/AAC

      Application vod{

      Play /var/flvs;

      }

      Application vod_http{

      Play http://localhost/vod;

      }

      Play_temp_path /www

      設(shè)置遠(yuǎn)程VOD文件完全下載之后復(fù)制于play_temp_path之后的路徑。空值的話禁用此功能。

      Play_local_path dir

      在播放前設(shè)置遠(yuǎn)程存儲VOD文件路徑,默認(rèn)/tmp

      Play_local_path /tmp/videos;

      Paly /tmp/videos http://localhost/videos

      表示播放視頻,先播放本地緩存,如果沒有的話,從localhost/videos下載到本地/tmp/videos后,在進(jìn)行播放

      Relay模式

      Pull url [key=value]

      創(chuàng)建pull中繼。主要是從遠(yuǎn)程服務(wù)器拉取流媒體。并進(jìn)行重新發(fā)布。

      Url語法 [rtmp://]host[:port][/app[/playpath]] 如果application找不到那么將會使用本地application名,如果找不到playpath那么久用當(dāng)前流名稱。

      參數(shù)如下(使用Key=Value方式)

      app 明確application名

      Name 捆綁到relay的bending流名稱。如果為空,那么會使用application中所有本地流

      tcUrl

      pageUrl

      swfUrl

      flashVer

      playPath

      Live

      Start

      Stop

      Static

      Pull rtmp://cdn.example.com/main/ch?id=1234 name=channel;

      Push url [key=value]

      與pull類似,只是push推送發(fā)布流到遠(yuǎn)程服務(wù)器。

      Push_reconnect 1s

      在斷開連接后,在push重新連接錢等待的時(shí)間,默認(rèn)3秒

      Session_relay on;

      切換會話relay模式。在這種情況下關(guān)閉時(shí)relay銷毀。

      Notify 模式

      這個功能主要是提供HTTP回調(diào)。當(dāng)發(fā)送一些連接操作是,一個HTTP請求異步發(fā)送。命令處理會被暫停掛起,知道它返回結(jié)果代碼。當(dāng)HTTP返回2xx成功狀態(tài)碼時(shí),RTMP會話繼續(xù)。3xx狀態(tài)碼會使RTMP重定向到另一個從HTTP返回頭獲取到的application,否則連接丟失。其他狀態(tài)碼,連接斷開。目前用來做簡單的鑒權(quán)。

      On_connect url

      設(shè)置HTTP連接回調(diào)。當(dāng)客戶分發(fā)連接命令時(shí)。

      例子:

      On_connect http://localhost/my_auth;

      Location /on_connect{

      If($arg_flashver != “my_secret_flashver”){

      Rewrite ^.*$ fallback?permanent;

      }

      }

      On_play url

      設(shè)置HTTP播放回調(diào)。分發(fā)客戶分發(fā)播放命令時(shí)。

      http {

      Location /redirect {

      Rewrite ^.*$ newname?permanent;

      }

      }

      Rtmp{

      Application myqpp{

      Live on;

      On_play http://localhost/redirect;

      }

      }

      On_publish

      On_doone

      On_play_done

      On_publish_done

      On_record_done

      On_update

      Notify_update_timeout

      設(shè)置on_update回調(diào)時(shí)間

      Notify_update_strict on|off

      Notify_relay_redirect on

      Notify_method get

      設(shè)置HTTP方法通知,默認(rèn)是application/x-www-form-urlencodeed 的POST內(nèi)容類型。有時(shí)候可能會需要GET方法,在nginx的http{}部分處理調(diào)用。在這種情況下可以使用arg_*變量去訪問參數(shù)。

      例如如果是method為get時(shí)

      Location /on_play{

      If($arg_pageUrl ~* localhost){

      Return 200;

      }

      Return 500;

      }

      HLS 模式

      Hls on|off

      使application 切換HLS協(xié)議直播

      Hls_path /tmp/hls;

      設(shè)置HLS播放列表和分段目錄。這一目錄必須在nginx啟動前就已經(jīng)存在。

      Hls_fragment 15s;

      設(shè)置HLS分段長度,默認(rèn)5秒,這個跟直播延遲有比較大的影響

      Hls_playlist_length 20m;

      設(shè)置HLS播放列表長度,默認(rèn)30秒。這個跟直播緩存有關(guān)。

      Hls_sync time

      設(shè)置HLS時(shí)間戳同步閾值。默認(rèn)2ms。這個功能防止由低分辨率RTMP(1KHz)轉(zhuǎn)換到高分辨率MPEG-TS(90KHz)之后出現(xiàn)的噪音。

      Hls_continuous on|off

      切換HLS連續(xù)模式,默認(rèn)off。

      Hls_nested on|off

      切換HLS嵌套模式。默認(rèn)off。

      Hls_cleanup on|off;

      切換HLS清理。默認(rèn)on

      AccessLog日志

      Access_log off|path [format_name]

      Log_format new_format ‘$remote_addr';

      Access_log logs/rtmp_access.log new_format;

      Log_format 指定日志格式

      創(chuàng)建指定的日志格式。日志格式看起來很像 nginx HTTP 日志格式。日志格式里支持的幾個變量有:

      * connection - 連接數(shù)。

      * remote_addr - 客戶端地址。

      * app - application 名。

      * name - 上一個流名。

      * args - 上一個流播放/發(fā)布參數(shù)。

      * flashver - 客戶端 flash 版本。

      * swfurl - 客戶端 swf url。

      * tcurl - 客戶端 tcUrl。

      * pageurl - 客戶端頁面 url。

      * command - 客戶端發(fā)送的播放/發(fā)布命令:NONE、PLAY、PUBLISH、PLAY+PUBLISH。

      * bytes_sent - 發(fā)送到客戶端的字節(jié)數(shù)。

      * bytes_received - 從客戶端接收到的字節(jié)數(shù)。

      * time_local - 客戶端連接結(jié)束的本地時(shí)間。

      * session_time - 持續(xù)連接的秒數(shù)。

      * session_readable_time - 在可讀格式下的持續(xù)時(shí)間。

      默認(rèn)的日志格式叫做 combined。這里是這一格式的定義:

      $remote_addr [$time_local] $command "$app" "$name" "$args" -

      $bytes_received $bytes_sent "$pageurl" "$flashver" ($session_readable_time)

      Limits限制

      max_connections number;

      設(shè)置rtmp引擎最大連接數(shù),默認(rèn)off

      Application hls{

      Live on;

      Hls on;

      Hls_path /tmp/hls;

      Hls_fragment 15s;

      }

      關(guān)于使用Nginx-rtmp怎么實(shí)現(xiàn)一個直播媒體實(shí)時(shí)流效果問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。

      原文鏈接:https://www.cnblogs.com/wunaozai/p/9427730.html


      文章名稱:使用Nginx-rtmp怎么實(shí)現(xiàn)一個直播媒體實(shí)時(shí)流效果
      URL分享:http://www.ef60e0e.cn/article/jcjdio.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        扶余县| 和平区| 武宁县| 阿瓦提县| 铜川市| 河曲县| 洪湖市| 喀什市| 垣曲县| 武威市| 中方县| 乌什县| 西宁市| 广元市| 津南区| 马关县| 城口县| 蓬安县| 陕西省| 桑植县| 拉萨市| 昌都县| 南部县| 宜州市| 龙川县| 岗巴县| 泊头市| 灵寿县| 皋兰县| 禹城市| 邯郸市| 扎囊县| 宝应县| 香格里拉县| 东宁县| 广南县| 三台县| 油尖旺区| 衡山县| 喜德县| 兴宁市|