【媒体开发】利用FFMPEG进行推拉流

目录

1. 下载并启动媒体服务

2. 使用 FFMPEG 拉流并推送到指定服务地址

3. 客户端拉流


1. 下载并启动媒体服务

MediaMTX,也即之前的rtsp-simple-server,是一个即用型、零依赖的实时媒体服务器和媒体代理,允许发布、读取、代理和记录视频和音频流。

从Releases · bluenviron/mediamtx · GitHub找到最新版,下载对应平台的软件包,如 linux x86-64 选绿色框那个,windows x86-64 则选红色框那个:

解压后,运行即可:

# linux x86-64:
./mediamtx mediamtx.yml

2. 使用 FFMPEG 拉流并推送到指定服务地址

2.1 关于FFMPEG

ffmpeg是一个通用媒体转换器。它可以读取多种 输入 - 包括实时抓取/记录设备 - 过滤和转码它们 成多种输出格式。

ffmpeg从任意数量的输入“文件”读取。 (可以是常规的 文件、管道、网络流、抓取设备等),由 -i 选项,并写入任意数量的输出“文件”,这些文件是 由纯输出 url 指定。在命令行中找到的任何内容 不能将选项解释为被视为输出 url。

每个输入或输出 URL 原则上可以包含任意数量的流 不同类型(视频/音频/字幕/附件/数据)。允许的数量和/或 流的类型可能受到容器格式的限制。选择哪个 输入将进入的流,输出将自动完成 或使用 -map 选项(请参阅流选择章节)。

要引用选项中的输入文件,您必须使用它们的索引(从 0 开始)。例如。 第一个输入文件是 0,第二个是 1,依此类推。同样,流 文件内由它们的索引引用。例如。 2:3 指的是 第三个输入文件中的第四个流。另请参阅流说明符一章。

作为一般规则,选项将应用于下一个指定的 文件。因此,顺序很重要,你可以有相同的 多次在命令行上使用选项。每次出现都是 然后应用于下一个输入或输出文件。 此规则的例外是全局选项(例如详细级别), 应首先指定哪些内容。

不要混合输入和输出文件 - 首先指定所有输入文件,然后指定所有 输出文件。也不要混合属于不同文件的选项。全部 选项仅适用于下一个输入或输出文件,并在文件之间重置。

——官方文档介绍

安装:

对于Debian或者Ubuntu:

sudo apt-get update
sudo apt-get install ffmpeg

对于CentOS:

sudo yum install epel-release
sudo yum install ffmpeg

2.2 开始拉流、推流

启动媒体服务后,即可进行拉流并推送:

ffmpeg -re -i 视频文件路径或者网络摄像头地址 -c copy -f rtsp rtsp://127.0.0.1:8554/stream

如果想循环推某个视频,可以使用参数-stream_loop,可以指定循环多少次,如为-1,则循环无数次:

ffmpeg -re -stream_loop -1 -i 视频文件路径 -c copy -f rtsp rtsp://127.0.0.1:8554/stream

3. 客户端拉流

可直接用 ffplay 进行拉流与展示:

ffplay rtsp://127.0.0.1:8554/stream

也可用某些支持网络 URL 的播放器进行播放,如 VLC,SMPlayer 等;

也可以通过 opencv 拉流来获取每一帧图像进行各种处理:

video = cv2.VideoCapture("rtsp://127.0.0.1:8554/stream")

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

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

相关文章

设计模式_行为型模式_观察者模式

行为型模式:主要关注的是对象之间的通信 例如:一个对象调用另一个对象的成员 方法 目的: 观察者-监听者模式(发布-订阅模式)设计模式:主要关注的是对象的一对多的关系,也就是多个对象都依赖一…

hadoop使用内置包进行性能测试TestDFSIO、NNBench、MRBench、SliveTest

hadoop使用内置包进行性能测试 hadoop使用内置包进行性能测试 hadoop使用内置包进行性能测试TestDFSIO read & writeNNBenchMRBenchSliveTest TestDFSIO read & write TestDFSIO 是一个 Hadoop 自带的基准测试工具,用于测试 HDFS 的读写性能。它会模拟大量…

vue3制作类微信的六位的密码输入框

这是一个 Vue 3 组件,用于创建一个自定义的密码输入框。这个输入框由6个小输入框组成,每个小输入框只能输入一个字符。当用户在一个小输入框中输入字符后,焦点会自动跳到下一个输入框,直到所有6个输入框都填满为止。当6个字符都输…

Scrapy的crawlspider爬虫

scrapy的crawlspider爬虫 学习目标: 了解 crawlspider的作用应用 crawlspider爬虫创建的方法应用 crawlspider中rules的使用 1、crawlspider是什么 回顾之前的代码中,我们有很大一部分时间在寻找下一页的url地址或者是内容的url地址上面,这…

Web安全-SQL注入常用函数(二)

★★实战前置声明★★ 文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 1、MySQL数据库构成 初始化安装MySQL数据库后(…

智能优化算法应用:基于模拟退火算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于模拟退火算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于模拟退火算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.模拟退火算法4.实验参数设定5.算法结果6.…

Android---Kotlin 学习007

集合可以方便你处理一组数据,也可以作为值参传给函数,和我们学过的其它变量类型一样,List、Set 和 Map 类型的变量也分为两类,只读和可变。 List创建与元素获取 通过 listOf() 函数创建一个 List 集合。 val listString : List&…

javaWeb文件上传

1.文件上传的应用场景:提交作业 上传头像 提交简历(上传附件) 上传商品,图书图片 2.文件上传的前台如何编写以及注意事项: 1.肯定需要用到表单 2.文件上传的那一栏需要提供 input的typefil…

UnicodeUtil.java

计算精度问题带根号√ √ UNICODE字符表 package util;import java.util.regex.Matcher; import java.util.regex.Pattern;/*** radical* 根号√运算问题 Unicode * * author ZengWenFeng* email 117791303qq.com* date 2015.04.07*/ public class UnicodeUtil {/*** 字…

ShardingSphere数据分片之读写分离

1、概述 读写分离是一种常见的数据库架构,它将数据库分为主从库,一个主库(Master)用于写数据,多个从库(Slave)进行轮询读取数据的过程。主从库之间通过某种通讯机制进行数据的同步。 所以&…

React Native android环境搭建,使用夜神模拟器进行开发(适用于0.73+版本)

前言 本文基于:“react-native” : “^0.73.0” 1.安装 Node Node.js,下载时选择 > 18 版本 2.下载并安装 JDK Java SE Development Kit (JDK),下载时选择 17 版本 安装 验证是否安装成功 打开命令提示符输入 javac -version 回车 3.…

re:Invent 产品体验与感受分享:Amazon ElastiCache Serverless 缓存的即时扩展

授权说明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在亚马逊云科技开发者社区、 知乎、自媒体平台、第三方开发者媒体等亚马逊云科技官方渠道)。 文章目录 前言产品介绍产品使用步骤1.创建缓存服务2.安全组开放访问权限…

【Python】解读a+=b 和 a=a+b是否一样?看完恍然大悟!

文章目录 前言一、可变对象和不可变对象总结 前言 在Python中,对于可变和不可变对象的行为差异是一个重要概念,特别是在涉及到和操作时。理解这一点对于编写高效且无误的代码至关重要。 一、可变对象和不可变对象 首先,让我们谈谈可变和不可…

【INTEL(ALTERA)】 quartus使用Nios® V 处理器系统仿真失败,没有打印输出消息

说明 在 Synopsys* VCS* 和 VCS* MX 仿真器中模拟由以下位置生成的 Nios V 处理器系统时,可能会出现该问题: 英特尔 Quartus Prime Pro Edition 软件版本 23.1 至 23.4,或 英特尔 Quartus Prime Standard Edition 软件版本 23.1std 这是由…

位运算技巧

获取某个10进制数值的二进制最高位 public class Main {public static void main(String[] args) {// 调用 highBit 函数,传入参数 67int result highBit(67);// 输出结果的二进制表示System.out.println(Integer.toBinaryString(result)); // 输出 1000000}/***…

打工人副业变现秘籍,某多/某手变现底层引擎-Stable Diffusion替换背景

在Stable Diffusion软件中,使用ControlNet+模型实现固定物体批量替换背景 出图的流程。 一、准备好图片 1.你需要准备好一些白底图或者透明底图用于训练模型。 2.你需要准备同样角度的其他背景色底图用于ControlNet勾线 3.注意检查你的图片尺寸,是否为1:1,…

离散型随机变量的分布律(也称概率质量函数:probability mass function, PMF)

设是一个离散型随机变量,可能的取值为,取各个值的概率记为: (1) 其中 并且, 公式(1)就称为离散型随机变量的分布律,也称概率质量函数:probability ma…

svn使用步骤

服务器端主要用来创建仓库,然后供客户端去访问与下载。 客户端: 图形化界面的使用:这里使用的是tortoise工具 1.创建一个文件夹作为自己的本地仓库目录 2.鼠标右键文件夹,在菜单中点击SVN checkout 3.找个图 这一步骤相当于git中…

最新版xposed编写教程

环境: andriod studio2023.1.1 jdk17 gradle8.2 流程: 1.新建项目,选empty views activity即可(其他也可) 2.语言选java,其他路径名称等暗战自己需要随便改,然后点击finish 3.修改AndroidMan…

调用接口 Promise.all的简单使用方式

created() {const requests [axios.get(/api/data1),axios.get(/api/data2),axios.get(/api/data3)];Promise.all(requests).then(responses > {// 处理响应数据const data1 responses[0].data;const data2 responses[1].data;const data3 responses[2].data;// ...}).c…