分类
嵌入式开发 路由器开发

如何在openwrt 19.07当中,添加live555以及使用live555-proxy-server指令?

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 定义了两个软件包:
    1. live555: 只包含核心的库文件(.a 静态库)。
    2. live555-utils: 依赖于 live555,包含了我们需要的可执行文件,比如 live555ProxyServer
  • 非标准编译: live555 使用它自己的一套 Makefile 系统,而不是标准的 autotoolscmake。因此,我们重写了 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 -> multimediaMultimedia 菜单下查找,你一定能找到 live555live555-utils 了。

手动feeds/ 目录添加一个新的软件包时,标准的流程就是:

  1. 创建软件包目录和 Makefile (feeds/packages/.../<mypackage>/Makefile)。
  2. 运行 ./scripts/feeds update -i 来更新本地索引。
  3. 运行 ./scripts/feeds install <mypackage> 来创建符号链接。
  4. 运行 make menuconfig 来配置。

第四步:在 menuconfig 中启用

  1. 回到 OpenWrt 源码根目录
  2. 运行 make menuconfig
  3. 现在,你应该可以在 menuconfig 中找到这两个新包了:
    • Libraries -> multimedia -> live555 (这是库,live555-utils 会自动选中它)。
    • Multimedia -> live555-utils (这是包含可执行文件的工具包)。
  4. 找到 live555-utils,按 Y 将它选中 (<*>)。

第五步:编译并验证

  1. 保存 menuconfig 配置并退出。
  2. 编译你的固件:
    make -j5 V=s
    
  3. 编译成功后,刷写新固件。
  4. 登录到你的 OpenWrt 终端,输入 live555-proxy-server 并按回车,你应该能看到它的帮助信息或启动日志,证明安装成功!

这样,就通过自己创建一个 Makefile,成功地将 live555-proxy-server 功能添加到了你的 OpenWrt 19.07 系统中。