当前位置: 首页 > article >正文

嵌入式音视频开发(零)移植ffmpeg及推流测试

系列文章目录

嵌入式音视频开发(零)移植ffmpeg及推流测试
嵌入式音视频开发(一)ffmpeg框架及内核解析

文章目录

  • 系列文章目录
  • 前言
  • 一、ffmpeg
  • 二、前期准备
    • 2.1 ffmpeg的移植
    • 2.2 流媒体服务器
    • 2.3 VLC播放器
  • 三、推流测试


前言

笔者最近需要进行网络推流项目的学习,从今天开始将更新这部分内容,希望大家可以一起学习。


一、ffmpeg

  FFmpeg 是一个开源的、多功能的命令行工具集,广泛用于视频、音频的处理和转换。它由几个组件构成,其中最核心的就是 ffmpeg 命令行工具、libavcodec 库(用于编解码)、libavformat 库(用于处理文件格式)等。它不仅仅是一个工具,还是一个包含多种库的多媒体处理框架,广泛用于视频编辑、流媒体、编码、解码等场景。
  FFmpeg由三个组件构成:ffmpeg(核心命令行工具,用于处理音视频文件)、ffplay(一个简单的媒体播放器,基于 FFmpeg 库)以及ffprop(用于流式传输协议(如 RTMP、RTSP)的相关工具)。它可以实现视频格式转换、视频流媒体、视频编辑、音频提取、批处理等功能。

二、前期准备

移植文件

2.1 ffmpeg的移植

  Ubuntu系统可以使用apt安装工具进行简易安装,如果想获取最新版本则需要手动安装。
  如果是板级添加ffmepg则可以参考立创吴工分享的步骤进行操作即可【Buildroot】添加ffmpeg,开发板上Ubuntu系统这样也可以添加成功。

2.2 流媒体服务器

  这里笔者使用的是采用mediamtx,这是一个很简单的推流服务器,而且不需要额外配置环境。
在这里插入图片描述
  这里根据需求选择对于的版本即可,例如你需要在PC端Linux环境下就选则XXX_linux_amd64.tar.gz,而在arm端则选择对应的armX框架,例如笔者选择的是XXX_linux_amdv8.tar.gz。
在这里插入图片描述
  下载完成后进入文件夹,可以看到以上3个文件拷贝,将其到开发板并启动服务(切记要先启动再推流)。

# 在后台运行mediamtx流媒体服务器
./mediamtx &

  除此之外,nginx作为老牌流服务器,在链接稳定性上还是更胜一筹,如果大家会自己编译也可以选择这个,在笔者的压缩包有已经编好的文件,大家也可以直接移植到arm上。

2.3 VLC播放器

  常用的工具为VLC播放器(以后也可以自己写一个类似的拉流播放器),选择媒体→打开网络串流→输入推流地址,如下所示:
在这里插入图片描述

三、推流测试

# 进行网络推流,这里要选择你自己的摄像头和推流地址
ffmpeg -f v4l2 -i /dev/video4 -bufsize 2000k -async 1 -framerate 30 -pix_fmt yuv420p -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -rtsp_transport tcp -f rtsp rtsp://192.168.234.25:8554/streamSS

# 指令解释:
 -f v4l2:指定输入格式为 Video4Linux2,这是 Linux 操作系统下视频设备的一个接口。
 -i /dev/video4:指定Linux 下的视频设备节点,代表一个视频捕捉设备。
 -bufsize 2000k:设置内部缓冲区大小为 2000k 字节,这有助于控制数据流的速率。
 -async 1:这个参数用于调整音视频同步。值 1 表示允许小的同步调整。
 -framerate 30:设置视频捕捉的帧率。
 -pix_fmt yuv420p:指定像素格式。yuv420p 是一种视频像素格式,属于 YUV 家族。
 -vcodec libx264:指定视频编码器为 libx264,这是一个非常高效的视频编码库。
 -preset:v ultrafast:设置编码预设。ultrafast 预设意味着编码速度最快,但可能会牺牲压缩效率和质量。
 -tune:v zerolatency:优化编码器设置以减少延迟。这对于实时流非常有用。
 -rtsp_transport tcp:指定 RTSP 流的传输协议为 TCP。相比于 UDP,TCP 提供了更可靠的传输。
 -f rtsp [推流地址]:指定输出格式为 RTSP(实时流协议),用于实时视频流的传输。

  这里的播放效果和网络、芯片性能和摄像头性能均有关系,要想获取更好的显示效果可以根据需求选择。
在这里插入图片描述


免责声明:本文参考了网上公开的部分资料,仅供学习参考使用,若有侵权或勘误请联系笔者


http://www.kler.cn/a/542958.html

相关文章:

  • 三步本地部署deepseekr1,支持macOs,ubuntu,Windows
  • 【分布式理论9】分布式协同:分布式系统进程互斥与互斥算法
  • 学习 URL 传参中哪些字符是支持的,哪些是不支持的
  • 02.06、回文链表
  • 网络工程师 (31)VLAN
  • RDK新一代模型转换可视化工具!!!
  • Spring Boot 配置 Mybatis 读写分离
  • 【机器学习案列】车辆二氧化碳排放量预测
  • Redis哨兵模式相关问题及解决方案
  • <tauri><rust><GUI>基于rust和tauri的图片显示程序(本地图片的加载、显示、保存)
  • Qt QOpenGLFunctions详解
  • AF3 drmsd函数解读
  • .Net使用EF Core框架如何连接Oracle
  • JVM-Java虚拟机
  • 在postman中设置环境变量和全局变量以及五大常用响应体断言
  • 【C#零基础从入门到精通】(十四)——面向对象三大特征C#封装详解
  • 二叉树、平衡二叉树、B树与B+树的区别与应用
  • redis的数据结构介绍(string
  • 心脏滴血漏洞复现(CVE-2014-0160)
  • 备战蓝桥杯:双指针(滑动窗口)算法之逛花展
  • SpringBoot分布式开发依赖项中,除了myql、redis,都要哪些依赖项是需要本地安装软件并开启服务的?
  • 蓝桥杯---N字形变换(leetcode第6题)题解
  • IDEA中列举的是否是SpringBoot的依赖项的全部?在哪里能查到所有依赖项,如何开发自己的依赖项让别人使用
  • Django:构建高效Web应用的强大框架
  • Idea集成deepseek生成代码
  • ffmpeg -hwaccels