logo资料库

Centos 搭建crtmpserver流媒体服务器.docx

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
1、安装 cmake
2、安装openssl
3、编译和运行crtmpserver
Centos 搭建 crtmpserver 流媒体服务器 1、安装 cmake 可以下载源码安装,https://cmake.org/ , 下面是 yum 安装 yum install -y cmake 2、安装 openssl 下载 openssl-1.0.2l ,链接: https://www.openssl.org/source/ 编译安装 openssl-1.0.2l tar -xvf openssl-1.0.2l.tar.gz cd openssl-1.0.2l ./config --prefix=/usr/local/ssl shared make make install (注意:发现使用 /usr/local/ssl 路径,后面安装 crtmpserver 才成功,要不就总提示找不到 openssl 头文件) CentOS 升级 OpenSSL 至 OpenSSL 1.1.0f 版本<其中有遇到 libcrypto.so 一、检查当前环境 1. 查看当前版本 openssl version 或者使用 yum info openssl 2. 在升级之前检查一下 openssl 的路径 which openssl 因为需要在升级 openssl 之后,我们需要使用软链接将其链接回此路径
二、准备开始升级安装 1、下载与解压 cd ~ wget https://www.openssl.org/source/openssl-1.1.0f.tar.gz tar -xzf openssl-1.1.0f.tar.gz 2、编译与安装 如果没有安装 gcc 可能会报错,可以直接使用 yum 安装一下 gcc yum install gcc cd openssl-1.1.0f ./config --prefix=/usr/local/ssl shared make make install 3、尝试运行/usr/local/ssl/bin/openssl version 应该会出现下面的这个错误: /usr/local/ssl/bin/openssl: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory 4、下面为相关的解决办法: 创建链接至 libssl ln -s /usr/local/ssl/lib/libssl.so.1.1 /usr/lib64/ ln -s /usr/local/ssl/lib/libcrypto.so.1.1 /usr/lib64/ 5、创建链接至新的 openssl ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl_latest 6、检查 openssl_latest 的版本号是否是新的版本 openssl_latest version OpenSSL 1.1.0f 25 May 2017 7、重命名旧的 openssl 文件名,并且将新的文件名改为 openssl cd /usr/bin/ mv openssl openssl_old mv openssl_latest openssl openssl version
3、编译和运行 crtmpserver 下载 crtmpserver,链接:https://github.com/j0sh/crtmpserver 1 编译 crtmpserver unzip crtmpserver-centosinit.zip cd crtmpserver-centosinit sh ./cleanup.sh cd builders/cmake/ cmake . make 如果编译成功, 接着来启动看下: ./crtmpserver/crtmpserver ./crtmpserver/crtmpserver.lua 2 使用 ffmpeg 将文件虚拟成 rtsp 流:
# ./ffmpeg -re -i rtsp_test.mp4 -vcodec copy -codec copy -f rtsp rtsp://192.168.1.22/live/rtsp_test 音视频的编码格式只能为 H264、AAC。 发布以后可以通过 rtmp 的方式点播,流名称是从 s=No Name 获取的,即名称就 叫“No Name”,而不是 ffmpeg 命令中 rtsp URL 地址上的“mystream”。 这样就存在一个问题,不能通过 ffmpeg 向 crtmpserver 发布多路流了,因为流 的名称都为“No Name”。 从 crtmpserver 的日志可以看到 sdp 如下 (需要将 sources/thelib/include/protocols/rtp/rtspprotocol.h 中的 RTSP_DUMP_TRAFFIC 定义打开): 3 修改流名 此时 rtsp 流名称并不是 rtsp_test,查看 sources/thelib/src/protocols/rtp/basertspappprotocol.cpp, 获取 streamName 的代码如下: 解决方法:
修改 sources/thelib/src/protocols/rtp/basertspappprotocolhandler.cpp 文件的 HandleRTSPRequestAnnounce 函数,原来的代码为 string streamName = sdp.GetStreamName(); if (streamName == "") { streamName = format("rtsp_stream_%u", pFrom->GetId()); } pFrom->GetCustomParameters()["sdpStreamName"] = streamName; 即流名称是从 sdp 的 s 字段获取的。 需要改为从 url 获取,为了方便解析,可规定 url 中"?"后面的为流名称,形式为 rtsp://127.0.0.1/live?mystream。如果 url 中没有"?",会使用 ID 命名为 “rtsp_stream_ID”的形式。 代码相应改为: vector lines; string streamName; split(requestHeaders[RTSP_FIRST_LINE][RTSP_URL], "?", lines); if (lines.size() != 2) { streamName = format("rtsp_stream_%u", pFrom->GetId()); }else { streamName = lines[1]; } pFrom->GetCustomParameters()["sdpStreamName"] = streamName;
分享到:
收藏