package com.ffmpeg.record;
import org.bytedeco.ffmpeg.global.avcodec;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.FrameGrabber;
import org.bytedeco.javacv.FrameRecorder;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;
/**
* @author shengling23
* @create 2019-08-30 10:39
*/
public class RecordRefactoring {
//视频存储地址
private String savePath = "G:\\testffmpeg\\";
//每段视频的时长
private long duration = 5*60*1000L;
/**
*
* @param rtmpPath rtmp流地址
* @param outFileNamePre 录制的视频的名称
* @throws FrameGrabber.Exception
* @throws FrameRecorder.Exception
*/
public void record(String rtmpPath,String outFileNamePre) throws FrameGrabber.Exception, FrameRecorder.Exception {
boolean flag = true;
int error_count = 0;
FrameGrabber grabber = initFrameGrabber(rtmpPath);
grabber.start();
Map<String, Object> params = getParamsFromFrameGrabber(grabber);
Frame frame = null;
while ((frame = grabber.grabFrame())!= null && flag){
File outFile = getOutFile(outFileNamePre, duration);
FrameRecorder recorder = initFrameRecorder(outFile,params);
recorder.start();
long now = System.currentTimeMillis();
long startTime = now;
Frame frame2 = null;
for(;(now - startTime) <= duration;now = System.currentTimeMillis()){
frame2 = grabber.grabFrame();
if (frame2 == null){
error_count += 1;
if (error_count > 5){
flag = false;
break;
}
continue;
}
recorder.record(frame2);
}
recorder.stop();
}
grabber.stop();
}
private FrameGrabber initFrameGrabber(String rtmpPath){
FrameGrabber grabber = new FFmpegFrameGrabber(rtmpPath);
grabber.setOption("rw_timeout","1000000");
return grabber;
}
private Map<String,Object> getParamsFromFrameGrabber(FrameGrabber grabber){
Map<String,Object> map = new HashMap<String,Object>();
map.put("width",grabber.getImageWidth()); // int 类型
map.put("heigth",grabber.getImageHeight()); // int 类型
map.put("videoBitrate",grabber.getVideoBitrate()); // int 类型
map.put("frameRate",grabber.getFrameRate()); //double 类型
map.put("audioChannels",grabber.getAudioChannels()); // int 类型
map.put("audioBitrate",grabber.getAudioBitrate()); // int 类型
map.put("sampleRate",grabber.getSampleRate()); // int 类型
return map;
}
/**
* 通过输出文件名前缀和持续的时长,生成输出的视频文件
* @param outFileNamePre 输出文件名前缀
* @param duration 持续的时长
* @return 输出的文件
*/
private File getOutFile(String outFileNamePre,long duration){
long start = System.currentTimeMillis();
String startStr = formatTime(start);
String endTime = formatTime(start + duration);
StringBuilder fileName = new StringBuilder();
fileName.append(outFileNamePre).append("[")
.append(startStr).append("]")
.append("-").append("[")
.append(endTime).append("]")
.append(".mp4");
File file = new File(fileName.toString());
return file;
}
private String formatTime(long time){
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
return sf.format(time);
}
private FrameRecorder initFrameRecorder(File outFile,Map<String,Object> paramMap){
// 视频的长、宽
Integer width = (Integer) paramMap.get("width");
Integer heigth = (Integer) paramMap.get("heigth");
// 帧率
Double frameRate = (Double) paramMap.get("frameRate");
// 比特率
Integer videoBitrate = (Integer) paramMap.get("videoBitrate");
//音频的参数
//想要录制音频,这三个参数必须有:audioChannels > 0 && audioBitrate > 0 && sampleRate > 0
Integer audioChannels = (Integer) paramMap.get("audioChannels");
Integer audioBitrate = (Integer) paramMap.get("audioBitrate");
Integer sampleRate = (Integer) paramMap.get("sampleRate");
FrameRecorder recorder = null;
try {
recorder = FrameRecorder.createDefault(outFile,width,heigth);
recorder.setFrameRate(frameRate);
recorder.setVideoBitrate(videoBitrate);
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC);
recorder.setFormat("mp4");
recorder.setAudioChannels(audioChannels);
recorder.setAudioBitrate(audioBitrate);
recorder.setSampleRate(sampleRate);
} catch (FrameRecorder.Exception e) {
e.printStackTrace();
}
return recorder;
}
public static void main(String[] args) {
String rtmpPath = "rtmp://192.168.62.150/live/stream1";
String preFileName = "stream1";
RecordRefactoring recordRefactoring = new RecordRefactoring();
try {
recordRefactoring.record(rtmpPath,preFileName);
} catch (FrameGrabber.Exception e) {
e.printStackTrace();
} catch (FrameRecorder.Exception e) {
e.printStackTrace();
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
利用javacv进行对rtmp直播进行录制利用javacv进行对rtmp直播进行录制利用javacv进行对rtmp直播进行录制利用javacv进行对rtmp直播进行录制利用javacv进行对rtmp直播进行录制利用javacv进行对rtmp直播进行录制利用javacv进行对rtmp直播进行录制利用javacv进行对rtmp直播进行录制利用javacv进行对rtmp直播进行录制利用javacv进行对rtmp直播进行录制利用javacv进行对rtmp直播进行录制利用javacv进行对rtmp直播进行录制利用javacv进行对rtmp直播进行录制利用javacv进行对rtmp直播进行录制利用javacv进行对rtmp直播进行录制利用javacv进行对rtmp直播进行录制利用javacv进行对rtmp直播进行录制利用javacv进行对rtmp直播进行录制利用javacv进行对rtmp直播进行录制利用javacv进行对rtmp直播进行录制利用javacv进行对rtmp直播进行录制利用javacv进行对rtmp直播进行录制利用javacv进行对rtmp直播进行录制利用javacv进行对rtmp直播
资源推荐
资源详情
资源评论
收起资源包目录
利用javacv进行对rtmp直播进行录制 (159个子文件)
Javacvtest.iml 17KB
RecordRefactoring.java 6KB
RecordTest.java 2KB
uiDesigner.xml 9KB
Maven__org_bytedeco_flycapture_platform_2_13_3_31_1_5_1.xml 646B
pom.xml 644B
Maven__org_bytedeco_artoolkitplus_platform_2_3_1_1_5_1.xml 639B
Maven__org_bytedeco_librealsense_platform_1_12_1_1_5_1.xml 639B
Maven__org_bytedeco_libfreenect2_platform_0_2_0_1_5_1.xml 632B
compiler.xml 632B
Maven__org_bytedeco_libfreenect_platform_0_5_7_1_5_1.xml 625B
Maven__org_bytedeco_videoinput_platform_0_200_1_5_1.xml 618B
Maven__org_bytedeco_leptonica_platform_1_78_0_1_5_1.xml 618B
Maven__org_bytedeco_flycapture_windows_x86_64_2_13_3_31_1_5_1.xml 613B
Maven__org_bytedeco_tesseract_platform_4_1_0_1_5_1.xml 611B
Maven__org_bytedeco_libdc1394_platform_2_2_6_1_5_1.xml 611B
Maven__org_bytedeco_flycapture_linux_x86_64_2_13_3_31_1_5_1.xml 609B
Maven__org_bytedeco_flycapture_linux_arm64_2_13_3_31_1_5_1.xml 607B
Maven__org_bytedeco_flycapture_windows_x86_2_13_3_31_1_5_1.xml 607B
Maven__org_bytedeco_flycapture_linux_armhf_2_13_3_31_1_5_1.xml 607B
Maven__org_bytedeco_artoolkitplus_android_x86_64_2_3_1_1_5_1.xml 606B
Maven__org_bytedeco_artoolkitplus_windows_x86_64_2_3_1_1_5_1.xml 606B
Maven__org_bytedeco_librealsense_windows_x86_64_1_12_1_1_5_1.xml 606B
Maven__org_bytedeco_artoolkitplus_macosx_x86_64_2_3_1_1_5_1.xml 604B
Maven__org_bytedeco_artoolkitplus_linux_ppc64le_2_3_1_1_5_1.xml 604B
Maven__org_bytedeco_openblas_platform_0_3_6_1_5_1.xml 604B
Maven__org_bytedeco_artoolkitplus_android_arm64_2_3_1_1_5_1.xml 604B
Maven__org_bytedeco_librealsense_macosx_x86_64_1_12_1_1_5_1.xml 604B
Maven__org_bytedeco_flandmark_platform_1_07_1_5_1.xml 604B
Maven__org_bytedeco_flycapture_linux_x86_2_13_3_31_1_5_1.xml 603B
Maven__org_bytedeco_librealsense_linux_x86_64_1_12_1_1_5_1.xml 602B
Maven__org_bytedeco_artoolkitplus_linux_x86_64_2_3_1_1_5_1.xml 602B
Maven__org_bytedeco_artoolkitplus_linux_armhf_2_3_1_1_5_1.xml 600B
Maven__org_bytedeco_artoolkitplus_android_x86_2_3_1_1_5_1.xml 600B
Maven__org_bytedeco_artoolkitplus_android_arm_2_3_1_1_5_1.xml 600B
Maven__org_bytedeco_artoolkitplus_windows_x86_2_3_1_1_5_1.xml 600B
Maven__org_bytedeco_artoolkitplus_linux_arm64_2_3_1_1_5_1.xml 600B
Maven__org_bytedeco_librealsense_windows_x86_1_12_1_1_5_1.xml 600B
Maven__org_bytedeco_libfreenect2_windows_x86_64_0_2_0_1_5_1.xml 599B
Maven__org_bytedeco_libfreenect2_macosx_x86_64_0_2_0_1_5_1.xml 597B
Maven__org_bytedeco_artoolkitplus_linux_x86_2_3_1_1_5_1.xml 596B
Maven__org_bytedeco_librealsense_linux_x86_1_12_1_1_5_1.xml 596B
Maven__org_bytedeco_libfreenect2_linux_x86_64_0_2_0_1_5_1.xml 595B
Maven__org_bytedeco_libfreenect_windows_x86_64_0_5_7_1_5_1.xml 592B
Maven__org_bytedeco_libfreenect_linux_ppc64le_0_5_7_1_5_1.xml 590B
Maven__org_bytedeco_ffmpeg_platform_4_1_3_1_5_1.xml 590B
Maven__org_bytedeco_opencv_platform_4_1_0_1_5_1.xml 590B
Maven__org_bytedeco_libfreenect_macosx_x86_64_0_5_7_1_5_1.xml 590B
Maven__org_bytedeco_libfreenect2_linux_x86_0_2_0_1_5_1.xml 589B
Maven__org_bytedeco_libfreenect_linux_x86_64_0_5_7_1_5_1.xml 588B
Maven__org_bytedeco_libfreenect_windows_x86_0_5_7_1_5_1.xml 586B
Maven__org_bytedeco_libfreenect_linux_arm64_0_5_7_1_5_1.xml 586B
Maven__org_bytedeco_libfreenect_linux_armhf_0_5_7_1_5_1.xml 586B
Maven__org_bytedeco_videoinput_windows_x86_64_0_200_1_5_1.xml 585B
Maven__org_bytedeco_leptonica_windows_x86_64_1_78_0_1_5_1.xml 585B
Maven__org_bytedeco_leptonica_android_x86_64_1_78_0_1_5_1.xml 585B
Maven__org_bytedeco_leptonica_android_arm64_1_78_0_1_5_1.xml 583B
Maven__org_bytedeco_leptonica_linux_ppc64le_1_78_0_1_5_1.xml 583B
Maven__org_bytedeco_leptonica_macosx_x86_64_1_78_0_1_5_1.xml 583B
Maven__org_bytedeco_flycapture_2_13_3_31_1_5_1.xml 583B
Maven__org_bytedeco_libfreenect_linux_x86_0_5_7_1_5_1.xml 582B
Maven__org_bytedeco_leptonica_linux_x86_64_1_78_0_1_5_1.xml 581B
Maven__org_bytedeco_videoinput_windows_x86_0_200_1_5_1.xml 579B
Maven__org_bytedeco_leptonica_windows_x86_1_78_0_1_5_1.xml 579B
Maven__org_bytedeco_leptonica_linux_armhf_1_78_0_1_5_1.xml 579B
Maven__org_bytedeco_leptonica_android_arm_1_78_0_1_5_1.xml 579B
Maven__org_bytedeco_leptonica_android_x86_1_78_0_1_5_1.xml 579B
Maven__org_bytedeco_leptonica_linux_arm64_1_78_0_1_5_1.xml 579B
Maven__org_bytedeco_libdc1394_windows_x86_64_2_2_6_1_5_1.xml 578B
Maven__org_bytedeco_tesseract_android_x86_64_4_1_0_1_5_1.xml 578B
Maven__org_bytedeco_tesseract_windows_x86_64_4_1_0_1_5_1.xml 578B
Maven__org_bytedeco_tesseract_android_arm64_4_1_0_1_5_1.xml 576B
Maven__org_bytedeco_tesseract_macosx_x86_64_4_1_0_1_5_1.xml 576B
Maven__org_bytedeco_libdc1394_linux_ppc64le_2_2_6_1_5_1.xml 576B
Maven__org_bytedeco_artoolkitplus_2_3_1_1_5_1.xml 576B
Maven__org_bytedeco_librealsense_1_12_1_1_5_1.xml 576B
Maven__org_bytedeco_tesseract_linux_ppc64le_4_1_0_1_5_1.xml 576B
Maven__org_bytedeco_libdc1394_macosx_x86_64_2_2_6_1_5_1.xml 576B
Maven__org_bytedeco_leptonica_linux_x86_1_78_0_1_5_1.xml 575B
Maven__org_bytedeco_tesseract_linux_x86_64_4_1_0_1_5_1.xml 574B
Maven__org_bytedeco_libdc1394_linux_x86_64_2_2_6_1_5_1.xml 574B
Maven__org_bytedeco_libdc1394_linux_arm64_2_2_6_1_5_1.xml 572B
Maven__org_bytedeco_tesseract_android_x86_4_1_0_1_5_1.xml 572B
Maven__org_bytedeco_libdc1394_linux_armhf_2_2_6_1_5_1.xml 572B
Maven__org_bytedeco_tesseract_linux_armhf_4_1_0_1_5_1.xml 572B
Maven__org_bytedeco_tesseract_android_arm_4_1_0_1_5_1.xml 572B
Maven__org_bytedeco_libdc1394_windows_x86_2_2_6_1_5_1.xml 572B
Maven__org_bytedeco_tesseract_windows_x86_4_1_0_1_5_1.xml 572B
Maven__org_bytedeco_tesseract_linux_arm64_4_1_0_1_5_1.xml 572B
Maven__org_bytedeco_flandmark_android_x86_64_1_07_1_5_1.xml 571B
Maven__org_bytedeco_openblas_android_x86_64_0_3_6_1_5_1.xml 571B
Maven__org_bytedeco_openblas_windows_x86_64_0_3_6_1_5_1.xml 571B
Maven__org_bytedeco_flandmark_windows_x86_64_1_07_1_5_1.xml 571B
Maven__org_bytedeco_openblas_android_arm64_0_3_6_1_5_1.xml 569B
Maven__org_bytedeco_libfreenect2_0_2_0_1_5_1.xml 569B
Maven__org_bytedeco_flandmark_android_arm64_1_07_1_5_1.xml 569B
Maven__org_bytedeco_openblas_linux_ppc64le_0_3_6_1_5_1.xml 569B
Maven__org_bytedeco_openblas_macosx_x86_64_0_3_6_1_5_1.xml 569B
Maven__org_bytedeco_flandmark_linux_ppc64le_1_07_1_5_1.xml 569B
Maven__org_bytedeco_flandmark_macosx_x86_64_1_07_1_5_1.xml 569B
共 159 条
- 1
- 2
资源评论
MickingKun
- 粉丝: 2
- 资源: 32
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- yolo目标检测项目实验
- downloadFile-1.hc
- Centos7.9环境下离线安装开源版Nginx(亲测版)
- C++课程设计:基于Qt的航班信息管理系统
- ADS7822UVerilog驱动,前面传的有点问题
- 基于python的高性能爬虫程序,使用了多线程+缓存+xpath实现的,这里以彼-岸图库为例,实现,仅用于学习交流
- 中分辨率成像光谱仪(MODIS)烧毁面积产品信息MODIS-C6-BA-User-Guide-1.2.pdf
- Screenshot_20240427_172613_com.huawei.browser.jpg
- 关于学习Python的相关资源网站链接及相关介绍.docx
- (HAL库)基于STM32F103C8T6的温控PID系统[Dht11、ESP8266、无线透传、L298N……]
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功