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