《国产系统运维笔记》第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

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

相关推荐
Avan_菜菜1 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB2 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode4 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220704 天前
如何搭建本地yum源(上)
运维
大树887 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠7 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质7 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工7 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智7 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_7 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化