直播流如何保存到本地

  1. 使用javaCV的FFmpegFrameGrabber帧捕捉器捕捉流的音频帧和视频帧
  2. 使用javacpp的FFmpeg模块调用C/C++类库将帧录制到本地文件

相关资料

1. 在windows下搭建、配置nginx流媒体服务器,并进行rtmp流的推流、拉流测试
2. 关于使用FFmpeg推流时,live目录的理解
3. 在windows下配置nginx流媒体服务器,使其支持hls协议的直播和rtmp点播
4. 使用FFmpeg命令进行hls切片,得到的ts文件时长不准确
5. java使用ffmpeg实现视频切割
6. 流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)

所需依赖

<dependency><groupId>org.bytedeco</groupId><artifactId>javacv</artifactId><version>1.4.3</version>
</dependency>
<dependency><groupId>org.bytedeco.javacpp-presets</groupId><artifactId>ffmpeg-platform</artifactId><version>4.0.2-1.4.3</version>
</dependency>
<!--这个依赖区分Linux系统和windows系统-->
<dependency><groupId>com.github.hoary.ffmpeg</groupId><artifactId>FFmpeg-windows-x86_64</artifactId><version>2.0.1.1</version>
</dependency>

代码实现,这里启用线程录制

import org.bytedeco.javacpp.avcodec;
import org.bytedeco.javacv.*;import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;/*** Description: 直播流保存本地线程** @author ZhuZiKai* @date 2020/8/5 0005*/
public class RecordVideoThread implements Runnable {private String streamURL;// 流地址(测试可以用obs推流)private String filePath;// 文件路径private Long timesSec = 100L;// 停止录制时长 0为不限制时长private String fileFormat = "flv";//录制的文件格式private boolean isAudio = false;//是否录制声音public void setStreamURL(String streamURL) {this.streamURL = streamURL;}public void setFilePath(String filePath) {this.filePath = filePath;}public static void main(String[] args) {//        "E:/video/one.flv"
//        "rtmp://192.168.1.224:1935/live/home"RecordVideoThread recordVideoThread = new RecordVideoThread();recordVideoThread.filePath = "E:/video/one.flv";recordVideoThread.timesSec = 0L;recordVideoThread.streamURL = "rtmp://192.168.1.224:1935/live";// 最好设置结束时长 如直接停止程序会造成输出文件的损坏无法正常播放recordVideoThread.isAudio = true;new Thread(recordVideoThread).start();
//        RecordVideoThread thread = new RecordVideoThread();
//        thread.pushVideoAsRTSP(1, null);}@Overridepublic void run() {System.out.println(streamURL);// 获取视频源FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(streamURL);FFmpegFrameRecorder recorder = null;try {grabber.start();Frame frame = grabber.grabFrame();createFile();//"rtmp://192.168.1.225:1935/live/home"// 流媒体输出地址,分辨率(长,高),是否录制音频(0:不录制/1:录制)recorder = new FFmpegFrameRecorder(filePath, 1280, 720, isAudio ? 1 : 0);recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);// 直播流格式recorder.setFormat(fileFormat);// 录制的视频格式recorder.setFrameRate(25);// 帧数//百度翻译的比特率,默认400000,但是我400000贼模糊,调成800000比较合适recorder.setVideoBitrate(800000);recorder.start();System.out.println("推流开始");
//            new Thread(new Runnable() {//                @Override
//                public void run() {//                    RecordVideoThread thread = new RecordVideoThread();
//                    thread.pushVideoAsRTSP(1, null);
//                }
//            }).start();// 计算结束时间long endTime = System.currentTimeMillis() + timesSec * 1000;// 如果没有到录制结束时间并且获取到了下一帧则继续录制while ((System.currentTimeMillis() < endTime) && (frame != null)) {System.out.println("开始");recorder.record(frame);//录制frame = grabber.grabFrame();//获取下一帧System.out.println("结束");}recorder.record(frame);} catch (Exception e) {e.printStackTrace();} finally {//停止录制if (null != grabber) {try {grabber.stop();} catch (FrameGrabber.Exception e) {e.printStackTrace();}}if (recorder != null) {try {recorder.stop();} catch (FrameRecorder.Exception e) {e.printStackTrace();}}System.out.println("录制完成,录制时长:" + timesSec + "秒");}}private void createFile() {File outFile = new File(filePath);if (filePath.isEmpty() || !outFile.exists() || outFile.isFile()) {try {outFile.createNewFile();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

使用javaCV录制直播流相关推荐

  1. javacv实现直播流

    javacv实现直播流 javacv从入门到入土系列,音视频入门有一点门槛的延迟大概是2~4秒之间, 依赖 <!-- 需要注意,javacv主要是一组API为主,还需要加入对应的实现 --> ...

  2. 爬取B站直播流 - http+flv的相关研究

    参考链接 HTTP-FLV直播初探 HTTP-FLV的两种方式 Json将&符号转成了 \u0026 python requests提示警告InsecureRequestWarning 爬取B ...

  3. 微软流媒体服务器直播,流媒体服务器Flussonic Media Server对直播流进行录制

    Flussonic Media Server可以对直播流进行录制,然后在提供播放服务. 我们首先来看如何为直播流配置录制功能,如下: stream channel0 { url tshttp://vl ...

  4. 实时监控、直播流、流媒体、视频网站开发方案设计简要

    快速传送至:javacv入门指南:序章 快速传送至:从零开始开发和搭建直播平台-教程汇总篇 javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现, ...

  5. 初学者java学习计划_初学者:计划在Windows 7 Media Center中录制直播电视的时间

    初学者java学习计划 If you're a new user to Windows 7 Media Center you know it can act as a DVR and pause or ...

  6. Java 监控直播流rtsp协议转rtmp、hls、httpflv协议返回浏览器

    Java 监控直播流rtsp协议转rtmp.hls.httpflv协议返回浏览器 目录 一:了解音视频流协议: 二:方案一 rtsp 转rtmp 1.下载nginx + nginx-rtmp-modu ...

  7. 实时监控、直播流、流媒体、视频网站开发方案流媒体服务器搭建及配置详解:使用nginx搭建rtmp直播、rtmp点播、,hls直播服务配置详解

    注意:这里不会讲到nginx流媒体模块如何安装的问题,只研究rtmp,hls直播和录制相关的nginx服务器配置文件的详细用法和说明.可以对照这些命令详解配置nginx -rtmp服务 一.nginx ...

  8. 浏览器不支持flash插件之后,h5播放rtmp直播流的解决方案

    浏览器不支持flash插件之后,h5播放rtmp直播流的解决方案使用http-flv 原文链接 目录: 相关资源: 背景 几种视频流比较 http-flv搭配flv.js播放方案 flv.js延迟问题 ...

  9. 乐视云如何炼成弹性支撑百万级别直播流

    在观看视频直播中,难免因打断错过精彩片刻.乐视云 "月光宝盒"可以完美解决直播过程中任意时间段时移回看,并在直播结束后提供瞬时秒回功能,快速将直播信号转为点播信号进行分发,大幅提升 ...

最新文章

  1. 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #6 使用localmodconfig缩短编译时间...
  2. 怎么传日期参数_时间序列amp;日期学习笔记大全(下)
  3. python二维列表写入excel_用Python实现合并excel列表
  4. linux subversion 根目录检出,经验总结:详解Linux下Subversion的安装配置记录 下
  5. mysql 事件计划_mysql 事件计划
  6. DeepMind推出更难的机器阅读理解数据集,要让AI读懂整本书
  7. oracle使用小技巧,Oracle使用技巧
  8. [转载]Hibernate 一对一 双向关联
  9. QCustomplot绘图性能的改善
  10. 一文读懂数字通信系统的本质
  11. SpringBoot中发送QQ邮件
  12. java留言板源码_jsp留言板示例源码下载(入门级)
  13. 使用poi解析word转html,并处理word中图片
  14. 如何使用文件保险箱加密 Mac 上的启动磁盘?
  15. 解读Tensor张量的维数
  16. 淘宝api接口系列,获取sku详细信息
  17. 你所厌恶的正是别人渴望的
  18. Multisim、proteus和protel的区别
  19. 杨博超-spring教程-day01-笔记
  20. 大胆预测一波:23年软件测试行业的趋势及前景

热门文章

  1. python实验室排课管理系统_web实验室管理系统(自动排课实现)
  2. vnc安装oracle11g,在Solaris下安装VNC 远程安装Oracle
  3. sudoku数独软件
  4. windows10 21H1 访问samba 显示错误的密码 问题解决
  5. css3样式实现正方体旋转效果
  6. 量子计算机 液体核磁共振,量子计算机.doc
  7. 大数据挖掘技术之DM经典模型
  8. php.ini 米拓_独家发布米拓metinfo6系统ueditor编辑器getshell漏洞分析及终极解决办法...
  9. 如何计算色彩滤镜的RGB值
  10. 微信小程序,发放优惠券,领取卡券添加到卡包