RTSP系列四:RTSP Server/Client实战项目

我的音视频/流媒体开源项目(github)

RTSP系列:

        RTSP系列一:RTSP协议介绍-CSDN博客

        RTSP系列二:RTSP协议鉴权-CSDN博客 

        RTSP系列三:RTP协议介绍-CSDN博客 

        RTSP系列四:RTSP Server/Client实战项目-CSDN博客 

目录

一、RTSP Server实战项目

1、准备

2、simple-rtsp-server下载编译

3、运行

4、拉流测试

二、RTSP Client实战项目

1、编译

2、测试


一、RTSP Server实战项目

        地址:https://github.com/BreakingY/simple-rtsp-server

        使用epoll,支持RTP OVER UDP、RTP OVER TCP,支持H264/H265、AAC/PCMA、支持鉴权。

1、准备

        simple-rtsp-server依赖ffmpeg,版本要求>=4.x。支持系统:Linux

        依赖安装:

sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev libsdl2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo zlib1g-dev
汇编库:
sudo apt-get install yasm
sudo apt-get install nasm
 
视频库:
sudo apt-get install libx264-dev
sudo apt-get install libx265-dev
 
音频库:
sudo apt-get install libfdk-aac-dev
sudo apt-get install libmp3lame-dev
sudo apt-get install libopus-dev

         ffmpeg源码下载:

wget https://ffmpeg.org//releases/ffmpeg-4.0.5.tar.bz2
 
tar xjvf ffmpeg-4.0.5.tar.bz2
 
cd ffmpeg-4.0.5

        编译安装:

./configure --prefix=/usr/local --enable-libx264 --disable-x86asm --enable-nonfree --enable-libfdk-aac  --enable-shared --enable-gpl --enable-libmp3lame --enable-libopus  --extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib
 
make
 
make install

2、simple-rtsp-server下载编译

git clone https://github.com/BreakingY/simple-rtsp-server.git
 
cd simple-rtsp-server
 
mkdir build
 
cd build
 
cmake ..
 
make -j

3、运行

cp -r ../mp4path .
 
./rtsp_server 0 (0-不鉴权;1-鉴权)

4、拉流测试

  项目中mp4path自带了测试文件,后面把想回放的视频放到mp4path中即可

TCP拉流:
ffmpeg -rtsp_transport tcp -i "rtsp://192.168.10.17:8554/test_h264_aac.mp4" -vcodec copy -acodec copy  test_h264_aac_tcp.mp4
 
UDP拉流:
ffmpeg -i "rtsp://192.168.10.17:8554/test_h264_aac.mp4" -vcodec copy -acodec copy  test_h264_aac_udp.mp4

        也可通过VLC直接播放,点击媒体->打开网络串流,输入rtsp地址即可。默认是udp拉流,要使用TCP需要打开工具->偏好设置->输入/编解码器,拉到最下方,选择“RTP over RTSP(TCP)”

        rtsp_server程序会把rtsp信令交互过程打印出来,让我们对rtsp信令交互过程更加清晰。

二、RTSP Client实战项目

        地址:https://github.com/BreakingY/simple-rtsp-client

        支持RTP OVER UDP、RTP OVER TCP,支持H264/H265、AAC/PCMA、支持鉴权。

不需要任何依赖。

1、编译

git clone https://github.com/BreakingY/simple-rtsp-client.git

mkdir build

cd build

cmake ..

make -j

2、测试

./rtsp_client rtsp_url

        客户端会把收到的音视频写入文件,H264/H265写入到test_out.h26x,AAC写入到test_out.aac,PCMA写入到test_out.pcma。

以下是一个使用C++的函数,可以验证RTSP地址的合法性。该函数使用正则表达式来检查URL的格式是否符合RTSP协议的规范。请注意,该函数使用C++11标准,因此您的编译器必须支持C++11。 ```cpp #include <regex> #include <string> bool isValidRTSPUrl(const std::string& url) { const std::regex rtspUrlRegex( "^(rtsp://)?" // optional "rtsp://" scheme "([A-Za-z0-9]+:)?([A-Za-z0-9]+)?" // optional username and password "@?" // optional "@" symbol "([A-Za-z0-9]+\\.)+[A-Za-z]{2,}" // domain name or IP address "(:[0-9]{1,5})?" // optional port number "(/[A-Za-z0-9_.\\-~%]*)*" // optional path and query "$"); return std::regex_match(url, rtspUrlRegex); } ``` 使用此函数,您可以轻松地验证RTSP URL的合法性。例如,以下是一些使用此函数的示例代码: ```cpp #include <iostream> int main() { std::string url1 = "rtsp://admin:gyz123456@192.168.25.26:554/Streaming/Unicast/channels/401"; std::string url2 = "rtsp://admin:hy123456@10.6.1.106/"; std::string url3 = "rtsp://127.0.0.1:8554/1122.264"; if (isValidRTSPUrl(url1)) { std::cout << "URL 1 is valid." << std::endl; } else { std::cout << "URL 1 is not valid." << std::endl; } if (isValidRTSPUrl(url2)) { std::cout << "URL 2 is valid." << std::endl; } else { std::cout << "URL 2 is not valid." << std::endl; } if (isValidRTSPUrl(url3)) { std::cout << "URL 3 is valid." << std::endl; } else { std::cout << "URL 3 is not valid." << std::endl; } return 0; } ``` 输出: ``` URL 1 is valid. URL 2 is valid. URL 3 is valid. ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值