H.265+SRS6.0服务器部署实战:从编译到推流全流程解析

📅 发布时间:2026/7/17 11:41:21 👁️ 浏览次数:
H.265+SRS6.0服务器部署实战:从编译到推流全流程解析
1. 为什么你需要关注H.265和SRS 6.0如果你正在搭建自己的直播服务器或者想给监控系统、在线教育平台升级视频流那你肯定绕不开两个词H.265和SRS。我折腾视频服务器快十年了从早期的Flash流媒体到现在的低延迟直播踩过的坑数都数不过来。今天我就把我最近一次完整部署H.265SRS 6.0服务器的实战经验从头到尾、掰开揉碎了讲给你听。这绝对不是一个简单的命令复制粘贴教程我会告诉你每一步背后的“为什么”以及我踩过的那些“坑”保证你跟着做一遍就能成功。先说说为什么是H.265。简单讲它是个“省流量”的黑科技。在同样的画质下H.265也叫HEVC比我们之前常用的H.264能节省将近一半的带宽和存储空间。想象一下你的直播平台用户流量翻倍但服务器带宽成本却没怎么涨是不是很诱人但过去很长一段时间H.265在直播领域推广很慢一个核心原因就是很多流媒体服务器对它的支持不完善尤其是像RTMP这种老牌但应用广泛的协议。这就是SRS 6.0登场的原因了。SRSSimple Realtime Server是国内非常优秀的一款开源流媒体服务器性能强悍社区活跃。从6.0版本开始它全面拥抱H.265官方原生支持了H.265 over RTMP/FLV/HLS/WebRTC等协议。这意味着我们终于可以用一套成熟、稳定的方案来搭建支持高效编码的直播系统了。这个组合对于个人开发者想搭建高清低码率的个人直播间或者企业需要构建节省成本的视频云服务都是当前性价比极高的技术选型。2. 部署前的环境准备与规划动手之前别急着敲命令。磨刀不误砍柴工把环境理清楚能避免后面一大堆莫名其妙的问题。我强烈建议你使用一台干净的Linux服务器进行操作Ubuntu 20.04/22.04 LTS或者CentOS 7/8都是不错的选择。我这次演示用的是Ubuntu 22.04。记住生产环境尽量别用Windows后期维护和性能调优会麻烦很多。2.1 系统基础依赖安装首先我们需要把编译和运行所需的基础工具和库装好。这些是编译SRS、FFmpeg以及相关编码库的基石缺一不可。打开你的终端执行以下命令来更新系统并安装编译工具链# 更新软件包列表 sudo apt-get update # 安装编译必需工具Ubuntu/Debian sudo apt-get install -y build-essential cmake git pkg-config nasm yasm automake libtool # 安装一些常用的开发库 sudo apt-get install -y libssl-dev zlib1g-dev libpcre3-dev对于CentOS/RHEL系统命令会有些不同# CentOS 7/8 sudo yum groupinstall -y Development Tools sudo yum install -y cmake3 git pkgconfig nasm yasm openssl-devel zlib-devel pcre-devel # 如果系统里是cmake3可能需要创建个软链接sudo ln -s /usr/bin/cmake3 /usr/local/bin/cmake这里有个我踩过的坑注意CMake的版本。编译x265库时需要相对较新版本的CMake。如果你的系统自带的版本太老比如低于3.1最好去CMake官网下载最新版本编译安装否则后面编译x265会报错。你可以用cmake --version先检查一下。2.2 工作目录规划我习惯把所有的源码和编译产物放在一个清晰的目录结构里这样以后找东西、清理或者迁移都方便。在你的用户主目录~或者/opt下创建一个工作目录mkdir -p ~/srs_h265_project/{source,build} cd ~/srs_h265_project解释一下source用来存放所有下载的源代码比如SRS、FFmpeg、x264、x265的git仓库。build用来存放各个项目编译安装后的最终成果可执行文件、库文件等。你也可以选择在每个项目的源码目录里单独建build目录看个人习惯。规划好目录就像给工具箱分了层接下来我们往里面放“原料”和“工具”。3. 编译与部署SRS 6.0服务器SRS是整个系统的核心它负责接收推流、进行流转码或转发、并提供拉流服务。我们要编译一个开启了H.265支持的SRS。3.1 获取源码与配置编译选项首先进入我们准备好的源码目录拉取SRS的最新代码。官方推荐使用6.0.4及以上版本以获得完整的H.265支持。cd ~/srs_h265_project/source git clone https://github.com/ossrs/srs.git cd srs git checkout 6.0.4 # 明确切换到稳定版本避免使用可能不稳定的最新开发分支接下来是关键一步运行配置脚本并开启H.265功能。./configure脚本会检查你的系统环境并生成针对当前系统的编译配置。./configure --h265on看到这个--h265on选项了吗这就是告诉SRS“请把H.265相关的代码编译进去”。如果一切顺利你会看到一大串输出最后提示“configs”已生成并且会列出已开启的功能其中应该包含H.265: enabled。如果在这里报错大概率是前面“系统基础依赖”没装全。根据错误提示缺什么就补装什么开发包通常是-dev或-devel结尾的包。3.2 编译与启动SRS配置成功后就可以开始编译了。这个过程可能会花点时间取决于你服务器的CPU性能。make -j$(nproc)这里的-j$(nproc)参数是让make工具使用你CPU所有的核心来并行编译能大大加快速度。编译完成后在./objs/目录下就会生成srs这个可执行文件。SRS启动需要配置文件它自带了很多示例配置。我们先使用最基础的RTMP配置来测试# 启动SRS服务器使用RTMP配置文件 ./objs/srs -c conf/rtmp.conf启动后如何确认它正常运行了呢我给你几个常用的命令# 查看实时日志的最后30行并持续跟踪按CtrlC退出 tail -n 30 -f ./objs/srs.log # 查看服务器进程状态使用自带的脚本 ./etc/init.d/srs status如果看到日志里有“SRS/6.0.4”字样启动成功并且状态显示“is running”那么恭喜你SRS服务器已经跑起来了默认情况下它会在1935端口监听RTMP推流和拉流在8080端口提供HTTP API和管理控制台。你可以打开浏览器访问http://你的服务器IP:8080/就能看到SRS的欢迎页面和控制台了。4. 打造支持H.265推流的FFmpeg服务器准备好了我们还需要一个能推送H.265视频流的“推流器”。虽然OBS等软件也在逐步支持但为了最彻底的控制和兼容性我们选择自己编译一个“魔改版”的FFmpeg。为什么需要“魔改”因为标准的RTMP/FLV协议最初设计时并没有包含H.265所以标准FFmpeg无法用RTMP推送H.265流。我们需要给FFmpeg打上社区提供的补丁让它支持这个扩展。4.1 编译核心编码库x264和x265FFmpeg本身是个“框架”它依赖像x264、x265这样的库来完成具体的H.264和H.265编码工作。我们需要先静态编译这两个库。编译x264 (H.264编码器)cd ~/srs_h265_project/source git clone https://code.videolan.org/videolan/x264.git cd x264 # 创建一个独立的构建目录是个好习惯 mkdir build cd build # 配置禁用汇编兼容性更好禁用命令行工具只生成静态库 ../configure --prefix$(pwd)/install --disable-asm --disable-cli --enable-static make -j$(nproc) make install编译完成后库文件会安装在~/srs_h265_project/source/x264/build/install/lib下。编译x265 (H.265编码器)x265的编译稍微复杂一点它用CMake来管理。cd ~/srs_h265_project/source git clone https://bitbucket.org/multicoreware/x265_git.git x265 cd x265/source # 注意源码在source子目录下 mkdir build cd build # 使用CMake配置同样指定安装路径并只生成静态库 cmake -DCMAKE_INSTALL_PREFIX$(pwd)/install -DENABLE_SHAREDOFF .. make -j$(nproc) make installx265的库文件会安装在~/srs_h265_project/source/x265/source/build/install/lib。4.2 设置编译环境变量为了让后续编译FFmpeg时能找到我们刚编译好的x264和x265静态库需要设置一个关键的环境变量PKG_CONFIG_PATH。这个变量告诉pkg-config工具去哪里寻找库的元信息.pc文件。export PKG_CONFIG_PATH~/srs_h265_project/source/x264/build/install/lib/pkgconfig:~/srs_h265_project/source/x265/source/build/install/lib/pkgconfig:$PKG_CONFIG_PATH重要提示这个环境变量设置只在当前终端会话有效。如果你关闭了终端或者新开了一个需要重新执行这条命令。为了避免麻烦你可以把它添加到你的~/.bashrc文件末尾然后执行source ~/.bashrc使其永久生效。4.3 为FFmpeg打上H.265/RTMP补丁并编译现在进入最核心的一步处理FFmpeg。我们需要一个特定版本的FFmpeg源码并应用补丁。cd ~/srs_h265_project/source # 克隆FFmpeg官方仓库 git clone https://github.com/FFmpeg/FFmpeg.git cd FFmpeg # 切换到一个稳定的分支这里用5.1.2与补丁兼容性好 git checkout n5.1.2接下来下载并应用让RTMP/FLV支持H.265的补丁。这个补丁来自社区项目ffmpeg_rtmp_h265。# 克隆补丁仓库 git clone https://github.com/runner365/ffmpeg_rtmp_h265.git # 将补丁文件复制到FFmpeg源码的对应目录 cp ffmpeg_rtmp_h265/flv.h ./libavformat/ cp ffmpeg_rtmp_h265/flv*.c ./libavformat/这个操作实质上是修改了FFmpeg中处理FLV格式的代码增加了对H.265编码类型的识别和封装能力。万事俱备开始编译FFmpegmkdir build cd build # 配置编译选项这是一条很长的命令注意反斜杠换行 ../configure \ --prefix$(pwd)/install \ --enable-gpl --enable-nonfree \ --enable-pthreads --extra-libs-lpthread \ --disable-asm --disable-x86asm --disable-inline-asm \ # 禁用汇编提高兼容性 --enable-decoderaac --enable-encoderaac \ # 确保AAC音频支持 --enable-libx264 --enable-libx265 \ # 启用我们刚编译的编码库 --pkg-config-flags--static # 告诉pkg-config优先使用静态库 make -j$(nproc) make install编译过程会比较漫长。成功后你会在~/srs_h265_project/source/FFmpeg/build/install/bin下找到ffmpeg、ffprobe等可执行文件。这个ffmpeg就是我们需要的、能推送H.265 RTMP流的“神器”。5. 实战推流与效果验证所有组件都准备好了让我们来一场真正的推流测试看看整个链路是否跑通。5.1 准备测试视频与推流命令首先你需要一个视频文件用于测试。你可以用自己的或者用FFmpeg生成一个简单的测试视频# 生成一个10秒的测试视频H.264编码 ~/srs_h265_project/source/FFmpeg/build/install/bin/ffmpeg -f lavfi -i testsrcduration10:size1280x720:rate30 -c:v libx264 -pix_fmt yuv420p test_src.h264.mp4然后使用我们编译的、支持H.265 RTMP的FFmpeg进行推流。命令的关键在于指定视频编码器为libx265输出格式为flv。cd ~/srs_h265_project/source/FFmpeg/build/install/bin # 循环读取测试文件并以实时速率推流到SRS服务器 ./ffmpeg -stream_loop -1 -re -i /path/to/your/test.mp4 \ -c:v libx265 -x265-params crf28 \ # 使用H.265编码CRF值控制质量越小质量越高 -c:a aac -b:a 128k \ # 音频编码为AAC -f flv rtmp://你的服务器IP:1935/live/stream_h265参数解释-stream_loop -1: 无限循环输入源。-re: 以原始帧率读取模拟实时推流。-c:v libx265: 指定视频编码器为H.265。-f flv: 指定输出容器格式为FLV。rtmp://.../live/stream_h265: 推流地址。live是SRS默认的Vhost应用名stream_h265是你自定义的流名称。5.2 在SRS控制台验证流推流命令执行后如果没有报错并开始持续输出编码帧的信息说明推流成功。这时打开SRS的控制台页面http://你的服务器IP:8080/点击上方菜单的“Streams”流或者“Preview”预览。你应该能在流列表里看到名为stream_h265的流其编码信息中会显示HEVC即H.265。点击预览如果浏览器支持比如新版Chrome已支持H.265解码你就能直接看到画面了这是最激动人心的时刻它证明从推流到服务器接收、再到协议处理的整个H.265链路已经完全打通。5.3 使用VLC等播放器拉流测试除了在控制台预览我们还需要用通用的播放器验证。由于RTMP协议本身不支持H.265SRS做了一个巧妙的工作它将H.265的RTMP流同时以FLV格式通过HTTP-FLV协议分发出去。所以我们可以用支持HTTP-FLV的播放器来拉流。拉流地址是http://你的服务器IP:8080/live/stream_h265.flv你可以使用VLC 播放器打开VLC点击“媒体” - “打开网络串流”。输入上面的HTTP-FLV地址点击播放。如果VLC能正常播放出画面和声音那么恭喜你一个完整的、支持H.265编码的直播服务器就已经部署成功了你可以把这个FLV地址嵌入到一些支持HTTP-FLV的网页播放器如flv.js中实现网页端的H.265直播观看。6. 进阶配置与排坑指南基础功能跑通后我们来看看如何让它更实用、更稳定以及我遇到过的那些典型问题。6.1 SRS配置文件详解与优化之前我们用的conf/rtmp.conf是最简配置。实际应用中我们需要根据场景调整。SRS的配置文件功能非常强大。我们复制一个更全的模板来修改cd ~/srs_h265_project/source/srs cp conf/full.conf conf/my_h265.conf vim conf/my_h265.conf # 或用你喜欢的编辑器有几个关键部分你可以关注并修改监听端口你可以修改listen和http_api、http_server的端口。日志级别srs_log_tank和srs_log_level可以控制日志详细程度生产环境建议设为warning减少日志量。HLS切片如果你需要HLS输出可以配置hls段落设置切片时长和路径。DVR录制配置dvr段落可以将直播流录制为文件。带宽限制在vhost中配置play和publish的bandwidth可以进行推拉流带宽限制。修改后使用新的配置文件启动./objs/srs -c conf/my_h265.conf。6.2 常见问题与解决方案问题一编译x265时CMake报错找不到合适的C编译器。解决确保安装了gsudo apt-get install g。对于CentOSsudo yum install gcc-c。问题二FFmpeg编译时提示找不到x264或x265库。解决99%的原因是PKG_CONFIG_PATH环境变量没设置对。请仔细检查路径是否正确以及lib/pkgconfig目录下是否存在x264.pc和x265.pc文件。可以用echo $PKG_CONFIG_PATH和pkg-config --list-all | grep x26来验证。问题三推流成功但SRS控制台看不到流或者拉流失败。解决检查防火墙确保服务器的1935RTMP、8080HTTP、以及你可能用到的其他端口如1985 for API在安全组或iptables中是开放的。检查SRS日志tail -f ./objs/srs.log看是否有错误或警告信息。常见错误是端口被占用。检查推流地址确保IP和端口正确应用名live和流名没有拼写错误。问题四播放端黑屏或无法解码。解决这是H.265部署中最常见的问题。首先用ffprobe分析一下SRS分发出来的FLV流./ffprobe http://你的服务器IP:8080/live/stream_h265.flv查看输出中是否有hevc(H.265) 的字样。如果编码格式正确那问题大概率在播放端。正如我开头提到的很多播放器对H.265 over FLV的支持还不完善。你需要使用支持的播放器确保VLC版本足够新3.0以上。网页端可以考虑使用腾讯云播放器SDK等明确支持H.265的商用方案或者研究基于Wasm的H.265解码器。准备备用方案在实际项目中我通常会同时推送一路H.264的流作为兼容性备用根据客户端能力动态切换。SRS也支持转码你可以配置SRS将接入的H.265流转码成H.264再分发但这会消耗服务器资源。部署这套系统最难的部分其实不在编译和启动而在于对“兼容性”的理解和准备。H.265在编码效率上的优势是巨大的但生态的完全成熟还需要时间。我的经验是在追求新技术红利的同时一定要为那些尚未跟上步伐的终端设备准备好一条“退路”。当你看到在高清画质下带宽占用曲线却平稳低位时就会觉得这一切的折腾都是值得的。好了命令和思路都交给你了接下来就去搭建你自己的高效视频流服务器吧遇到具体问题多看看日志社区的讨论区也有很多宝藏。