Java调用ffmpeg把rtsp视频流保存为MP4文件,并播放

前言:最近项目需要把rtsp的视频流截取保存为MP4文件。经过多方调研,最终找到方案:调用ffmpeg命令行完成转码。ffmpeg命令行确实稳定靠谱!ok,下面就开始分享代码。

1、环境工具准备
 ffmpeg的程序和一个稳定的rtsp流


这是我的ffmpeg的版本。

我这里rtsp流用的海康硬盘录里的,没有的同学可以网上找一些,有专门的网站提供一些免费的有一些流量的流,比如:
rtsp://rtspstream:e06d5bdf15e5f992e39ebb33506c805e@zephyr.rtsp.stream/movie
rtsp://rtspstream:742cb3f7bb397805f9e7829718fec9d8@zephyr.rtsp.stream/pattern

2、工具类代码,说几个重点也是我踩了很久才出来的坑:
 

1.ffmpegPath一定要写绝对路径的地址(如 D:\ffmpeg\ffmpeg.exe).
2.command在add的时候一定是一个字符一个位置不能直接拼成一句,也不要在单独拼接空格。否则直接会抛出无效的指令
3.获取的输入流必须单独建立一个线程来进行结果的打印,如果直接转字节打印,结束方法就会无效。
4.输出流在次和dos发送指令时一定要刷新。

核心处理类 RtspToMP4.java


import org.springframework.stereotype.Component;

import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * TODO:
 *
 * @Author: gaowh
 * @create: 2024/4/24 10:11
 */
@Component
public class RtspToMP4 {

    public class In implements Runnable{
        private InputStream inputStream;

        public In(InputStream inputStream) {
            this.inputStream = inputStream;
        }
        @Override
        public void run() {
            try {
                //转成字符输入流
                InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "gbk");
                int len = -1;
                char[] c = new char[1024];
         

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

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

相关文章

制造业工厂数字化转型的具体方法

制造业工厂数字化转型是指将传统的制造业生产过程和管理方式应用数字技术进行改造和升级,以提高生产效率、降低成本、优化产品质量和提升企业竞争力。 制造业数字化转型基本概念: 1. 数字化生产:将传统工艺流程数字化,通过自动化设…

【Linux】:epoll

高级IO 一.各种接口二.工作模式 按照man手册的说法: 是为处理大批量句柄而作了改进的poll. 一.各种接口 快速认识接口: events可以是以下几个宏的集合: EPOLLIN : 表示对应的文件描述符可以读 (包括对端SOCKET正常关闭); EPOLLOUT : 表示对应的文件描…

智慧灯杆综合管理平台建设思路及系统方案设计

一、建设思路 智慧灯杆综合管理平台的建设旨在实现城市基础设施的智能化、信息化和高效化。在构建这一平台时,我们首先要明确其核心理念:以灯杆为载体,整合各类城市服务资源,通过先进的物联网技术和大数据分析,为城市…

欧美助听器市场热门品牌盘点,国产爱可声备受青睐

近年来,随着中国技术的不断进步和品质的提升,国产助听器品牌爱可声在欧美市场备受瞩目。在欧美国家助听器市场,有许多热门品牌分别为:峰力、斯达克、瑞声达、爱可声等。这些品牌凭借其悠久的历史、先进的技术和高品质的产品&#…

Python3:强大的编程语言及其广泛应用

点击下载《Python3:强大的编程语言及其广泛应用》 1. 前言 Python3作为一种强大的编程语言,凭借其简洁易读、功能丰富以及强大的扩展性,已经成为编程界的热门选择。本文将详细介绍Python3的主要特性、应用领域以及它在实际项目中的优势&…

胖东来的商业启示!2024创业赛道!2024创业新项目新商机!2024创业风口!2024普通人的创业机会!2024创业赚钱项目!

在中国零售业,胖东来是“神”一般的存在,不讲业绩,只讲幸福,却造就了全国最具人效和坪效的零售门店,都说胖东来成功的核心秘诀是“把人当人”。 当然胖东来的成功可不是偶然,它背后是于东来多年来的坚持与努…

提高在线考试成绩的备考技巧与建议

参加在线考试已经成为现代学习的一部分,它的便利性和灵活性为学生提供了更多的学习机会。然而,为了在在线考试系统中取得好成绩,备考技巧是非常重要的。 设置明确的学习目标 在备考在线考试之前,为自己设定明确的学习目标是非常重…

通义灵码-IDEA的使用教程

通义灵码-IDEA的使用教程 1、通义灵码是什么? 通义灵码,是阿里云出品的一款基于通义大模型的智能编码辅助工具,提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、研发智能问答、异常报错排查等能力&#…

【svgwrite 库简介,附代码】如何将 .ttf 字体文件转化为 .svg 矢量图形?

当涉及到字体和矢量图形时,.ttf 和 .svg 是两种不同的文件格式: .ttf (TrueType Font): .ttf 文件是一种常见的字体文件格式,用于存储 TrueType 字体。TrueType 是一种字体轮廓的标准,它使用贝塞尔曲线描述字形&…

linux中git的使用

为什么要有git git相当于一个仓库可以让我们更好的去管理我们的代码,实现版本的控制,上传到云端仓库。有了git,就可以实现多人同时开发一个项目(每个负责一部分代码,最后都上传到同一个仓库)。 git github/gitee 的区…

羊大师分享,羊奶夏日里的养生佳品

羊大师分享,羊奶夏日里的养生佳品 羊奶,作为夏日里的养生佳品,确实拥有诸多益处。在炎炎夏日,人体面临着高温、湿度的双重考验,身体容易出现各种不适,而羊奶正好可以为我们提供多方面的滋养与保护。 羊奶…

UTONMOS:用区块链技术拓展商业边界在哪里?

引言 大约从 2021 年Web 3 这个新概念开始受到风险基金和科技圈的普遍关注。但如果你对过去几年区块链的发展历史足够了解,就应该已经意识到现在的 Web 3 并不是什么新技术,甚至不是旧技术的进步,它只是一个基于区块链技术的宏大构想。 我是…

光伏储能控制系统的功能策略

一、控制策略 1、功率控制策略 光伏阵列的输出功率受光照和温度影响,最大功率点是转换太阳能为电能的最高效点。MPPT控制器根据实时参数调整光伏阵列工作点,确保其始终处于最大功率输出状态,提高能量转换效率,增加发电量&#x…

产品经理好干吗?

赚钱的工作都不轻松吧,除非是家里资源好的。 产品经理的薪资还是可观的 ,小白如何成为产品经理? 首先要有经验,有理论知识,对想从事产品经理相关岗位的人来说,这基本是个必考的证书了,感兴趣的…

【每天一个linux小知识】nslookup

往期文章 tailf 和 tail -f 目录 往期文章什么是 nslookup示例参考 什么是 nslookup nslookup全称 name server lookup nslookup 是一款常用的网络工具,用于查询 DNS 的记录。通过 nslookup,用户可以查找特定主机的 IP 地址、查询域名的 MX 记录&…

Seatunnel-web build:prod 报错 jsx问题

问题1 JSX element implicitly has type any because no interface JSX.IntrinsicElements exists. 问题剖析 在使用typescript的时候,在vue或react、node中报以上错误,是JSX 元素隐式具有类型 "any",因为不存在全局类型 "J…

three.js 3D Banner实战

需求场景 1、加载glb模型 2、设置背景 3、让第一个模型转动&#xff0c;并调整模型的转动速度 4、设置模型的宽度。 遇到的问题 1、为什么加载的模型不能转动&#xff1f; 加载的glb模型需要加入到goup里面才能转动。 代码实施 <script setup> import * as THREE from…

UTC和北京时间

influxdb 的时间为UTC和北京时间相差8小时&#xff0c;需要经常转化&#xff0c;所以有下面的2个常用时间 public static void main(String[] args) {//北京时间当天0点ZonedDateTime dateTime ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));ZonedDateTime beijin…

【zabbix7】新版本尝鲜之connector

zabbix历史版本中&#xff0c;会使用python脚本&#xff0c;把zabbix的告警发送到kafka进行二次处理&#xff0c;或者使用filebeat把zabbix的Export的njson指标数据发送到kafka进行二次处理&#xff0c;然而在zabbix7中新增了新功能connector简化了操作并且可以根据tag进行区分…

微信订阅号绑定Coze(扣子),使用上GPT4

之前试过国外的Coze可以绑定一些通讯工具&#xff0c;从而可以使用相当于chatgpt4的功能&#xff0c;但对于我们来说&#xff0c;使用不太方便。 后来头条又有了国内版的Coze(扣子)&#xff0c;发现可以绑定微信&#xff0c;但那时只有微信服务号可以使用&#xff0c;个人订阅…