添加gstreamer硬件支持

This commit is contained in:
GuanYuankai 2025-10-20 09:15:55 +08:00
parent 8245ab0773
commit c6ef920844
5 changed files with 123 additions and 23 deletions

View File

@ -13,11 +13,8 @@ services:
# --- VPU/NPU/RGA/GPU 硬件访问 ---
- /dev/mpp_service:/dev/mpp_service
- /dev/vpu_service:/dev/vpu_service
- /dev/rga:/dev/rga
- /dev/dri:/dev/dri
# --- NPU ---
- /dev/rknn_service:/dev/rknn_service
- /dev/dri:/dev/dri
group_add:
- "20"
@ -25,6 +22,7 @@ services:
- "110"
volumes:
- .:/app
- /proc/device-tree:/proc/device-tree:ro
ports:
- "8888:8888"

View File

@ -1,5 +1,6 @@
# =================================================================
# Edge Proxy - 开发环境 Dockerfile (V6 - 修正版)
# Edge Proxy - 开发环境 Dockerfile (V9 - 源码编译版)
# 严格遵循 "边带配置.docx" 文档 (MPP/RGA/GStreamer 均使用本地包)
# =================================================================
FROM arm64v8/ubuntu:22.04
@ -10,7 +11,6 @@ WORKDIR /app
ENV DEBIAN_FRONTEND=noninteractive
# 2. 安装依赖、创建用户和组
# 将所有系统级操作合并到一层,以减少镜像大小和构建时间
# =================================
RUN apt-get update && \
apt-get install -y --no-install-recommends \
@ -21,18 +21,52 @@ RUN apt-get update && \
git \
gdb \
vim \
# Piper TTS 所需的系统库
unzip \
pkg-config \
# 添加 'universe' 仓库
software-properties-common \
&& \
# 添加 universe 仓库并再次更新
add-apt-repository universe && \
apt-get update && \
# 一次性安装所有依赖 (综合 "边带配置.docx" 的所有 apt install)
apt-get install -y --no-install-recommends \
# Piper TTS 所需
espeak-ng-data \
libespeak1 \
python3 \
python3-pip \
# 开发库
# C++ 开发库
libssl-dev \
libspdlog-dev \
libsqlite3-dev \
libboost-all-dev && \
\
# --- 用户和组创建 ---
libboost-all-dev \
# GStreamer 核心
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libav \
gstreamer1.0-tools \
gstreamer1.0-x \
gstreamer1.0-alsa \
gstreamer1.0-pulseaudio \
# 编译工具
meson \
ninja-build \
# Rockchip 硬件库依赖
libdrm-dev \
libavcodec-dev \
libavformat-dev \
libjpeg-dev \
libv4l-dev \
libx11-dev \
libegl1-mesa-dev \
libgles2-mesa-dev \
&& \
# 用户和组创建
groupadd -r developers && \
useradd -ms /bin/bash -g developers -G sudo dev && \
groupadd -g 20 dialout || true && \
@ -43,13 +77,14 @@ RUN apt-get update && \
usermod -a -G render dev && \
echo "dev ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/dev-nopasswd
# 权限和协作设置
# =================================
# 为所有用户设置 umask 为 0002这样新创建的文件权限默认为 664 (rw-rw-r--)
RUN echo "umask 0002" > /etc/profile.d/99-shared-umask.sh && \
chmod +x /etc/profile.d/99-shared-umask.sh
# 编译并安装 Paho MQTT 库
# =================================
COPY . /tmp/build-context
RUN cd /tmp/build-context/external/paho.mqtt.c && \
cmake -Bbuild -H. \
-DPAHO_WITH_SSL=ON \
@ -63,21 +98,88 @@ RUN cd /tmp/build-context/external/paho.mqtt.c && \
-DPAHO_BUILD_SAMPLES=OFF \
-DPAHO_BUILD_DOCUMENTATION=OFF && \
cmake --build build --target install && \
\
# --- 清理工作 ---
rm -rf /tmp/build-context
# 编译 MPP
COPY mpp-develop.zip /tmp/
RUN cd /tmp && \
unzip mpp-develop.zip && \
cd mpp-develop && \
mkdir rkmpp_build && \
cd rkmpp_build && \
cmake \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_FLAGS="-O3 -march=armv8.2-a+simd+crypto -mtune=cortex-a76" \
-DCMAKE_CXX_FLAGS="-O3 -march=armv8.2-a+simd+crypto -mtune=cortex-a76" \
-DBUILD_SHARED_LIBS=ON \
-DBUILD_TEST=OFF \
-DHAVE_DRM=ON \
-DHAVE_AVCODEC=ON \
-DHAVE_AVFORMAT=ON \
-DHAVE_LIBV4L2=ON \
-DHAVE_JPEGD=ON \
-DHAVE_RKVDEC=ON \
-DHAVE_RKVENC=ON \
-DHAVE_MPP_RGA=ON \
.. && \
make -j$(nproc) && \
make install && \
cd / && \
rm -rf /tmp/mpp-develop*
# 编译 RGA
COPY rk-mirrors-linux-rga-multi.zip /tmp/
RUN cd /tmp && \
unzip rk-mirrors-linux-rga-multi.zip && \
cd rk-mirrors-linux-rga-multi && \
meson setup . rkrga_build \
--prefix=/usr \
--libdir=lib \
--buildtype=release \
--default-library=shared \
-Dcpp_args=-fpermissive \
-Dlibdrm=false \
-Dlibrga_demo=false && \
meson configure rkrga_build && \
ninja -C rkrga_build install && \
cd / && \
rm -rf /tmp/rk-mirrors-linux-rga-multi*
# 编译 GStreamer 插件
COPY gstreamer-rockchip-master.zip /tmp/
RUN cd /tmp && \
unzip gstreamer-rockchip-master.zip && \
cd gstreamer-rockchip-master && \
mkdir build && \
cd build && \
meson setup .. \
--prefix=/usr \
--libdir=lib/aarch64-linux-gnu \
--buildtype=release \
--optimization=3 \
--default-library=shared \
-Dc_args="-I/usr/include/rga -I/usr/include/rockchip -I/usr/include/drm -O3 -march=armv8.2-a+simd+crypto -mtune=cortex-a76 -fPIC" \
-Dc_link_args="-Wl,-Bsymbolic -Wl,-O3" \
-Dpackage-name="GStreamer Rockchip RK3588" \
-Dpackage-origin="https://github.com/rockchip-linux/gst-rockchip" \
-Drockchipmpp=enabled \
-Drga=enabled && \
ninja -j$(nproc) && \
ninja install && \
ldconfig && \
rm -rf /tmp/build-context && \
# 在所有 apt 操作完成后,最后进行清理
cd / && \
rm -rf /tmp/gstreamer-rockchip-master* && \
rm -rf /var/lib/apt/lists/*
# 8. 安装 Piper TTS
COPY piper_models/ /app/piper_models/
USER dev
RUN pip install --no-cache-dir --user -i https://mirrors.aliyun.com/pypi/simple/ piper-tts
# 将 ~/.local/bin (包含 piper 二进制文件) 添加到 PATH
RUN echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bash_profile
# 现在dev 用户可以使用 `piper` 命令了,只要 shell 环境被正确加载。
# 我们可以将最终的 CMD 设置为加载环境然后执行一个命令,或者留空让用户交互。
# 9. 设置默认用户
USER dev
CMD ["/bin/bash"]
CMD ["/bin/bash"]

Binary file not shown.

BIN
mpp-develop.zip Normal file

Binary file not shown.

Binary file not shown.