DshanPI-A1 RK3576 gmrender-resurrect B站投屏

news/2025/10/16 0:28:34/文章来源:https://www.cnblogs.com/yijunchenhui/p/19144562

演示效果

一、环境信息

类别 具体配置
板卡 DshanPI-A1
主控芯片 RK3576
操作系统 Armbian
桌面系统 GNOME
窗口系统 Wayland
GPU 驱动 Panfrost

二、实现原理

  1. 核心组件gmrender-resurrect 是一款接收 DLNA 服务内容,并通过 GStreamer 播放的工具,可直接配置为 DLNA 客户端。

  2. 硬件加速基础:已提前实现 GStreamer 硬件加速播放视频,满足高清流解码需求。

  3. B 站投屏适配:B 站 DLNA 投屏时,会发送 FLV 封装的 H264 流(类似直播流),通过 gmrender-resurrect 可直接调用硬件加速播放。

三、环境搭建(安装依赖)

1. 安装基础编译工具

sudo apt-get install build-essential \autoconf \automake \libtool \pkg-config

2. 安装 DLNA 与 GStreamer 核心依赖

# 更新软件源sudo apt-get update# 安装 DLNA 依赖与 GStreamer 组件(含编解码、输出插件)
sudo apt-get install libupnp-dev libgstreamer1.0-dev \gstreamer1.0-plugins-base gstreamer1.0-plugins-good \gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly \gstreamer1.0-rockchip1 sudo apt install -y libgstreamer-gl1.0-0 \gstreamer1.0-libav# 安装音频输出插件(PulseAudio + ALSA)
sudo apt install -y gstreamer1.0-pulseaudio
sudo apt-get install gstreamer1.0-alsa# 安装 Git(用于拉取源码)
sudo apt-get install git

四、编译 gmrender-resurrect

1. 拉取源码

git clone https://github.com/hzeller/gmrender-resurrect.git

2. 编译与构建

# 进入源码目录
cd gmrender-resurrect# 生成配置文件
./autogen.sh# 配置编译参数
./configuremake

3. 复制 Logo 文件(避免启动报错)

# 复制图标到系统默认目录
cp data/grender-128x128.png /usr/local/share/gmediarender/
cp data/grender-64x64.png /usr/local/share/gmediarender/

五、启动 DLNA 投屏服务

# -f "DshanPI-A1":设置设备在 DLNA 列表中的显示名称
# --gstout-videopipe:自定义视频输出 pipeline,强制 Wayland 全屏
./src/gmediarender  -f "DshanPI-A1" --gstout-videopipe "waylandsink fullscreen=true"

六、问题排查与解决(音频导致视频卡顿)

1. 问题现象

  • 仅播放视频时正常,添加音频后视频直接卡住。

2. 排查步骤

步骤 1:检查声卡状态(发现挂起)

# 查看所有音频输出设备状态
pactl list sinks short
  • 输出显示所有声卡均处于 SUSPENDED(挂起) 状态,且执行 suspend-sink 后无法激活,说明 PulseAudio 与硬件连接异常。

步骤 2:检查音频服务占用(发现冲突)

# 查看占用音频设备的进程
fuser -v /dev/snd/*
  • 输出显示 PulseAudio、WirePlumber、PipeWire 三个音频服务同时占用设备,存在服务冲突(PipeWire 与 PulseAudio 功能重叠,争夺声卡控制权)。

3. 解决方案(屏蔽 PulseAudio 冲突服务)

步骤 1:屏蔽 PulseAudio 自动启动(用户级)

# 屏蔽服务,阻止自动启动
systemctl --user mask pulseaudio
systemctl --user mask pulseaudio.socket

注:此操作会暂时让系统无法识别 PulseAudio 设备,需恢复时执行解除屏蔽命令。

步骤 2:强制杀死残留 PulseAudio 进程

pkill -9 pulseaudio

4. 功能验证(确保音频 / 视频正常)

验证 1:音频输出测试

# 播放 1000Hz 测试音,检查喇叭是否出声
gst-launch-1.0 audiotestsrc freq=1000 ! audioconvert ! pulsesink
  • 屏蔽PulseAudio后 gst会用alsa来播放音频

  • 可以通过alsamixer控制音量

  • 正常出声音,说明音频链路恢复。

验证 2:本地视频播放测试

# 播放本地视频,检查音画是否同步
gst-launch-1.0 playbin uri=file:///root/bad_apple.mp4
  • 正常播放且有声音,说明音视频协同正常。

5. 重新启动 DLNA 服务

./src/gmediarender  -f "DshanPI-A1" --gstout-videopipe "waylandsink fullscreen=true"

七、补充:恢复 PulseAudio 服务(如需)

若后续需要使用 PulseAudio,执行以下命令解除屏蔽:

systemctl --user unmask pulseaudio
systemctl --user unmask pulseaudio.socket

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/937892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

组件级异步加载与预加载策略

组件级异步加载与预加载策略 1. 核心架构设计 1.1 异步组件加载器 // 组件加载状态枚举 enum ComponentLoadStatus {IDLE = idle,LOADING = loading,LOADED = loaded,ERROR = error }// 组件配置接口 interface Compon…

好记性不如烂笔头之C语言优先级查询

优先级 运算符 名称与含义 使用形式 结合方向  说明1 [] 数组下标 数组名[ int] 左到右() 圆括号. 成员选择(对象)-> 成员选择(指针)2 - 负号运算符 -表达式 右到左~ 按位取反 ~表达式++ 自增 ++变量名/变量…

SAM系列论文浅析

SAM(Segment Anything Model)系列代表了计算机视觉基础模型从"专用工具"向"通用感知系统"的演进。本文从视觉语言模型的角度深入分析SAM系列三代模型的技术演进,重点剖析SAM3如何通过引入可提示…

2023 ICPC Xian

2023 ICPC Xian ICPC Xian 也是非常坐牢的一场 E 从能力值小的人开始考虑,遍历他能胜利多少次,若他能胜利 \(x\) 次,则必须在交换操作后有一个长度为 \(2^x\) 的区间里面都是比他弱的,从小到大遍历胜利次数,同时维…

2025-10-15 ?

?Kasino game you have 1 coin,determine to join the following game or not. if you have n coins( n is a real number) before this round,you will have 9n w.p. 1/2,and have 0.1n w.p. 1/2 you will play infi…

为什么一部电影,一本书一看就喜欢

为什么一部电影,一本书一看就喜欢,我知道这跟这部作品的,要表达的思想有关,可为什么。。。因为这部电影你还没看完,内容你还不知道,你是怎么喜欢上的呢。真的很奇怪。。。也许,这是很肤浅的认识吧。就现在以前的…

20251015打卡

冒一下泡,我还活着哈哈哈

牛客119232 牛客2025秋季算法编程训练联赛1-提升组 游记

打了大约 $90min$ 离场,$4t$,整体题目较水。省流 打了大约 \(90min\) 离场,\(4t\),整体题目较水。10.15 内含剧透,请vp后再来。 不是题解!!!!!!! 赛前 晚上没吃饭,为了吃饭知道不会打的时间特别长。看到题…

BroadcastChannel跨页签通信复盘总结

BroadcastChannel API 提供了一个简单有效的跨页签通信解决方案,特别适合需要实时同步状态的同源页面场景。虽然存在一些局限性,但在合适的业务场景下,它能够以最小的开发成本实现良好的通信效果。 核心实现代码 //…

02020510 EF Core高级10-构建动态表达式树、不推荐动态构建表达式树、动态构建IQuerable、动态构建字符串

02020510 EF Core高级10-构建动态表达式树、不推荐动态构建表达式树、动态构建IQuerable、动态构建字符串 1. 不用Emit生成IL代码实现select的动态化(视频3-46) 1、Select(b=>new{b.Id,b.Name}) 2、运行时动态设定…

02020601 Web API01-顶级语句、全局using指令、可空类型、record类型(自动重写ToString、Equals)、init和private属性

02020601 Web API01-顶级语句、全局using指令、可空类型、record类型(自动重写ToString、Equals)、init和private属性 1.1 C#新语法01(视频4-1) 1.1 C#新语法 1、C#8.0、C#9.0和C#10.0中增加了很多的新语法,这里讲…

Nginx 之Rewrite 使用详解

Nginx 的 rewrite 模块是处理 HTTP 请求过程中的一个重要功能,它允许基于 Perl 兼容正则表达式(PCRE)对用户请求的 URI 进行重写,并返回 30x 重定向跳转或按条件执行相关配置。 Rewrite 指令 2.1 指令语法 Nginx 中…

libaom 在ubuntu 上用鸿蒙OHOS编译

1) 导入 OHOS 环境(当前会话)export OHOS_SDK=/root/harmony/command-line-tools/sdk/default/openharmony export OHOS_SYSROOT=$OHOS_SDK/native/sysroot export PATH=$OHOS_SDK/native/llvm/bin:$PATH# 确认编译器…

Aexlet-VGG2

使用CUDA 10轮结果显示还是Alex胜出

《膜拜!适合新手入门的卷积神经网络原理详解教程》读书报告

视频从卷积操作的基本概念入手,逐步深入到步长、边缘填充、特征图尺寸计算、参数共享、池化层作用以及整体网络架构等关键知识点,通过可视化的矩阵运算示例,让抽象的算法原理变得通俗易懂。(一)卷积操作:特征提取…

[asm/c]:SYSCALL系统调用的编号(x86_64)

[asm/c]:SYSCALL系统调用的编号(x86_64)[asm/c]:SYSCALL系统调用的编号(x86_64)一、基本说明1.  操作系统信息(ubuntu25.10):  Linux ubuntu 6.17.0-5-generic2.  系统调用编号文件的位置:  /usr/in…

公众号排版用什么好?一次技术视角的系统拆解:效率、兼容与智能协同

一、问题的起点:为什么“排版”成了内容生产的瓶颈? 在自媒体体系中,内容产出流程大致分为三步: 1️⃣ 内容构思与生成; 2️⃣ 视觉包装与排版; 3️⃣ 平台发布与分发。 在这三步中,排版环节的时间成本常常被低…