RTSP流媒体服务器搭建

691 阅读5分钟

使用的服务器介绍

本次测试我们使用ZLMediaKit作为RTSP服务器,服务器为Ubuntu24.04

下载

git clone https://github.com/ZLMediaKit/ZLMediaKit.git
cd ZLMediaKit
#千万不要忘记执行这句命令
git submodule update --init

安装编译需要的库

sudo apt install libssl-dev libsdl-dev libavcodec-dev libavutil-dev ffmpeg

构建和编译项目

cd ZLMediaKit 
mkdir build
cd build
cmake ..
make -j 8

查看编译生成的文件

➜  ZLMediaKit git:(master) cd release/linux/Debug/    
➜  Debug git:(master) ls
api_tester_h264_media_server  bom             libmk_api.so     MediaServer         test_flv         test_server
api_tester_h264_pusher        config.ini      libmov.a         tab                 test_httpApi     test_sortor
api_tester_httpclient         default.pem     libmpeg.a        test_bench_forward  test_httpClient  test_wsClient
api_tester_pusher             libext-codec.a  libsrt.a         test_bench_proxy    test_pusher      test_wsServer
api_tester_server             libflv.a        libzlmediakit.a  test_bench_pull     test_pusherMp4   www
api_tester_websocket          libjsoncpp.a    libzltoolkit.a   test_bench_push     test_rtp

启动服务

➜  Debug git:(master) sudo ./MediaServer -d  
2024-08-28 23:12:24.582 I [MediaServer] [3917-MediaServer] Factory.cpp:41 registerPlugin | Load codec: H264
2024-08-28 23:12:24.582 I [MediaServer] [3917-MediaServer] Factory.cpp:41 registerPlugin | Load codec: H265
2024-08-28 23:12:24.582 I [MediaServer] [3917-MediaServer] Factory.cpp:41 registerPlugin | Load codec: JPEG
2024-08-28 23:12:24.582 I [MediaServer] [3917-MediaServer] Factory.cpp:41 registerPlugin | Load codec: mpeg4-generic
2024-08-28 23:12:24.582 I [MediaServer] [3917-MediaServer] Factory.cpp:41 registerPlugin | Load codec: opus
2024-08-28 23:12:24.582 I [MediaServer] [3917-MediaServer] Factory.cpp:41 registerPlugin | Load codec: PCMA
2024-08-28 23:12:24.582 I [MediaServer] [3917-MediaServer] Factory.cpp:41 registerPlugin | Load codec: PCMU
2024-08-28 23:12:24.582 I [MediaServer] [3917-MediaServer] Factory.cpp:41 registerPlugin | Load codec: L16
2024-08-28 23:12:24.583 D [MediaServer] [3917-MediaServer] System.cpp:148 startDaemon | 启动子进程:3920
2024-08-28 23:12:24.583 I [MediaServer] [3920-MediaServer] System.cpp:192 systemSetup | core文件大小设置为:18446744073709551615
2024-08-28 23:12:24.583 I [MediaServer] [3920-MediaServer] System.cpp:201 systemSetup | 文件最大描述符个数设置为:1048576
2024-08-28 23:12:24.584 I [MediaServer] [3920-MediaServer] main.cpp:256 start_main | ZLMediaKit(git hash:df9dd3d/2024-08-28T12:28:01+08:00,branch:master,build time:2024-08-28T22:58:35)
2024-08-28 23:12:24.674 D [MediaServer] [3920-MediaServer] SSLBox.cpp:174 setContext | Add certificate of: default.zlmediakit.com
2024-08-28 23:12:24.674 D [MediaServer] [3920-stamp thread] util.cpp:366 operator() | Stamp thread started
2024-08-28 23:12:24.676 I [MediaServer] [3920-MediaServer] EventPoller.cpp:594 EventPollerPool | EventPoller created size: 8
2024-08-28 23:12:24.677 I [MediaServer] [3920-MediaServer] main.cpp:360 start_main | 已启动http api 接口
2024-08-28 23:12:24.677 I [MediaServer] [3920-MediaServer] main.cpp:362 start_main | 已启动http hook 接口
2024-08-28 23:12:24.678 I [MediaServer] [3920-MediaServer] TcpServer.cpp:221 start_l | TCP server listening on [::]: 554
2024-08-28 23:12:24.679 I [MediaServer] [3920-MediaServer] TcpServer.cpp:221 start_l | TCP server listening on [::]: 1935
2024-08-28 23:12:24.680 I [MediaServer] [3920-MediaServer] TcpServer.cpp:221 start_l | TCP server listening on [::]: 80
2024-08-28 23:12:24.680 I [MediaServer] [3920-MediaServer] TcpServer.cpp:221 start_l | TCP server listening on [::]: 443
2024-08-28 23:12:24.683 I [MediaServer] [3920-MediaServer] UdpServer.cpp:123 start_l | UDP server bind to [::]: 10000
2024-08-28 23:12:24.691 I [MediaServer] [3920-MediaServer] TcpServer.cpp:221 start_l | TCP server listening on [::]: 10000
2024-08-28 23:12:24.692 I [MediaServer] [3920-MediaServer] UdpServer.cpp:123 start_l | UDP server bind to [::]: 9000

查看监听的端口

➜  Debug git:(master) sudo ss -tunlp | grep MediaServer
udp   UNCONN 0      0                                       *:9000             *:*    users:(("MediaServer",pid=3920,fd=33))    
udp   UNCONN 0      0                                       *:9000             *:*    users:(("MediaServer",pid=3920,fd=42))    
udp   UNCONN 0      0                                       *:9000             *:*    users:(("MediaServer",pid=3920,fd=43))    
udp   UNCONN 0      0                                       *:9000             *:*    users:(("MediaServer",pid=3920,fd=44))    
udp   UNCONN 0      0                                       *:9000             *:*    users:(("MediaServer",pid=3920,fd=45))    
udp   UNCONN 0      0                                       *:9000             *:*    users:(("MediaServer",pid=3920,fd=46))    
udp   UNCONN 0      0                                       *:9000             *:*    users:(("MediaServer",pid=3920,fd=47))    
udp   UNCONN 0      0                                       *:9000             *:*    users:(("MediaServer",pid=3920,fd=48))    
udp   UNCONN 0      0                                       *:10000            *:*    users:(("MediaServer",pid=3920,fd=34))    
udp   UNCONN 0      0                                       *:10000            *:*    users:(("MediaServer",pid=3920,fd=35))    
udp   UNCONN 0      0                                       *:10000            *:*    users:(("MediaServer",pid=3920,fd=36))    
udp   UNCONN 0      0                                       *:10000            *:*    users:(("MediaServer",pid=3920,fd=37))    
udp   UNCONN 0      0                                       *:10000            *:*    users:(("MediaServer",pid=3920,fd=38))    
udp   UNCONN 0      0                                       *:10000            *:*    users:(("MediaServer",pid=3920,fd=39))    
udp   UNCONN 0      0                                       *:10000            *:*    users:(("MediaServer",pid=3920,fd=40))    
udp   UNCONN 0      0                                       *:10000            *:*    users:(("MediaServer",pid=3920,fd=41))    
tcp   LISTEN 0      1024                                    *:1935             *:*    users:(("MediaServer",pid=3920,fd=29))    
tcp   LISTEN 0      1024                                    *:10000            *:*    users:(("MediaServer",pid=3920,fd=32))    
tcp   LISTEN 0      1024                                    *:80               *:*    users:(("MediaServer",pid=3920,fd=30))    
tcp   LISTEN 0      1024                                    *:443              *:*    users:(("MediaServer",pid=3920,fd=31))    
tcp   LISTEN 0      1024                                    *:554              *:*    users:(("MediaServer",pid=3920,fd=28)) 

ffmpeg 推流测试

使用rtsp方式推流

ffmpeg -re -i akagi.mp4 -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test

使用rtmp方式推流

ffmpeg -re -i akagi.mp4 -vcodec h264 -acodec aac -f flv
rtmp://127.0.0.1/live/test

使用rtp方式推流

ffmpeg -re -i akagi.mp4 -vcodec h264 -acodec aac -f rtp_mpegts rtp://127.0.0.1:10000

ffplay 拉流播放

使用rtsp播放

ffplay rtsp://127.0.0.1/live/test

image.png

使用rtmp播放

ffplay rtmp://127.0.0.1/live/test

image.png

参考文档