试图通过NGINX将RTSP流式传输到RTMP(实时)的问题

试图通过NGINX将RTSP流式传输到RTMP(实时)的问题,nginx,ffmpeg,rtsp,live,rtmp,Nginx,Ffmpeg,Rtsp,Live,Rtmp,我想要通过nginx进行实时RTMP流媒体传输。我使用以下教程在公共ip(linux-CentOS)上设置此服务器: 我的目标是:RTSP源->转码到RTMP->在nginx(实时ip)上接收 然后,我想通过服务器接收这个流;比如: nginx->ffplay 在传输端,我有ffmpeg应用程序,在接收端,我有ffplay应用程序 我已经设置了所有我能想到的,我可以看到它是正确设置(显然)。但是,当我尝试使用类似命令进行流式处理时: ffmpeg -i rtsp://aaa.bb.ccc.ddd

我想要通过nginx进行实时RTMP流媒体传输。我使用以下教程在公共ip(linux-CentOS)上设置此服务器:

我的目标是:RTSP源->转码到RTMP->在nginx(实时ip)上接收

然后,我想通过服务器接收这个流;比如:

nginx->ffplay

在传输端,我有ffmpeg应用程序,在接收端,我有ffplay应用程序

我已经设置了所有我能想到的,我可以看到它是正确设置(显然)。但是,当我尝试使用类似命令进行流式处理时:

ffmpeg -i rtsp://aaa.bb.ccc.ddd/vod/mp4:filename.mov -f mpegts rtmp://<live ip address>:1935/live/
我可以将telnet连接到端口80和1935,并确保端口1935在iptables中作为输入和输出打开

-A INPUT -m state --state NEW -m tcp -p tcp --dport 1935 -j ACCEPT
-A OUTPUT -m state --state NEW -m tcp -p tcp --dport 1935 -j ACCEPT
但什么都不管用


在这方面有人能帮忙吗?

看来我发现了问题:

我使用此命令在ffmpeg中进行流传输:

ffmpeg -i rtsp://admin:pass@aaa.bb.ccc.dd:554/channel3 -f mpegts rtmp://<live ip address>:1935/live/
ffmpeg-irtsp://admin:pass@aaa.bb.ccc.dd:554/channel3-f mpegts rtmp://:1935/现场/
编码参数不正确:-f mpegts错误;我把它改成:-c copy-f flv,然后它开始工作了

例如:

ffmpeg -i rtsp://admin:pass@aaa.bb.ccc.dd:554/channel3 -c copy -f flv rtmp://<live ip address>:1935/live/
ffmpeg-irtsp://admin:pass@aaa.bb.ccc.dd:554/channel3-c副本-f flv rtmp://:1935/live/
上面的示例用于读取基于RTSP的IP摄像头

ffplay rtmp://<live ip address>:1935/live/
ffplay version N-80386-g5f5a97d Copyright (c) 2003-2016 the FFmpeg developers
  built with gcc 5.4.0 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-nv
enc --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enabl
e-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --en
able-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libil
bc --enable-libmodplug --enable-libmfx --enable-libmp3lame --enable-libopencore-
amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-
librtmp --enable-libschroedinger --enable-libsnappy --enable-libsoxr --enable-li
bspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo
-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libweb
p --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-l
ibzimg --enable-lzma --enable-decklink --enable-zlib
  libavutil      55. 24.100 / 55. 24.100
  libavcodec     57. 46.100 / 57. 46.100
  libavformat    57. 38.100 / 57. 38.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 46.101 /  6. 46.101
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  1.100 /  2.  1.100
  libpostproc    54.  0.100 / 54.  0.100
RTMP_ReadPacket, failed to read RTMP packet headersq=    0B f=0/0
rtmp://<live ip address>:1935/live/: Invalid data found when processing input
ffplay -loglevel debug rtmp://<live ip address>:1935/live/
ffplay version N-80386-g5f5a97d Copyright (c) 2003-2016 the FFmpeg developers
  built with gcc 5.4.0 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-nv
enc --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enabl
e-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --en
able-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libil
bc --enable-libmodplug --enable-libmfx --enable-libmp3lame --enable-libopencore-
amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-
librtmp --enable-libschroedinger --enable-libsnappy --enable-libsoxr --enable-li
bspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo
-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libweb
p --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-l
ibzimg --enable-lzma --enable-decklink --enable-zlib
  libavutil      55. 24.100 / 55. 24.100
  libavcodec     57. 46.100 / 57. 46.100
  libavformat    57. 38.100 / 57. 38.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 46.101 /  6. 46.101
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  1.100 /  2.  1.100
  libpostproc    54.  0.100 / 54.  0.100
[rtmp @ 0310d800] No default whitelist set    0KB sq=    0B f=0/0
Parsing... :  0.000 fd=   0 aq=    0KB vq=    0KB sq=    0B f=0/0
Parsed protocol: 0
Parsed host    : <live ip address>
Parsed app     : live
RTMP_Connect1, ... connected, handshaking=    0KB sq=    0B f=0/0
HandShake: Type Answer   : 03q=    0KB vq=    0KB sq=    0B f=0/0
HandShake: Server Uptime : 324510454
HandShake: FMS Version   : 0.0.0.0
HandShake: Handshaking finished....0KB vq=    0KB sq=    0B f=0/0
RTMP_Connect1, handshaked
RTMP_SendPacket: fd=648, size=174
  0000:  03 00 00 00 00 00 ae 14  00 00 00 00               ............
  0000:  02 00 07 63 6f 6e 6e 65  63 74 00 3f f0 00 00 00   ...connect.?....
  0010:  00 00 00 03 00 03 61 70  70 02 00 04 6c 69 76 65   ......app...live
  0020:  00 05 74 63 55 72 6c 02  00 1e 72 74 6d 70 3a 2f   ..tcUrl...rtmp:/
  0030:  2f 36 34 2e 34 39 2e 32  33 34 2e 32 35 30 3a 31   /<live ip address>:1
  0040:  39 33 35 2f 6c 69 76 65  00 04 66 70 61 64 01 00   935/live..fpad..
  0050:  00 0c 63 61 70 61 62 69  6c 69 74 69 65 73 00 40   ..capabilities.@
  0060:  2e 00 00 00 00 00 00 00  0b 61 75 64 69 6f 43 6f   .........audioCo
  0070:  64 65 63 73 00 40 a8 ee  00 00 00 00 00 00 0b 76   decs.@.........v
  0000:  c3                                                 .
  0000:  69 64 65 6f 43 6f 64 65  63 73 00 40 6f 80 00 00   ideoCodecs.@o...
  0010:  00 00 00 00 0d 76 69 64  65 6f 46 75 6e 63 74 69   .....videoFuncti
  0020:  6f 6e 00 3f f0 00 00 00  00 00 00 00 00 09         on.?..........
Invoking connect
RTMP_ReadPacket: fd=648
  0000:  02 00 00 00 00 00 04 05  00 00 00 00               ............
  0000:  00 4c 4b 40                                        .LK@
HandleServerBW: server BW = 5000000
RTMP_ReadPacket: fd=648
  0000:  02 00 00 00 00 00 05 06  00 00 00 00               ............
  0000:  00 4c 4b 40 02                                     .LK@.
HandleClientBW: client BW = 5000000 2
RTMP_ReadPacket: fd=648
  0000:  02 00 00 00 00 00 04 01  00 00 00 00               ............
  0000:  00 00 10 00                                        ....
HandleChangeChunkSize, received: chunk size change to 4096
RTMP_ReadPacket: fd=648
  0000:  03 00 00 00 00 00 be 14  00 00 00 00               ............
  0000:  02 00 07 5f 72 65 73 75  6c 74 00 3f f0 00 00 00   ..._result.?....
  0010:  00 00 00 03 00 06 66 6d  73 56 65 72 02 00 0d 46   ......fmsVer...F
  0020:  4d 53 2f 33 2c 30 2c 31  2c 31 32 33 00 0c 63 61   MS/3,0,1,123..ca
  0030:  70 61 62 69 6c 69 74 69  65 73 00 40 3f 00 00 00   pabilities.@?...
  0040:  00 00 00 00 00 09 03 00  05 6c 65 76 65 6c 02 00   .........level..
  0050:  06 73 74 61 74 75 73 00  04 63 6f 64 65 02 00 1d   .status..code...
  0060:  4e 65 74 43 6f 6e 6e 65  63 74 69 6f 6e 2e 43 6f   NetConnection.Co
  0070:  6e 6e 65 63 74 2e 53 75  63 63 65 73 73 00 0b 64   nnect.Success..d
  0080:  65 73 63 72 69 70 74 69  6f 6e 02 00 15 43 6f 6e   escription...Con
  0090:  6e 65 63 74 69 6f 6e 20  73 75 63 63 65 65 64 65   nection succeede
  00a0:  64 2e 00 0e 6f 62 6a 65  63 74 45 6e 63 6f 64 69   d...objectEncodi
  00b0:  6e 67 00 00 00 00 00 00  00 00 00 00 00 09         ng............
RTMP_ClientPacket, received: invoke 190 bytes
(object begin)
Property: <Name:           no-name., STRING:    _result>
Property: <Name:           no-name., NUMBER:    1.00>
Property: <Name:           no-name., OBJECT>
(object begin)
Property: <Name:             fmsVer, STRING:    FMS/3,0,1,123>
Property: <Name:       capabilities, NUMBER:    31.00>
(object end)
Property: <Name:           no-name., OBJECT>
(object begin)
Property: <Name:              level, STRING:    status>
Property: <Name:               code, STRING:    NetConnection.Connect.Success>
Property: <Name:        description, STRING:    Connection succeeded.>
Property: <Name:     objectEncoding, NUMBER:    0.00>
(object end)
(object end)
HandleInvoke, server invoking <_result>
HandleInvoke, received result for method call <connect>  0B f=0/0
RTMP_SendPacket: fd=648, size=4
  0000:  02 00 00 00 00 00 04 05  00 00 00 00               ............
  0000:  00 4c 4b 40                                        .LK@
sending ctrl. type: 0x0003
RTMP_SendPacket: fd=648, size=10
  0000:  42 00 00 00 00 00 0a 04                            B.......
  0000:  00 03 00 00 00 00 00 00  01 2c                     .........,
RTMP_SendPacket: fd=648, size=25
  0000:  43 00 00 00 00 00 19 14                            C.......
  0000:  02 00 0c 63 72 65 61 74  65 53 74 72 65 61 6d 00   ...createStream.
  0010:  40 00 00 00 00 00 00 00  05                        @........
Invoking createStream
RTMP_ReadPacket: fd=648
  0000:  03 00 00 00 00 00 1d 14  00 00 00 00               ............
  0000:  02 00 07 5f 72 65 73 75  6c 74 00 40 00 00 00 00   ..._result.@....
  0010:  00 00 00 05 00 3f f0 00  00 00 00 00 00            .....?.......
RTMP_ClientPacket, received: invoke 29 bytes
(object begin)
Property: <Name:           no-name., STRING:    _result>
Property: <Name:           no-name., NUMBER:    2.00>
Property: NULL
Property: <Name:           no-name., NUMBER:    1.00>
(object end)
HandleInvoke, server invoking <_result>
HandleInvoke, received result for method call <createStream>
SendPlay, seekTime=0, stopTime=0, sending play: (null)
RTMP_SendPacket: fd=648, size=29
  0000:  08 00 00 00 00 00 1d 14  01 00 00 00               ............
  0000:  02 00 04 70 6c 61 79 00  40 08 00 00 00 00 00 00   ...play.@.......
  0010:  05 02 00 00 00 00 00 00  00 00 00 00 00            .............
Invoking play 0.000 fd=   0 aq=    0KB vq=    0KB sq=    0B f=0/0
sending ctrl. type: 0x0003
RTMP_SendPacket: fd=648, size=10
  0000:  c2                                                 .
  0000:  00 03 00 00 00 01 00 00  0b b8                     ..........
RTMP_ReadPacket: fd=648
  0000:  05 00 00 00 00 00 60 14  01 00 00 00               ......`.....
  0000:  02 00 08 6f 6e 53 74 61  74 75 73 00 00 00 00 00   ...onStatus.....
  0010:  00 00 00 00 05 03 00 05  6c 65 76 65 6c 02 00 06   ........level...
  0020:  73 74 61 74 75 73 00 04  63 6f 64 65 02 00 14 4e   status..code...N
  0030:  65 74 53 74 72 65 61 6d  2e 50 6c 61 79 2e 53 74   etStream.Play.St
  0040:  61 72 74 00 0b 64 65 73  63 72 69 70 74 69 6f 6e   art..description
  0050:  02 00 0a 53 74 61 72 74  20 6c 69 76 65 00 00 09   ...Start live...
RTMP_ClientPacket, received: invoke 96 bytes
(object begin)
Property: <Name:           no-name., STRING:    onStatus>
Property: <Name:           no-name., NUMBER:    0.00>
Property: NULL
Property: <Name:           no-name., OBJECT>
(object begin)
Property: <Name:              level, STRING:    status>
Property: <Name:               code, STRING:    NetStream.Play.Start>
Property: <Name:        description, STRING:    Start live>
(object end)
(object end)
HandleInvoke, server invoking <onStatus>
HandleInvoke, onStatus: NetStream.Play.Start
RTMP_ReadPacket: fd=648
  0000:  05 00 00 00 00 00 18 12  01 00 00 00               ............
  0000:  02 00 11 7c 52 74 6d 70  53 61 6d 70 6c 65 41 63   ...|RtmpSampleAc
  0010:  63 65 73 73 01 01 01 01                            cess....
RTMP_ClientPacket, received: notify 24 bytes
(object begin)
Property: <Name:           no-name., STRING:    |RtmpSampleAccess>
Property: <Name:           no-name., BOOLEAN:   TRUE>    nan    :  0.000 fd=   0
 aq=    0KB vq=    0KB sq=    0B f=0/0
Property: <Name:           no-name., BOOLEAN:   TRUE>
(object end)
RTMP_ReadPacket: fd=648
RTMPSockBuf_Fill, recv returned -1. GetSockError(): 10060 (Unknown error)
RTMP_ReadPacket, failed to read RTMP packet header
[AVIOContext @ 04c81be0] Statistics: 0 bytes read, 0 seeks
RTMP_SendPacket: fd=648, size=34
  0000:  43 00 00 00 00 00 22 14                            C.....".
  0000:  02 00 0c 64 65 6c 65 74  65 53 74 72 65 61 6d 00   ...deleteStream.
  0010:  40 10 00 00 00 00 00 00  05 00 3f f0 00 00 00 00   @.........?.....
  0020:  00 00                                              ..
Invoking deleteStreamd=   0 aq=    0KB vq=    0KB sq=    0B f=0/0
rtmp://<live ip address>:1935/live/: Invalid data found when processing input
#user  nobody;
worker_processes  4;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}
rtmp {
        server {
                listen 1935;
                chunk_size 4096;

                application live {
                        live on;
                        record off;
                }
        }
}
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1935 -j ACCEPT
-A OUTPUT -m state --state NEW -m tcp -p tcp --dport 1935 -j ACCEPT
ffmpeg -i rtsp://admin:pass@aaa.bb.ccc.dd:554/channel3 -f mpegts rtmp://<live ip address>:1935/live/
ffmpeg -i rtsp://admin:pass@aaa.bb.ccc.dd:554/channel3 -c copy -f flv rtmp://<live ip address>:1935/live/