iMX6ULL 嵌入式linux开发 | 4G无线广播终端实现方案介绍

news2025/1/14 18:27:02

现有的有线广播,如村上的大喇叭,需要布线,施工麻烦。借助现有的4G网络,传输音频流完全没问题,4G网络结合流媒体技术和MQTT消息传递实现设备间的同步推拉流。这种方案可以避免有线布线的麻烦,同时实现4G无线广播。

方案简介

使用ffmpeg来进行音视频的编码和推流,同时使用流媒体服务器如live555或ZlmediaKit来实现流的传输和分发。结合MQTT消息传递,可以实现设备间的同步推流和拉流。

在使用ffmpeg开始录音并推流的情况下,如果另一个终端设备从流媒体服务器上拉流并播放,可以实现同步播放。ffmpeg是一个功能强大的多媒体处理工具,可以进行音频和视频的编解码、转换和处理等操作。当使用ffmpeg进行录音并推流时,它会将音频数据实时传输到流媒体服务器上。另一个终端设备通过从流媒体服务器上拉取音频流来播放。

方案框图

实现过程

在嵌入式Linux上实现该方案,可以按照以下步骤进行:

  1. 交叉编译ffmpeg:需要在嵌入式Linux系统上安装ffmpeg,用于音视频的编解码和推拉流功能。可以通过源码编译或者适配已有的ffmpeg包。移植参考教程:嵌入式linux下的FFmpeg交叉编译(最全面)-CSDN博客

  2. 选择流媒体服务器:选择适合嵌入式Linux系统的流媒体服务器,如live555或ZlmediaKit,并进行集成和配置。确保其能够在资源受限的环境下运行稳定,安装教程:ZLMediaKit 的安装及使用介绍-CSDN博客。

  3. MQTTBroker部署:需要部署一款mqtt的代理服务器,如emqx.测试期间用mosquitto也可以。

  4. MQTT库集成:选择适合嵌入式Linux系统的MQTT客户端库,如paho-mqtt,进行集成,以实现设备间的信息同步,同步推拉流。

  5. 开发应用程序:编写基于ffmpeg、流媒体服务器和MQTT库的应用程序,实现音视频的编解码、推拉流和MQTT消息通信。在嵌入式系统中以进程或者服务的形式运行该应用程序。

  6. 优化和测试:经过集成和开发后,对系统进行优化和充分测试,确保在嵌入式系统中能够稳定运行并满足实际需求。

测试脚本

简单起见,可以使用python脚本,编写一些测试用例来测试整体效果。使用两块儿开发板,各自装上4G无线网卡,一台设备作为播放设备,一台设备作为录音设备。

# 使用ffmpeg进行推流
ffmpeg -i input.mp4 -vcodec libx264 -acodec aac -f mpegts udp://<4G网络地址>:<端口>

# 使用ffmpeg进行拉流
ffmpeg -i udp://<4G网络地址>:<端口> -f mpegts output.mp4

#使用ffpmeg下载m3u8的网络视频并转码为mp4

ffmpeg -i "https://test.xyz/aaa/index.m3u8?auth=0Gds&exp=1697072400&v=6"  -bsf:a aac_adtstoasc -c copy out.mp4 -http_persistent 0

#也可以安装VLC播放器进行拉流播放测试

可以使用Python来调用ffmpeg命令。有几种不同的方法可以在Python中调用ffmpeg,其中一种方法是使用subprocess模块。以下是一个简单的示例,展示了如何在Python中使用subprocess来调用ffmpeg:

import subprocess

# 示例:使用ffmpeg将input.mp4转换为output.mp4
input_file = "input.mp4"
output_file = "output.mp4"

command = ["ffmpeg", "-i", input_file, "-c:v", "libx264", "-c:a", "aac", output_file]

subprocess.run(command)

 还可以使用Python的第三方库 ffmpeg-python 来更方便地调用ffmpeg。以下是一个在Python中调用ffmpeg的高级封装,使得调用ffmpeg更加直观和简单。

使用 ffmpeg-python 库的示例:

#测试代码
import ffmpeg

input_file = "input.mp4"
output_file = "output.mp4"

stream = ffmpeg.input(input_file)
stream = ffmpeg.output(stream, output_file, vcodec="libx264", acodec="aac")
ffmpeg.run(stream)

Python的paho-mqtt库的简单示例:

import paho.mqtt.client as mqtt

# 定义回调函数,用于处理连接建立后的行为
def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))

    # 订阅主题
    client.subscribe("test/topic")

# 定义回调函数,用于处理接收到新消息时的行为
def on_message(client, userdata, msg):
    print(msg.topic+" "+str(msg.payload))

# 创建一个MQTT客户端实例
client = mqtt.Client()

# 设置回调函数
client.on_connect = on_connect
client.on_message = on_message

# 连接MQTT服务器
client.connect("broker.example.com", 1883, 60)

# 在连接被建立后,client.loop_forever()用于保持连接,并处理接收到的消息
client.loop_forever()

 考虑的问题及优化

  1. 网络带宽和稳定性:4G网络的带宽和稳定性对于实时音视频传输至关重要,特别是在移动网络环境下,实现广播终端设备的监控很有必要。

  2. 嵌入式设备性能:嵌入式设备的处理能力和内存等资源是否足够支持音视频编解码、流媒体传输和MQTT通信,选择的嵌入式设备至少支持嵌入式linux系统,方便网络传输和音频编解码,如果想要降低成本,在单片机上实现的话,没有强大的ffmepg库,在推拉流和音视频解码上有门槛。

  3. 流媒体服务器选择:选择适合嵌入式系统的流媒体服务器,确保其能够在有限的资源下稳定运行并提供所需的流媒体功能,常见的如live555或ZlmediaKit流媒体服务器需要部署。

  4. 音视频编解码:嵌入式设备是否具备足够的计算能力进行音视频的编解码工作,并且选择合适的编解码器以兼顾音质和性能。

  5. 安全性:在使用4G网络进行传输时,需要考虑音视频流的加密传输和设备的安全防护措施。

其他资源

ZLMediaKit 的安装及使用介绍-CSDN博客

嵌入式linux下的FFmpeg交叉编译(最全面)-CSDN博客

使用ffmpeg和python脚本下载网络视频m3u8(全网最全面)_ffmpeg 下载m3u8-CSDN博客

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

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

相关文章

Spark在YARN上运行图解(资源调度+任务调度)及案例

前提&#xff1a;已经安装了spark集群&#xff0c;可参考上篇文章搭建&#xff1a;http://t.csdnimg.cn/UXBOp 一、Spark集群配置YARN 1、增加hadoop 配置文件地址 vim spark-env.sh 增加export HADOOP_CONF_DIR/usr/local/soft/hadoop-3.1.1/etc/hadoop 2、关闭虚拟内存 cd …

DMR对讲机数字协议详解

一、概述 DMR数字对讲机协议是欧洲电信标准协会在2005年4月推出的数字对讲机标准&#xff0c;后来又进行了多次修改。最新版本DMR数字对讲机协议是2007年12月公布的&#xff0c;共有四部分&#xff1a;第一部分为空中接口物理层和数据链路层协议&#xff0c;第二部分为空中接口…

【Unity AR开发插件】四、制作热更数据-AR图片识别场景

专栏 本专栏将介绍如何使用这个支持热更的AR开发插件&#xff0c;快速地开发AR应用。 链接&#xff1a; Unity开发AR系列 插件简介 通过热更技术实现动态地加载AR场景&#xff0c;简化了AR开发流程&#xff0c;让用户可更多地关注Unity场景内容的制作。 “EnvInstaller…”支…

牛客网刷题 | BC93 公务员面试

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 公务员面试现场打分…

【安装笔记-20240520-Windows-在 QEMU 中尝试运行 OpenWRT】

安装笔记-系列文章目录 安装笔记-20240520-Windows-在 QEMU 中尝试运行 OpenWRT 文章目录 安装笔记-系列文章目录安装笔记-20240520-Windows-在 QEMU 中尝试运行 OpenWRT 前言一、软件介绍名称&#xff1a;OpenWRT主页官方介绍 二、安装步骤测试版本&#xff1a;openwrt-23.05…

C语言在VS中使用scanf报错?

我们在使用VS时&#xff0c;用scanf函数&#xff0c;VS会报以下错误&#xff1a; 以下是解决方法&#xff1a; 来到输出窗口&#xff0c;复制以下语句&#xff1a;_CRT_SECURE_NO_WARNINGS 第一种暂时方法 1.在代码的第一行&#xff0c;写下&#xff1a;#define _CRT_SECURE_…

vuejs路由和组件系统

前端路由原理 createRouter * hash* window.addEventListener(hashChange)* 两种实现路由切换的模式&#xff1a;UI组件&#xff08;router-link&#xff0c;router-view&#xff09;&#xff0c;Api&#xff08;push()方法&#xff09; * history * HTML5新增的API &#xff0…

2024年电工杯A题论文首发+摘要分享+问题一代码分享

问题一论文代码链接&#xff1a;https://pan.baidu.com/s/1kDV0DgSK3E4dv8Y6x7LExA 提取码&#xff1a;sxjm --来自百度网盘超级会员V5的分享 园区微电网风光储协调优化配置 摘要&#xff1a;园区微电网由风光发电和主电网联合为负荷供电&#xff0c;为了尽量提高风光电量的…

机器人运动轨迹学习——GMM/GMR算法

机器人运动轨迹学习——GMM/GMR算法 前置知识 GMM的英文全称为&#xff1a;Gaussian mixture model&#xff0c;即高斯混合模型&#xff0c;也就是说&#xff0c;它是由多个高斯模型进行混合的结果&#xff1a;当然&#xff0c;这里的混合是带有权重概念的。 一维高斯分布 GMM中…

鸿蒙布局List简介

鸿蒙布局List简介 List--常见的布局容器List 创建方式创建方式一&#xff0c;通过Listitem创建方式二&#xff0c;通过ForEach和Listitem创建方式三&#xff0c;通过ListItemGroup List–常见的布局容器 List是在app开发中最常见的一种布局方式&#xff0c;例如通讯录、新闻列…

Vue3实现简单的瀑布流效果,可抽离成组件直接使用

先来看下效果图&#xff1a; 瀑布流中的内容可进行自定义&#xff0c;这里的示例图是通过不同背景颜色的展示进行区分&#xff0c;每个瀑布流中添加了自定义图片和文字描述。 实现方式&#xff1a; 1.建立子组件&#xff08;可单独抽离&#xff09;写出瀑布流的样式 文件名为…

远程桌面连接不上远程服务器,如何有效的解决远程桌面连接不上远程服务器的问题

在解决远程桌面连接不上远程服务器的问题时&#xff0c;我们需要采取一种专业且系统的方法来排查和修复可能存在的故障。以下是一些建议和步骤&#xff0c;帮助用户更有效地解决此类问题。 首先&#xff0c;用户需要确认远程服务器的状态和网络连接是否正常。 这包括检查服务器…

51汇编版--配套proteus仿真

代码配套的仿真&#xff0c;我自己试过是好使的&#xff0c;外部中断&#xff0c;计数功能要自己添加脉冲信号或按键才能有对应现象&#xff0c;自己搞一下子。 不限速下载链接 https://wwo.lanzoul.com/iQ46m1zm456j 密码:g92f 如果连接不正常&#xff0c;请尝试将lanzoul的…

Python游戏编程:一步步用Python打造经典贪吃蛇小游戏

贪吃蛇作为一款极其经典且广受欢迎的小游戏&#xff0c;是早期 Windows 电脑和功能手机&#xff08;特别是诺基亚手机&#xff09;流行度极高的小游戏&#xff0c;是当时功能手机时代最具代表性的游戏之一。游戏的基本规则和目标十分简单&#xff0c;但却极具吸引力&#xff0c…

【管理咨询宝藏111】安永某集团供应链流程设计及现状分析报告

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏111】安永某集团供应链流程设计及现状分析报告 【格式】PDF版本 【关键词】安永、供应链、流程优化 【核心观点】 - 缺乏客户分级&#xff0c;无…

力扣HOT100 - 75. 颜色分类

解题思路&#xff1a; 单指针&#xff0c;对数组进行两次遍历。 class Solution {public void sortColors(int[] nums) {int p 0;int n nums.length;for (int i 0; i < n; i) {if (nums[i] 0) {int tmp nums[i];nums[i] nums[p];nums[p] tmp;p;}}for (int i p; i …

visual studio 2022 ssh 主机密钥算法失败问题解决

 Solution - aengusjiang 问题&#xff1a; I follow the document, then check sshd_config, uncomment“HostKey /etc/ssh/ssh_host_ecdsa_key” maybe need add the key algorithms: #HostKeyAlgorithms ssh-ed25519[Redacted][Redacted]rsa-sha2-256,rsa-sha2-512 Ho…

对于高速信号完整性,一块聊聊啊(10)

本文包含的主要内容有: 过孔设计概述:从前面的各种基础知识到过孔设计,逐步对信号完整性有了初步了解,在过孔设计这里稍微做一个概述,也是个人的一些理解,算是一个小结。 过孔设计的必要性。 过孔结构的基础知识 实例:过孔设计仿真HFSS实例 过孔设计概述 通过前面…

如何运用多媒体,打造企业实力展示厅?

企业文化、产品是其长期发展的根本所在&#xff0c;为此越来越多的企业开始选择运用多媒体互动&#xff0c;来打造企业多媒体展厅的方式&#xff0c;对企业文化、品牌形象、产品进行推广宣传&#xff0c;并在多媒体互动装置的支持下&#xff0c;能让客户能够快速且全面的了解企…

【全开源】多场馆场地预定小程序源码(ThinkPHP+FastAdmin+UniApp)

场馆场地预定小程序源码一款基于ThinkPHPFastAdminUniApp开发的多场馆场地预定小程序&#xff0c;提供运动场馆运营解决方案&#xff0c;适用于体育馆、羽毛球馆、兵乒球馆、篮球馆、网球馆等场馆&#xff08;高级版&#xff09;