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

现有的有线广播,如村上的大喇叭,需要布线,施工麻烦。借助现有的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博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot+vue的智慧外贸平台

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

Elasticsearch 分析器(内置分析器,自定义分析器,IK分析器)

Elasticsearch 分析器&#xff08;内置分析器&#xff0c;自定义分析器&#xff0c;IK分析器&#xff09; 内置分析器使用分析器自定义分析器中文分析器&#xff08;IK分析器&#xff09;安装使用添加词典 内置分析器 官网&#xff1a;https://www.elastic.co/guide/en/elasti…

如何确保大模型 RAG 生成的信息是基于可靠的数据源?

在不断发展的人工智能 (AI) 领域中&#xff0c;检索增强生成 (RAG) 已成为一种强大的技术。 RAG 弥合了大型语言模型 (LLM) 与外部知识源之间的差距&#xff0c;使 AI 系统能够提供更全面和信息丰富的响应。然而&#xff0c;一个关键因素有时会缺失——透明性。 我们如何能够…

翻译《The Old New Thing》- What‘s the deal with the EM_SETHILITE message?

Whats the deal with the EM_SETHILITE message? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20071025-00/?p24693 Raymond Chen 2007年10月25日 简要 文章讨论了EM_SETHILITE和EM_GETHILITE消息在文档中显示为“未实现”的原因。这些…

Redis开发实战

单机部署安装 服务端下载&#xff0c;安装&#xff0c;启动去官网下载最新的版本&#xff1a;http://redis.io/download &#xff0c;这里用的是3.0.2解压后&#xff0c;进入解压好的文件夹redis的安装非常简单&#xff0c;因为已经有现成的Makefile文件&#xff0c;所以直接先…

NASA数据集——阿尔法喷气式大气实验甲醛(HCHO)数据

Alpha Jet Atmospheric eXperiment Formaldehyde Data 简介 阿尔法喷气式大气实验甲醛数据 阿尔法喷气式大气实验&#xff08;AJAX&#xff09;是美国国家航空航天局艾姆斯研究中心与 H211, L.L.C. 公司的合作项目&#xff0c;旨在促进对加利福尼亚、内华达和太平洋沿岸地区的…

从0开始带你成为Kafka消息中间件高手---第一讲

从0开始带你成为Kafka消息中间件高手—第一讲 网站的用户行为日志&#xff0c;假设电商网站&#xff0c;我现在需要买一个阅读架&#xff0c;看书的架子 京东&#xff0c;我平时比较喜欢用的是京东&#xff0c;送货很快&#xff0c;自营商品&#xff0c;都是放在自己的仓库里…

【字典树(前缀树) 异或 离线查询】1707. 与数组中元素的最大异或值

本文涉及知识点 字典树&#xff08;前缀树&#xff09; 位运算 异或 离线查询 LeetCode1707. 与数组中元素的最大异或值 给你一个由非负整数组成的数组 nums 。另有一个查询数组 queries &#xff0c;其中 queries[i] [xi, mi] 。 第 i 个查询的答案是 xi 和任何 nums 数组…

阿里巴巴最新研究突破:自我演化大模型,打破性能天花板

获取本文论文原文PDF&#xff0c;请在公众号【AI论文解读】留言&#xff1a;论文解读AI论文解读 原创作者 | 柏企 引言&#xff1a;自我进化的新篇章 在人工智能领域&#xff0c;大型语言模型&#xff08;LLMs&#xff09;的发展正迎来一场革命性的变革。传统的训练模式依赖…

从0开始学统计-方差分析

1.什么是方差分析&#xff1f; 方差分析&#xff08;ANOVA&#xff0c;Analysis of Variance&#xff09;是一种统计方法&#xff0c;用于比较三个或三个以上组之间的平均值是否存在显著差异。它适用于以下情况&#xff1a; &#xff08;1&#xff09; 当我们有三个或三个以上…

LLMs之PEFT之Llama-2:《LoRA Learns Less and Forgets LessLoRA学得更少但遗忘得也更少》翻译与解读

LLMs之PEFT之Llama-2&#xff1a;《LoRA Learns Less and Forgets LessLoRA学得更少但遗忘得也更少》翻译与解读 导读&#xff1a;该论文比较了LoRA与完全微调在代码与数学两个领域的表现。 背景问题&#xff1a;微调大规模语言模型需要非常大的GPU内存。LoRA这一参数高效微调方…

.NET 一款内部最新的免杀WebShell

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

【Linux】Linux的基本指令_1

文章目录 二、基本指令1. whoami 和 who2. pwd3. ls4. clear5. mkdir 和 cd6. touch7. rmdir 和 rm 未完待续 二、基本指令 直接在命令行的末尾&#xff08;# 后面&#xff09;输入指令即可。在学习Linux指令的过程中&#xff0c;还会穿插一些关于Linux的知识点。 1. whoami …

ftp是什么,ftp能做什么,ftp有什么用 -----ftp介绍

大家好&#xff0c;我是风屿&#xff0c;今天开始我会给大家介绍一些关于网络方面的配置以及介绍等等&#xff0c;今天是ftp FTP中文名字叫做文件传输协议&#xff0c;英文名字叫做File Transfer Protocol&#xff08;简称为ftp&#xff09; FTP 是因特网网络上历史最悠久的网…

哔哩哔哩抢红包项目,b站抢红包脚本,号称单机单号一天5-50+(教程+软件)

一、哔哩哔哩抢红包项目介绍&#xff1a; 1. 玩法规则方面&#xff1a; 参与直播间抢红包活动&#xff0c;赢取礼物。每日领取礼物上限为20-30个&#xff0c;达到上限后&#xff0c;系统将自动跳转至养号哗哩礼物价值。目前电池兑换比例&#xff1a;10电池1元。 2. 礼物变现方…

2024年春招高薪职业报告:大模型算法研究员领跑

近日&#xff0c;脉脉高聘发布的研究报告《2024春招高薪职业和人才洞察》&#xff08;以下简称《洞察》&#xff09;显示&#xff0c;2024年一季度&#xff0c;大模型算法研究员新发岗位以平均月薪6.4万元领跑高薪岗位榜。受人才培养周期和技术门槛影响&#xff0c;人工智能行业…

飞机大战游戏实现揭秘

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、游戏概览与核心玩法 二、游戏模块详解 1. 游戏主循环模块 2. 创建初始化模块 三、关…

云端智享——记移动云手写docker-demo

目录 前言什么是移动云&#xff1f;为何我会使用移动云&#xff1f;移动云“好”在哪里&#xff1f;资源大屏显示继续项目部署其他细节 移动云产品的评价未来展望 前言 在如今这个万物都上云的时代&#xff0c;我们需要选择合适的云产品&#xff0c;而移动云有着独特的优势和广…

SpringBoot使用rsa-encrypt-body-spring-boot实现接口加解密

废话不多说&#xff0c;直接上代码 引入依赖 <dependency><groupId>cn.shuibo</groupId><artifactId>rsa-encrypt-body-spring-boot</artifactId><version>1.0.1.RELEASE</version> </dependency>配置文件 rsa:encrypt:# 是…

python机器学习及深度学习在空间模拟与时间预测

原文链接https://mp.weixin.qq.com/s?__bizMzUyNzczMTI4Mg&mid2247628504&idx2&sn6fe3aeb9f63203cfe941a6bb63b49b85&chksmfa77a9e5cd0020f3aa4f01887e75b15096a182c2b5b42c1044787aa285c650f1469a0ef28aec&token2124656491&langzh_CN&scene21#we…