《国产系统运维笔记》第8期:挑战国产化流媒体部署——银河麒麟+龙芯架构编译SRS实战全记录

最近公司有个项目需要在国产化环境中部署流媒体服务,客户指定了银河麒麟操作系统+龙芯架构的服务器。接到任务的我,脑海里瞬间闪过三个字:"硬核挑战"。我对国产自研龙芯架构的了解还停留在"听说过但没摸过"的阶段。但技术人的DNA告诉我------这恰恰是最有趣的部分。

环境准备

硬件与软件基础

本次编译环境采用:

• CPU:龙芯3A4000(mips64架构)

• 操作系统:银河麒麟V10 SP1(龙芯版)

• 目标软件:SRS 7.0 开源流媒体服务器

龙芯芯片早期基于MIPS64指令集架构进行自主研发,兼容MIPS64的指令体系,并在此基础上逐步扩展和优化,形成了具有自主知识产权的LoongISA指令集。随着技术演进,龙芯于2021年正式推出完全自研的LoongArch架构,彻底脱离MIPS授权体系。MIPS64是一种精简指令集(RISC)架构,支持64位计算、多核处理和高效能功耗比,曾为龙芯处理器提供良好的性能基础。如今,龙芯通过LoongArch实现更高程度的自主可控,广泛应用于国产计算机、服务器及嵌入式设备中,助力我国信息技术安全与产业链独立。

SRS简介

SRS是一款国产开源流媒体服务器,具有以下优势:

  • 完全开源,遵循MIT协议
  • 支持RTMP、HTTP-FLV、HLS等多种流媒体协议
  • 代码结构清晰,便于二次开发
  • 社区活跃,文档相对完善
  • 对国产化平台支持潜力大

软件编译环境依赖安装

SRS 编译依赖较多,需提前安装基础构建工具和库,确保主机可访问公网:

bash 复制代码
sudo apt install -y build-essential automake cmake pkg-config tcl
# 安装 FFmpeg 开发包(启用 WebRTC 所需)
sudo apt install -y libavcodec-dev libavformat-dev libswscale-dev libavutil-dev

SRS源码编译详细步骤

srs源码包获取

从官方仓库下载SRS源码,如果网络访问受限,可以从国内获取:

国内地址:https://gitcode.com/GitHub_Trending/sr/srs?source_module=search_project

GitHub地址:https://github.com/ossrs/srs

解压下载的源码包:

bash 复制代码
 unzip srs-develop.zip

配置编译参数

进入解压下的trunk目录,如果直接configure报如下错误:

解决方法,关闭ffmpeg-fit:

bash 复制代码
sudo ./configure --ffmpeg-fit=off

编译安装srs

bash 复制代码
sudo make && sudo make install

验证与启动:让 SRS 跑起来

手动启动srs

编译成功后,SRS 可执行文件位于/usr/local/srs/objs/srs,使用默认配置手动启动srs:

bash 复制代码
cd /usr/local/srs
./objs/srs -c conf/srs.conf

如果启动失败报如下错误:

根本原因是系统打开文件描述符(file descriptors)限制太低,导致 SRS 无法启动。

解决方案:

bash 复制代码
sudo vim /etc/security/limits.conf
bash 复制代码
# SRS file descriptor limits
deskmedia soft nofile 65536
deskmedia hard nofile 65536
* soft nofile 65536
* hard nofile 65536

修改完成之后,重启系统生效然后启动srs验证。

使用 systemd 托管srs服务

将 SRS(Simple Realtime Server) 注册为 systemd 服务,可以实现开机自启、自动重启、日志管理等系统级功能。以下是详细步骤。

创建 /etc/systemd/system/srs.service,添加一下内容:

bash 复制代码
[Unit]
Description=SRS Streaming Server
After=network.target

[Service]
Type=simple
WorkingDirectory=/usr/local/srs
ExecStart=/usr/local/srs/objs/srs -c /usr/local/srs/conf/srs.conf
Restart=on-failure
RestartSec=5
PIDFile=/var/run/srs.pid
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

启用并启动服务:

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl enable srs
sudo systemctl start srs
sudo systemctl status srs

检查srs服务端是否监听

bash 复制代码
sudo netstat -nplt

访问srs服务web管理界面

bash 复制代码
http://<srs服务器IP>:8080

srs打包成deb包(可选)

deb包打包环境安装

devscripts、debhelper、fakerroot提供了Debian包构建的辅助工具。

bash 复制代码
sudo apt install -y dpkg-dev debhelper devscripts fakeroot

创建构建deb包目录结构

bash 复制代码
sudo mkdir -p srs-deb/DEBIAN
sudo mkdir -p srs-deb/usr/local
sudo mkdir -p srs-deb/etc/systemd/system

复制已编译好的 srs 文件

bash 复制代码
sudo cp -ra /usr/local/srs ~/srs-deb/usr/local/
sudo cp /etc/systemd/system/srs.service srs-deb/etc/systemd/system/

创建 DEBIAN 控制文件

创建 srs-deb/DEBIAN/control,这是DEB包的核心元数据文件,内容如下:

bash 复制代码
Package: srs
Version: 7.0.137
Section: net
Priority: optional
Architecture: mips64el
Maintainer: NotStrandedYet <2467813384@qq.com>
Description: Simple Realtime Server for RTMP/HLS/WebRTC streaming
 A high-performance streaming server supporting RTMP, HLS, WebRTC,
 and more. Optimized for mips64el  architecture.

Architecture必需通过以下命令获取:

bash 复制代码
dpkg --print-architecture

创建安装后脚本postinst

创建srs-deb/DEBIAN/postinst,内容如下:

bash 复制代码
#!/bin/sh
set -e
# Set executable permissions
chmod 755 /usr/local/srs/objs/srs
# Reload systemd configuration and start srs service
systemctl daemon-reload
systemctl enable srs
systemctl start srs

exit 0

创建卸载前脚本prerm

创建srs-deb/DEBIAN/prerm,内容如下:

bash 复制代码
#!/bin/bash

# Stop srs service before removal
systemctl stop srs.service
systemctl disable srs.service

exit 0

设置构建脚本权限:

bash 复制代码
 sudo chmod 755 postinst prerm

构建deb包

使用dpkg-deb工具构建DEB包:

bash 复制代码
sudo dpkg-deb --build srs-deb

完成之后会生成srs-deb.deb命名的deb包,为了日后便于区分可以对命名进行更改。

bash 复制代码
sudo mv srs-deb.deb  srs-7.0-kylin-mips64el.deb

安装验证srs的deb包

安装deb包
bash 复制代码
sudo dpkg -i srs-7.0-kylin-mips64el.deb
验证srs服务deb包安装
bash 复制代码
sudo systemctl status srs

卸载deb包安装的srs

bash 复制代码
sudo dpkg -P srs

srs打包deb包构建完整目录结构

写在最后

本次在银河麒麟龙芯架构上编译部署SRS的完整过程,展示了国产基础软硬件平台已经具备了承载关键业务应用的能力。虽然过程中可能会遇到一些挑战,但正是这些挑战让我们更深入地理解技术本质,积累宝贵的国产化技术经验。技术的发展永无止境,国产化替代之路也需要更多技术人员的参与和贡献。希望本文能为你打开一扇窗,看到国产技术生态的无限可能。如果你在实践过程中遇到其他问题或有新的发现,欢迎在评论区分享交流,让我们共同让技术落地,让国产可信。

原文链接: https://mp.weixin.qq.com/s/n7N1itSgAA59AbbQrJkeBg

如果觉得本文有用,欢迎关注、点赞、转发,让更多国产系统用户看到!

相关推荐
2601_949146535 小时前
Shell语音通知接口使用指南:运维自动化中的语音告警集成方案
运维·自动化
儒雅的晴天6 小时前
大模型幻觉问题
运维·服务器
Gofarlic_OMS7 小时前
科学计算领域MATLAB许可证管理工具对比推荐
运维·开发语言·算法·matlab·自动化
通信大师7 小时前
深度解析PCC策略计费控制:核心网产品与应用价值
运维·服务器·网络·5g
dixiuapp7 小时前
智能工单系统如何选,实现自动化与预测性维护
运维·自动化
Elastic 中国社区官方博客7 小时前
如何防御你的 RAG 系统免受上下文投毒攻击
大数据·运维·人工智能·elasticsearch·搜索引擎·ai·全文检索
小锋学长生活大爆炸7 小时前
【教程】免Root在Termux上安装Docker
运维·docker·容器
进击切图仔7 小时前
常用 Docker 命令备份
运维·docker·容器
默|笙9 小时前
【Linux】fd_重定向本质
linux·运维·服务器