arut / nginx-rtmp-module

NGINX-based Media Streaming Server
http://nginx-rtmp.blogspot.com
BSD 2-Clause "Simplified" License
13.36k stars 3.51k forks source link

Failed to relay on_publish #1747

Closed dcarrion87 closed 9 months ago

dcarrion87 commented 9 months ago

I'm testing out some of on_publish redirect capabilities. I'm testing at the moment with separate frontend and backend nginx servers for extending some dynamic features. However, the stream never starts.

front nginx server:

load_module modules/ngx_rtmp_module.so;
events {}
error_log /dev/stdout info;

http {
  server {
    listen 80;
    location /on_connect {
        rewrite ^.*$ default? permanent;
    }
    location /on_publish {
        rewrite ^.*$ rtmp://10.0.1.123:1936/back? permanent;
    }
  }
}

rtmp {
  server {
    listen 1935;
    notify_method get;
    on_connect http://localhost/on_connect;
    application default {
        live off;
        on_publish http://localhost/on_publish;
    }
  }
}

back nginx server:

load_module modules/ngx_rtmp_module.so;
events {}
error_log /dev/stdout info;
rtmp {
  server {
    listen 1936;
    application back {
      live on;
      play on;
      record all;
      record_suffix .flv;
      record_path /temp;
      record_unique on;
    }
  }
}

container logs:

muck-nginx-front-1  | 2023/12/09 13:55:00 [info] 250#250: *7 client connected '172.22.0.4'
muck-nginx-front-1  | 2023/12/09 13:55:00 [info] 250#250: *7 connect: app='blablablablabla' args='' flashver='FMLE/3.0 (compatible; Lavf58.76' swf_url='' tc_url='rtmp://nginx-front:1935/blablablablabla' page_url='' acodecs=0 vcodecs=0 object_encoding=0, client: 172.22.0.4, server: 0.0.0.0:1935
muck-nginx-front-1  | 2023/12/09 13:55:00 [info] 250#250: *7 notify: connect 'localhost/on_connect', client: 172.22.0.4, server: 0.0.0.0:1935
muck-nginx-front-1  | 2023/12/09 13:55:00 [info] 250#250: *7 notify: connect redirect to 'default', client: 172.22.0.4, server: 0.0.0.0:1935
muck-nginx-front-1  | 2023/12/09 13:55:00 [info] 250#250: *7 createStream, client: 172.22.0.4, server: 0.0.0.0:1935
muck-nginx-front-1  | 2023/12/09 13:55:01 [info] 250#250: *7 publish: name='' args='' type=live silent=0, client: 172.22.0.4, server: 0.0.0.0:1935
muck-nginx-front-1  | 2023/12/09 13:55:01 [info] 250#250: *7 notify: publish 'localhost/on_publish', client: 172.22.0.4, server: 0.0.0.0:1935
muck-nginx-front-1  | 2023/12/09 13:55:01 [error] 250#250: *7 notify: push '' to 'rtmp://172.22.0.2:1936/back', client: 172.22.0.4, server: 0.0.0.0:1935
muck-nginx-front-1  | 2023/12/09 13:55:01 [info] 250#250: *7 relay: create push name='' app='' playpath='' url='172.22.0.2:1936/back', client: 172.22.0.4, server: 0.0.0.0:1935
muck-nginx-back-1   | 2023/12/09 13:55:01 [info] 7#7: *2 client connected '172.22.0.3'
muck-nginx-back-1   | 2023/12/09 13:55:01 [info] 7#7: *2 connect: app='back' args='' flashver='LNX.11,1,102,55' swf_url='' tc_url='rtmp://172.22.0.2:1936/back' page_url='' acodecs=3575 vcodecs=252 object_encoding=0, client: 172.22.0.3, server: 0.0.0.0:1936
muck-nginx-back-1   | 2023/12/09 13:55:01 [info] 7#7: *2 createStream, client: 172.22.0.3, server: 0.0.0.0:1936
muck-nginx-back-1   | 2023/12/09 13:55:01 [info] 7#7: *2 publish: name='' args='' type=live silent=0, client: 172.22.0.3, server: 0.0.0.0:1936

ffmpeg logs it never starts streaming

command:

ffmpeg -v debug -stream_loop -1 -i world.mp4 -f flv rtmp://nginx-front/blablablablabla

logs:

Opening an output file: rtmp://nginx-front/blablablablabla.
[rtmp @ 0x5586acf064c0] No default whitelist set
[tcp @ 0x5586acf05a40] No default whitelist set
[tcp @ 0x5586acf05a40] Original list of addresses:
[tcp @ 0x5586acf05a40] Address 172.22.0.3 port 1935
[tcp @ 0x5586acf05a40] Interleaved list of addresses:
[tcp @ 0x5586acf05a40] Address 172.22.0.3 port 1935
[tcp @ 0x5586acf05a40] Starting connection attempt to 172.22.0.3 port 1935
[tcp @ 0x5586acf05a40] Successfully connected to 172.22.0.3 port 1935
[rtmp @ 0x5586acf064c0] Handshaking...
[rtmp @ 0x5586acf064c0] Type answer 3
[rtmp @ 0x5586acf064c0] Server version 13.14.10.13
[rtmp @ 0x5586acf064c0] Proto = rtmp, path = /blablablablabla, app = blablablablabla, fname = 
[rtmp @ 0x5586acf064c0] Window acknowledgement size = 5000000
[rtmp @ 0x5586acf064c0] Max sent, unacked = 5000000
[rtmp @ 0x5586acf064c0] New incoming chunk size = 4096
[rtmp @ 0x5586acf064c0] Releasing stream...
[rtmp @ 0x5586acf064c0] FCPublish stream...
[rtmp @ 0x5586acf064c0] Creating stream...
[rtmp @ 0x5586acf064c0] Sending publish command for ''

Any thoughts why it's getting stuck?

If I stream directly to backend nginx server it's fine.

dcarrion87 commented 9 months ago

Resolved realised I didn't have live on at the front.