【Java+ffmpeg(1),我就不信你还听不明白了

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

前言

随着浏览器版本升级,新版本的浏览器都已经不在支持Flash插件,所以浏览器端无法直接对RTMP协议的流进行解析并播放,需要通过一些其它手段解决浏览器端RTMP流的播放问题。


提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是ffmpeg

FFmpeg是一个用于处理数字音频和视频的开源工具库。它提供了录制、转换、流化音视频以及后期处理的完整解决方案,具有很高的质量和可移植性。FFmpeg 包含了非常先进的音频/视频编解码库 libavcodec,其中很多 codec 都是从头开发的,以确保高可移植性和编解码质量。它支持多种媒体格式的封装和解封装,包括多种音视频编码、多种协议的流媒体、多种色彩格式转换、多种采样率转换、多种码率转换等。FFmpeg 框架提供了多种丰富的插件模块,包括封装与解封装的插件、编码与解码的插件等。它适用于多种操作系统,包括 Linux、Windows、Mac OSX 等。此外,FFmpeg 的编解码库还可以使用 GPU加速,以提高处理速度和效率。

二、什么是Node-media-server

Node-Media-Server 是一个 Node.js 实现的 RTMP/HTTP/WebSocket/HLS/DASH 流媒体服务器。
特性:
跨平台支持 Windows/Linux/Unix
支持的音视频编码 H.264/H.265/AAC/SPEEX/NELLYMOSER
支持缓存最近一个关键帧间隔数据,实现 RTMP 协议秒开
支持 RTMP 直播流转 LIVE-HTTP/WS-FLV 流,支持 NodePlayer.js 播放
支持星域 CDN 风格的鉴权
支持事件回调
支持 https/wss 加密传输
支持服务器和流媒体信息统计
支持 RTMP 直播流转 HLS,DASH 直播流
支持 RTMP 直播流录制为 MP4 文件并开启 faststart
支持 RTMP/RTSP 中继
支持 API 控制中继
支持实时多分辨率转码

三、准备工具

(1)ffmpeg.exe
(2)Node-media-server
(3)nginx_1.7.11.3_Gryphon

三、实例

1.Java调用ffmpeg进行推流

Java对ffmpeg的调用可以通过cmd命令的方式进行调用,此处以将本地视频文件进行推流为例讲解,接摄像头只需要对命令进行更换即可,只提供思路,具体调用实现方式,代码如下:

/\*\*
 \* ffmpeg进行hls推流
 \* @param resourceSrc 资源地址(本地资源)
 \* @param ffmpegurl ffmpeg.exe存放地址
 \* @param livepath hls 为索引文件地址(需与Nginx配置文件的索引存放地址一致),rtmp为rtmp://localhost:8899/hls2/(此地址为Nginx代理的rtmp协议地址)
 \* @param playName 流名称
 \* @param type 类型hls/rtmp
 \*/
public static void hlsPush(String resourceSrc,String ffmpegurl,String livepath,String playName,String type) {
		    	String all = "cmd /c start /b ffmpeg -re -i "+resourceSrc+" -vcodec libx264 -vprofile baseline -acodec aac -ar 44100 -ac 1 -f "+type+" "+livepath+playName;
		        String line =null;
		        StringBuilder sb = new StringBuilder();
		        Runtime runtime = Runtime.getRuntime();
		        try {
		            System.out.println(all);
		            java.lang.Process process = runtime.exec(all,null,new File(ffmpegurl));
		            InputStream errorStream = process.getErrorStream();
		            InputStream inputStream = process.getInputStream();
		            runComm(errorStream);
		            runComm(inputStream);
		            try {
		            	process.waitFor();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
		        } catch (IOException e) {
		            e.printStackTrace();
		        }
				
 }
/\*\*
 \* rtmp推流
 \* @param ffmpegUrl ffmpeg工具路径
 \* @param input 输入(拟推流本地文件地址)
 \* @param output 输出
 \* @return
 \*/
	public static boolean pushRtmpLive(String ffmpegUrl,String input,String output) {
    	String allcom = "cmd /c start /b ffmpeg -re -i "+input+" -vcodec libx264 -acodec aac -ar 44100 -f flv "+output;
        String line =null;
        StringBuilder sb = new StringBuilder();
        Runtime runtime = Runtime.getRuntime();
        try {
            System.out.println(allcom);
            java.lang.Process process1 = runtime.exec(allcom,null,new File(ffmpegUrl));
            InputStream errorStream = process1.getErrorStream();
            InputStream inputStream = process1.getInputStream();
            runComm(errorStream);
            runComm(inputStream);
            try {


**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Linux运维工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/8b8f58657d3ba97603aeb4d0882c483d.png)
![img](https://img-blog.csdnimg.cn/img_convert/970992897b5ad6e3174203435f843599.png)
![img](https://img-blog.csdnimg.cn/img_convert/688918cb2077c898919061c475e64382.png)
![img](https://img-blog.csdnimg.cn/img_convert/588e031f749631727b694c119df5b0a4.png)
![img](https://img-blog.csdnimg.cn/img_convert/d3b455a46c9ffe11a69772f49e98b921.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)**
![img](https://img-blog.csdnimg.cn/img_convert/44afb543c8f8b54acf8f73e43b0bf9e2.jpeg)



### 最后的话

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

### 资料预览

给大家整理的视频资料:

![](https://img-blog.csdnimg.cn/img_convert/e1946a6f00bf06d791876b9a93e3358a.png)

给大家整理的电子书资料:

  

![](https://img-blog.csdnimg.cn/img_convert/ba49986b8d54fa3b2ce19283e0da1693.png)



**如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!**


[**一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!**](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)

**AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算**

人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值