Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RTMP Pull #114

Open
warlock135 opened this issue Oct 3, 2018 · 1 comment
Open

RTMP Pull #114

warlock135 opened this issue Oct 3, 2018 · 1 comment

Comments

@warlock135
Copy link

warlock135 commented Oct 3, 2018

Hi,
I'm trying to implement an edge server with your module.
Unfortunately, I couldn't figure out how to use the pull command with your module, to pull rtmp stream from origin server.
This is the configuration I tried:
My origin server is 10.58.201.130 with nginx rtmp. Streaming to it works fine - url: rtmp://10.58.201.130/live/test2.
My edge server is the localhost. Here is my nginx config:

rtmp {
    server {
        listen 1935 reuseport;
        chunk_size 4096;                       
        allow play all;

        service cctv {
            hostname direct-bi proto-all localhost 127.0.0.1;
            application edgelive {
                live on;
                meta copy;
                pull rtmp://10.58.201.130/ app=live;
            }
            application edgelive1 {
                live on;
                meta copy;
                pull rtmp://127.0.0.1/ app=live;
            }
            application edgelive2 {
                live on;
                meta copy;
                exec_pull ffmpeg -i rtmp://10.58.201.130/live/$name -c copy -f flv rtmp://127.0.0.1/$app/$name;
            }
            application live {
                live on;

                gop_cache on;
                gop_cache_count 5;  # cache 5 GOPs

                hls on;
                hls_fragment 10s;
                hls_playlist_length 30s;
            }
      }
   }
}

With this configuration, I can play the stream from the origin server with edgelive2 application which uses exec_pull and ffmpeg.
Streaming locally into live application and using edgelive1 to play also works.
But the edgelive application does not work, ffplay show this error "RTMP_ReadPacket, failed to read RTMP packet header" when I try the url:
./ffplay rtmp://127.0.0.1/edgelive/test2
Here is the nginx log:

2018/10/03 19:49:36 [info] 7922#0: *1 client connected '127.0.0.1'
2018/10/03 19:49:36 [info] 7922#0: *1 connect: host='127.0.0.1' app='edgelive' args='' flashver='' swf_url='' tc_url='rtmp://127.0.0.1/edgelive' page_url='' acodecs=3191 vcodecs=252 object_encoding=0, client: 127.0.0.1, server: 0.0.0.0:1935
2018/10/03 19:49:36 [info] 7922#0: *1 createStream, client: 127.0.0.1, server: 0.0.0.0:1935
2018/10/03 19:49:36 [info] 7922#0: *1 play: name='test2' args='' start=0 duration=0 reset=0 silent=0, client: 127.0.0.1, server: 0.0.0.0:1935
2018/10/03 19:49:36 [info] 7922#0: *1 relay: create pull name='test2' app='live' playpath='' url='10.58.201.130/', client: 127.0.0.1, server: 0.0.0.0:1935
2018/10/03 19:49:36 [info] 7922#0: *1 gop cache play: name='test2' start=0 duration=0 reset=0, client: 127.0.0.1, server: 0.0.0.0:1935
2018/10/03 19:49:36 [info] 7922#0: *2 gop cache publish: name='test2' type='', client: 10.58.201.130/, server: ngx-relay
2018/10/03 19:50:15 [info] 7922#0: *1 disconnect, client: 127.0.0.1, server: 0.0.0.0:1935
2018/10/03 19:50:15 [info] 7922#0: *1 deleteStream, client: 127.0.0.1, server: 0.0.0.0:1935

How can I use the pull command to get the stream from a server rather than localhost? Is there any problem with the configuration?
I really appreciate any help you can provide!

Edit: Seems like adding 10.58.201.130 to hostname solves the problem.
However, It only works with standard rtmp port. When I tried to pull from a source with different port, for instance 10.58.201.130:9030, I still get the same error. How can I modify the config to pull from a specific port?

@LancCJ
Copy link

LancCJ commented Dec 16, 2021

    #this is right 
    application mypull_a {
        live on;
        pull rtmp://10.58.201.130/live/test2 name=testa;
    }

you can use url : rtmp:127.0.0.1:port/mypull_a/testa

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants