亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > Nginx > 正文

Nginx-rtmp實現直播媒體實時流效果

2024-08-30 12:29:49
字體:
來源:轉載
供稿:網友

0. 前言

  這段時間在搭建一個IPCamera項目服務器。視頻點對點通話,客戶端會查看設備端的音視頻實時流。為了省流量,是通過P2P進行穿透。但是由于NAT設備的原因和IPV4的枯竭。有些設備是無法進行點對點傳輸實時流。所以需要進行服務器轉發。這里為了快速實現原型,同時參考現在主流的流媒體協議。發現很多使用的是RTMP協議。

  下圖是總體設計圖,為了整合多平臺,會自建RTMP流媒體服務器和使用云廠商SaaS的RTMP流媒體服務。但是由于有時候會傳輸一些非流媒體數據,需要傳輸一些二進制文件,所以會需要自定義媒體轉發服務。

  以下是我實際項目中,用到的架構實現流程圖。

Nginx,rtmp,直播媒體,實時流

 1. 客戶端A無法進行P2P穿透,請求業務服務器要進行轉發。 2. 業務服務器根據客戶端A,請求類型,返回對應的轉發服務器地址和對應的房間號RoomID/Token等信息 3. 上述請求類型,可以是請求自建RTMP流媒體服務,購買于云廠商RTMP流媒體服務或者自定義協議媒體轉發服務 4. 客戶端A得到業務服務器返回的媒體服務器地址和RoomID/Token 5. 通過信令服務器或者MQTT服務器,把對應的媒體服務器地址和RoomID/Token告訴另一端客戶端B 6. 客戶端A和客戶端B同時進入相同房間Room,客戶端A進行推流,客戶端B進行拉流 7. 其他媒體信息,如編解碼格式,清晰度,播放,暫停,拍照等命令,通過上述信令或MQTT服務器進行命令控制

1. 編譯Nginx

  RTMP流媒體服務器,現成的開源方案有很多,有SRS,Red5,wowoza,FMS等,我這里使用的是Nginx的rtmp插件實現實時流轉發。

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

  重新編譯nginx

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

2. 配置Nginx.conf

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

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異步通知回調

   Nginx-rtmp-module插件實現了針對RTMP協議的一些命令做了事件通知。這里我通過一個簡單的SpringBoot項目,快速搭建一個HTTP服務來接收RTMP的回調。

 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. 運行效果

  (1) 啟動nginx和SpringBoot

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

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=connecton_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=liveon_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=roomon_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=roomon_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=roomon_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=connecton_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=liveon_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=roomon_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=roomon_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=roomon_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=roomon_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=roomon_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=roomon_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=roomon_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=connecton_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=12345on_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=12345on_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=12345on_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=roomon_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=connecton_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=12345on_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=12345on_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=12345on_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=roomon_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=connecton_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=12345on_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=12345on_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=12345on_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=connecton_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=12345on_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=roomon_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=12345on_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=roomon_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=12345on_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=12345on_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=roomon_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) 客戶端進行推流,這里的推流軟件,我是使用這個 http://www.iavcast.com/html/ruanjian/iavcast.html

Nginx,rtmp,直播媒體,實時流

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

Nginx,rtmp,直播媒體,實時流

  (5) nginx-rtmp 日志

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鑒權方式

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

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

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

  至于實現,這里暫時還沒有,其實就是在SpringBoot項目中對每個請求,判斷一下參數即可。如果后面有機會就詳細寫一下,關聯Redis數據庫,實現房間號功能。但是可能不會寫了,因為實際上不難。就是整個流程跑通還是比較多代碼要寫的,在博客里貼太多代碼有點不好。博客最主要的還是提供思路。實際實現就應該在項目中實現了。

6. 其他

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

 

Application 創建一個RTMP應用,這里有點區別于http的locationTimeout 60s stocket超時,可以配合keepalive和ping值來實現不讓服務器端長期處于監聽連接客戶端狀態,實現快速關掉socketPing 3mping_timeout 30sRTMP ping用于檢查活動連接的協議。發送一個特殊的包遠程連接,在ping_timeout指定時間內期待一個回復,如果沒有收到回復,連接斷開max_streams 32設置RTMP流的最大數目,單一流數據最大限制,一般默認的32就可以了ack_window 5000000設置RTMP窗口的大小chunk_size 4096數據塊大小 設置值越大CPU負載就越小max_queue最大隊列數,一般默認即可max_message 1M輸入數據消息的最大大小。所有輸入數據消息都會保存在內存中,等待完成流媒體轉發。在理論上傳入的消息可以是非常大,對服務器穩定性影響較大,所以一般默認即可。out_queueout_corkBuflen 5s設置默認緩沖區長度。通??蛻舳税l送播放前RTMP set_buflen命令并重置該設置訪問控制AccessAllow/deny允許來自指定地址或者所有地址發布/播放Allow public 127.0.0.1Deny publish all;Allow play 192.168.0.0/24Deny play all;Exec命令Exce exec_options on;啟動一些exec指令選項,通過一些exec事件來干預整個RTMP流可以仔細一些外部編解碼功能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,屬于靜態命令,不支持傳遞上下文參數Exec_kill_signal term;Exec_kill_signal user1;Exec_kill_signal 3;Exec_pull Exec_pushExec_publish指定與參數外部命令要在發布事件執行。Exec_play指定與要在打開事件執行外部命令Exec_play_done指定要在打開完成事件執行外部命令Exec_publish_doneExec_record_done例子exec_play bash -c “echo $addr $pageurl >> /tmp/clients”Exec_publish base -c “echo $addr $flashver >> /tmp/publishers”轉錄Exec_record_done ffmpeg -y -i $path -acodec libmp31ame -ar 44100 -ac 1 -vcodec libx264 $dirname/$basename.mp4Live 模式Live on切換直播模式,即一對多廣播Meta on/copy/off奇幻發送元數據到客戶端 默認onInterleave on/off切換交叉模式。在該模式下,音視頻會在同一個RTMPchunk流中傳輸。默認為offwait_key on|off使視頻流從一個關鍵幀開始,默認為offwait_video on|off在一個視頻幀發送前禁用音頻。默認off通過wait_key/wait_video進行組合以使客戶端可以收到具有所有其他數據的視頻關鍵幀。但這樣會增加連接延遲。不過可以通過編解碼器中調整關鍵幀間隔來減少延遲。Publish_notify on發送NetStream.Publish.Start和NetStream.Publish.Stop給用戶,默認offDrop_idle_publisher 10s終止指定時間內閑置(沒有音頻、視頻)的發布連接,默認為off。注意這個僅僅對于發布模式的連接起作用(發送publish命令之后)Sync 10ms同步音視頻流。如果用戶帶寬不足以接收發布率,服務器會丟棄一些幀。這將導致同步問題。當時間戳差超過sync指定值,將會發送一個絕對幀來解決這個問題,默認為300msPlay_restart off使nginx-rtmp能夠在發布啟動或者停止時發送NetStream.Play.Start 和 NetStrem.Play.Stop到每個用戶。如果關閉的話,那么每個用戶就只能在回放的開始結束時收到該通知了。默認為onRecord 模式Record off|all|audio|video|keyframes|manual切換錄制模式,流可以被記錄到flv文件Off 不錄制All 錄制音頻和視頻AudioVideoKeyframes 只錄制關鍵視頻幀Manual 不自動啟動錄制,使用控制接口來進行啟動和停止Record_path /tmp/rec指定錄制的flv文件存放目錄Record_suffix -%d-%b-%y-%T.flv錄制后綴strftime格式Record_unique on|off是否添加時間戳到錄制文件,防止文件被覆蓋,默認offrecord_append on|off切換文件附加模式。開啟后,錄制時將新數據附加到舊文件后面。默認offrecord_lock on|off鎖定文件,調用系統的fcntlrecord_max_size 128K設置錄制文件的最大值Record_max_frames 2設置每個錄制文件的視頻幀最大數量Record_interval 1s/15m在這個指令指定的時間之后重啟錄制。默認off設置為0表示錄制中無延遲。如果record_unique為off時所有的記錄都會被寫到同一個文件中。否則就會以時間戳區分在不同文件Record_notify on|off奇幻當定義錄制啟動或者停止文件時發送NetStream.Record.Start和NetStream.Record.Stop狀態信息onStatus到發布者。應用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;}}創建錄制塊??梢栽趩蝹€application中創建多個記錄 。VOD媒體Play dir|http://loc 播放指定目錄或者HTTP地址的flv或者mp4文件。注意HTTP播放是要在整個文件下載完后才開始播放。同一個play可以播放多個視頻地址(用于負載)。MP4格式要在編解碼都被RTMP支持才可以播放。一般常見的就是H264/AACApplication vod{Play /var/flvs;}Application vod_http{Play http://localhost/vod;}Play_temp_path /www設置遠程VOD文件完全下載之后復制于play_temp_path之后的路徑。空值的話禁用此功能。Play_local_path dir在播放前設置遠程存儲VOD文件路徑,默認/tmpPlay_local_path /tmp/videos;Paly /tmp/videos http://localhost/videos表示播放視頻,先播放本地緩存,如果沒有的話,從localhost/videos下載到本地/tmp/videos后,在進行播放Relay模式Pull url [key=value]創建pull中繼。主要是從遠程服務器拉取流媒體。并進行重新發布。Url語法 [rtmp://]host[:port][/app[/playpath]] 如果application找不到那么將會使用本地application名,如果找不到playpath那么久用當前流名稱。參數如下(使用Key=Value方式)app 明確application名Name 捆綁到relay的bending流名稱。如果為空,那么會使用application中所有本地流tcUrlpageUrlswfUrlflashVerplayPathLiveStartStopStaticPull rtmp://cdn.example.com/main/ch?id=1234 name=channel;Push url [key=value]與pull類似,只是push推送發布流到遠程服務器。Push_reconnect 1s在斷開連接后,在push重新連接錢等待的時間,默認3秒Session_relay on;切換會話relay模式。在這種情況下關閉時relay銷毀。Notify 模式這個功能主要是提供HTTP回調。當發送一些連接操作是,一個HTTP請求異步發送。命令處理會被暫停掛起,知道它返回結果代碼。當HTTP返回2xx成功狀態碼時,RTMP會話繼續。3xx狀態碼會使RTMP重定向到另一個從HTTP返回頭獲取到的application,否則連接丟失。其他狀態碼,連接斷開。目前用來做簡單的鑒權。On_connect url設置HTTP連接回調。當客戶分發連接命令時。例子:On_connect http://localhost/my_auth;Location /on_connect{If($arg_flashver != “my_secret_flashver”){Rewrite ^.*$ fallback?permanent;}}On_play url設置HTTP播放回調。分發客戶分發播放命令時。http {Location /redirect {Rewrite ^.*$ newname?permanent;}}Rtmp{Application myqpp{Live on;On_play http://localhost/redirect;}}On_publishOn_dooneOn_play_doneOn_publish_doneOn_record_doneOn_updateNotify_update_timeout設置on_update回調時間Notify_update_strict on|offNotify_relay_redirect onNotify_method get設置HTTP方法通知,默認是application/x-www-form-urlencodeed 的POST內容類型。有時候可能會需要GET方法,在nginx的http{}部分處理調用。在這種情況下可以使用arg_*變量去訪問參數。例如如果是method為get時Location /on_play{If($arg_pageUrl ~* localhost){Return 200;}Return 500;}HLS 模式Hls on|off使application 切換HLS協議直播Hls_path /tmp/hls;設置HLS播放列表和分段目錄。這一目錄必須在nginx啟動前就已經存在。Hls_fragment 15s;設置HLS分段長度,默認5秒,這個跟直播延遲有比較大的影響Hls_playlist_length 20m;設置HLS播放列表長度,默認30秒。這個跟直播緩存有關。Hls_sync time設置HLS時間戳同步閾值。默認2ms。這個功能防止由低分辨率RTMP(1KHz)轉換到高分辨率MPEG-TS(90KHz)之后出現的噪音。Hls_continuous on|off切換HLS連續模式,默認off。Hls_nested on|off切換HLS嵌套模式。默認off。Hls_cleanup on|off;切換HLS清理。默認onAccessLog日志Access_log off|path [format_name]Log_format new_format ‘$remote_addr';Access_log logs/rtmp_access.log new_format;Log_format 指定日志格式創建指定的日志格式。日志格式看起來很像 nginx HTTP 日志格式。日志格式里支持的幾個變量有:* connection - 連接數。* remote_addr - 客戶端地址。* app - application 名。* name - 上一個流名。* args - 上一個流播放/發布參數。* flashver - 客戶端 flash 版本。* swfurl - 客戶端 swf url。* tcurl - 客戶端 tcUrl。* pageurl - 客戶端頁面 url。* command - 客戶端發送的播放/發布命令:NONE、PLAY、PUBLISH、PLAY+PUBLISH。* bytes_sent - 發送到客戶端的字節數。* bytes_received - 從客戶端接收到的字節數。* time_local - 客戶端連接結束的本地時間。* session_time - 持續連接的秒數。* session_readable_time - 在可讀格式下的持續時間。默認的日志格式叫做 combined。這里是這一格式的定義:$remote_addr [$time_local] $command "$app" "$name" "$args" - $bytes_received $bytes_sent "$pageurl" "$flashver" ($session_readable_time)Limits限制max_connections number;設置rtmp引擎最大連接數,默認offApplication hls{Live on;Hls on;Hls_path /tmp/hls;Hls_fragment 15s;}

總結

以上所述是小編給大家介紹的Nginx-rtmp實現直播媒體實時流效果,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


注:相關教程知識閱讀請移步到服務器教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美一区二区影院| 国产噜噜噜噜久久久久久久久| 国产精品大片wwwwww| 久久精品99国产精品酒店日本| 国产精品久久久久久久久久久不卡| 日本道色综合久久影院| 精品一区二区三区三区| 日韩免费观看视频| 日韩人在线观看| …久久精品99久久香蕉国产| 最近2019年手机中文字幕| 久久久欧美精品| 毛片精品免费在线观看| 国产999视频| 亚洲福利视频免费观看| 亚洲精品自拍第一页| 国产精品羞羞答答| 久久人人看视频| 美女少妇精品视频| 欧美精品久久久久久久久久| 久久视频国产精品免费视频在线| 久久精品国产欧美激情| 少妇高潮 亚洲精品| 久久久久久久国产| 久久精品99久久久香蕉| 久久天天躁狠狠躁夜夜躁2014| 亚洲国产精久久久久久| 亚洲a成v人在线观看| 亚洲专区在线视频| 日韩av综合网| 国产精品久久久久久久久久久久久久| 日韩激情av在线播放| 人九九综合九九宗合| 亚洲精品视频播放| 亚洲国产欧美一区二区丝袜黑人| 久久精品国产v日韩v亚洲| 国产日韩在线看片| 国产亚洲精品综合一区91| 亚洲一区二区免费在线| 4388成人网| 国产第一区电影| 成人国内精品久久久久一区| 91影院在线免费观看视频| 日韩国产高清视频在线| 国产精品自产拍高潮在线观看| 日韩电影中文字幕在线| 亚洲人成在线电影| 亚洲欧洲黄色网| 国内精品美女av在线播放| 亚洲欧美中文日韩在线v日本| 国内精品模特av私拍在线观看| 亚洲黄色在线观看| 91国自产精品中文字幕亚洲| 国产成人精品午夜| 国产福利视频一区二区| 精品久久久久久久久久久久久| 久久成人18免费网站| 久久久999精品| 欧美色视频日本版| 欧美精品aaa| 性欧美xxxx交| 日韩av成人在线观看| 国产精品福利在线观看网址| 韩国19禁主播vip福利视频| 国产精品一区二区久久久久| 欧美成人精品在线| 久久精品久久久久久| 97在线视频国产| 日韩精品中文字幕在线播放| 亚洲黄色av女优在线观看| 国产精品极品美女在线观看免费| 91网站在线看| 欧美在线一级va免费观看| 国产成人福利视频| 欧美影院久久久| 欧美亚洲一区在线| 久久久久久久999精品视频| 欧美日产国产成人免费图片| 成人激情电影一区二区| 亚洲精品成人久久电影| 日韩天堂在线视频| 国产一区二区三区高清在线观看| yw.139尤物在线精品视频| 国产精品草莓在线免费观看| 麻豆成人在线看| 91视频-88av| 国内精品400部情侣激情| 国产精品www网站| 亚洲国产精品va在线看黑人| 欧美日韩日本国产| 日韩欧美国产免费播放| 久久久久久久久爱| 91影视免费在线观看| 少妇高潮久久77777| 精品久久久国产| 国产精品黄色av| 欧美极品第一页| 国产精品成av人在线视午夜片| 国产欧美精品xxxx另类| 欧美高跟鞋交xxxxxhd| …久久精品99久久香蕉国产| 最近2019年好看中文字幕视频| 一区二区三区四区视频| 夜夜嗨av色一区二区不卡| www.午夜精品| 亚洲人成电影网站色xx| 亚洲精品久久久一区二区三区| 欧美性在线观看| 日韩高清人体午夜| 日本乱人伦a精品| 亚洲丝袜一区在线| 欧美视频精品一区| 国产精品xxx视频| 国产99在线|中文| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲自拍偷拍一区| 亚洲天堂男人天堂| 亚洲精品日韩久久久| 欧美日韩在线另类| 91精品国产自产在线观看永久| 成人免费大片黄在线播放| 国产亚洲精品美女久久久| 精品国产拍在线观看| 中文字幕精品久久久久| 国产精品久久久久久久午夜| 久久成人18免费网站| 亚洲人a成www在线影院| 欧美特级www| 亚洲午夜精品久久久久久性色| 国产精品v日韩精品| 亚洲国产福利在线| 欧美理论片在线观看| 亚洲人成毛片在线播放| 欧美在线免费看| 欧美网站在线观看| 亚洲精品国产精品自产a区红杏吧| 国产精品日韩久久久久| 久久久久一本一区二区青青蜜月| 91久久综合亚洲鲁鲁五月天| 亚洲国产高清福利视频| 日韩精品中文字幕视频在线| 国产精品午夜国产小视频| 久热国产精品视频| 亚洲欧美在线免费观看| 欧美成人亚洲成人日韩成人| 91社影院在线观看| 久久精品99国产精品酒店日本| xx视频.9999.com| 欧美—级a级欧美特级ar全黄| 国产视频亚洲视频| 91亚洲精品一区| 黑人与娇小精品av专区| 亚洲精品suv精品一区二区| 亚洲综合一区二区不卡| 777国产偷窥盗摄精品视频| 亚洲国产精品电影在线观看| 国产丝袜高跟一区| 欧美最猛性xxxx| 亚洲xxxx妇黄裸体| 欧美午夜久久久| 久久久999精品视频| 久久99精品久久久久久噜噜| 国产一区二区三区网站| 九色91av视频|