OpenWrt 19.07 中使用 live555-proxy-server 这个命令,但默认的 menuconfig 里没有提供这个包。
因此,我们需要自己动手,丰衣足食——创建一个独立的 live555-proxy-server 软件包。
幸运的是,live555 的编译方式非常简单,创建一个 Makefile 并不复杂。
解决方案:创建一个独立的 live555 软件包 Makefile
我们将创建一个新的 Makefile,专门用来编译 live555 的库和工具(包括 live555-proxy-server)。
第一步:创建软件包目录结构
在你的 feeds/packages 目录下(或者任何你喜欢的地方,比如 package/utils),创建一个新的目录 live555。
# 在 OpenWrt 源码根目录
mkdir -p feeds/packages/multimedia/live555
cd feeds/packages/multimedia/live555
第二步:创建 Makefile 文件
在刚刚创建的 live555 目录里,新建一个名为 Makefile 的文件,并把下面的内容完整地复制粘贴进去。
nano Makefile
live555/Makefile 内容如下:
#
# Copyright (C) 2023 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include (TOPDIR)/rules.mk
PKG_NAME:=live555
PKG_VERSION:=2021.08.24
PKG_RELEASE:=1
PKG_SOURCE:=live.(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://download.videolan.org/pub/contrib/live555/
PKG_HASH:=ce95a1c79f6d18e959f9dc129b8529b711c60e76754acc285e60946303b923ec
PKG_MAINTAINER:=Your Name <[email protected]>
PKG_LICENSE:=LGPL-2.1-or-later
PKG_LICENSE_FILES:=COPYING
PKG_BUILD_PARALLEL:=1
include (INCLUDE_DIR)/package.mk
define Package/live555
SECTION:=libs
CATEGORY:=Libraries
SUBMENU:=multimedia
TITLE:=LIVE555 Streaming Media libraries
URL:=http://www.live555.com/liveMedia/
DEPENDS:=(CXX_DEPENDS)
endef
define Package/live555/description
A set of C++ libraries for multimedia streaming, using open standard
protocols (RTP/RTCP, RTSP, SIP).
endef
define Package/live555-utils
SECTION:=multimedia
CATEGORY:=Multimedia
TITLE:=LIVE555 Streaming Media utilities
DEPENDS:=+live555
endef
define Package/live555-utils/description
This package contains the test programs and proxy server from live555,
including openRTSP, live555MediaServer, and live555-proxy-server.
endef
# live555 has a non-standard build system. We need to override the build steps.
TARGET_CXXFLAGS += -fPIC -DRSA_ENABLED
MAKE_FLAGS += CPLUSPLUS_COMPILER_POST_FLAGS="(TARGET_CXXFLAGS)"
define Build/Compile(MAKE) -C (PKG_BUILD_DIR) \(MAKE_FLAGS) \
linux-openwrt
endef
define Package/live555/install
(INSTALL_DIR)(1)/usr/lib
(INSTALL_LIB)(PKG_BUILD_DIR)/liveMedia/libliveMedia.a (1)/usr/lib/(INSTALL_LIB) (PKG_BUILD_DIR)/groupsock/libgroupsock.a(1)/usr/lib/
(INSTALL_LIB)(PKG_BUILD_DIR)/UsageEnvironment/libUsageEnvironment.a (1)/usr/lib/(INSTALL_LIB) (PKG_BUILD_DIR)/BasicUsageEnvironment/libBasicUsageEnvironment.a(1)/usr/lib/
endef
define Package/live555-utils/install
(INSTALL_DIR)(1)/usr/bin
(INSTALL_BIN)(PKG_BUILD_DIR)/proxyServer/live555ProxyServer (1)/usr/bin/live555-proxy-server(INSTALL_BIN) (PKG_BUILD_DIR)/testProgs/openRTSP(1)/usr/bin/
(INSTALL_BIN)(PKG_BUILD_DIR)/mediaServer/live555MediaServer (1)/usr/bin/
endef(eval (call BuildPackage,live555))(eval $(call BuildPackage,live555-utils))
Makefile 关键点解读
- 两个包: 这个 Makefile 定义了两个软件包:
live555: 只包含核心的库文件(.a静态库)。live555-utils: 依赖于live555,包含了我们需要的可执行文件,比如live555ProxyServer。
- 非标准编译:
live555使用它自己的一套 Makefile 系统,而不是标准的autotools或cmake。因此,我们重写了Build/Compile部分,直接调用它的make linux-openwrt命令。 - 安装可执行文件: 在
Package/live555-utils/install部分,我们把编译好的live555ProxyServer安装到固件的/usr/bin目录下,并重命名为live555-proxy-server以方便使用。
OpenWrt 的 make menuconfig 命令并不直接扫描 feeds/ 目录。它只扫描 package/ 目录下的内容。
feeds 目录是一个独立的“原料仓库”,你需要通过一个明确的步骤——./scripts/feeds install——来告诉构建系统:“请把 feeds 仓库里的某个(或所有)软件包安装到我的 package/ 目录中”。
这个“安装”操作,实际上就是在 package/feeds/ 目录下为你的软件包创建一个符号链接 (symbolic link),指向它在 feeds/ 目录中的真实位置。
因为是在 feeds/packages/multimedia/ 目录下手动创建的 live555 目录和 Makefile,所以构建系统对此一无所知,因为它没有经过标准的 install 流程。
第三步:手动安装你的新包
我们需要手动触发一次 feeds 的更新和安装过程,让构建系统“看到”并“注册”你的新包。
第一步:重新扫描 feeds 内容
首先,我们需要让 feeds 脚本重新扫描 feeds/packages 目录,发现你新添加的 live555。
# 在 OpenWrt 源码根目录
./scripts/feeds update -i
-i表示只更新索引(index),它会快速扫描feeds目录下的所有包,而不会去从网络上拉取更新。这对于我们只是添加了本地新包的情况来说,速度最快。
第二步:安装 live555 包
现在 feeds 脚本已经知道了 live555 的存在,我们可以明确地“安装”它。
# 在 OpenWrt 源码根目录
./scripts/feeds install live555
./scripts/feeds install live555-utils
- 因为你的 Makefile 定义了两个包,所以我们需要分别安装它们。
执行完这两条命令后,你可以去检查一下符号链接是否被正确创建了:
ls -l package/feeds/packages/
在输出中,你应该能看到类似这样的行:
live555 -> ../../../feeds/packages/multimedia/live555
live555-utils -> ../../../feeds/packages/multimedia/live555
这就证明符号链接已经成功建立!
第三步:再次运行 make menuconfig
现在,package/ 目录下已经有了指向你 live555 Makefile 的链接,menuconfig 一定能扫描到它。
make menuconfig
这一次,请再次去 Libraries -> multimedia 和 Multimedia 菜单下查找,你一定能找到 live555 和 live555-utils 了。
手动向 feeds/ 目录添加一个新的软件包时,标准的流程就是:
- 创建软件包目录和 Makefile (
feeds/packages/.../<mypackage>/Makefile)。 - 运行
./scripts/feeds update -i来更新本地索引。 - 运行
./scripts/feeds install <mypackage>来创建符号链接。 - 运行
make menuconfig来配置。
第四步:在 menuconfig 中启用
- 回到 OpenWrt 源码根目录。
- 运行
make menuconfig。 - 现在,你应该可以在
menuconfig中找到这两个新包了:- 在
Libraries->multimedia->live555(这是库,live555-utils会自动选中它)。 - 在
Multimedia->live555-utils(这是包含可执行文件的工具包)。
- 在
- 找到
live555-utils,按Y将它选中 (<*>)。
第五步:编译并验证
- 保存
menuconfig配置并退出。 - 编译你的固件:
make -j5 V=s - 编译成功后,刷写新固件。
- 登录到你的 OpenWrt 终端,输入
live555-proxy-server并按回车,你应该能看到它的帮助信息或启动日志,证明安装成功!
这样,就通过自己创建一个 Makefile,成功地将 live555-proxy-server 功能添加到了你的 OpenWrt 19.07 系统中。