图片通过javaCV转RTMP流
来源:互联网 发布:mac怎么截gif 编辑:程序博客网 时间:2024/06/06 11:33
图片通过javaCV转RTMP流
public static void main(String[] args) {// captureScreen(); try { transferPicToRtmp("rtmp://yourIp:1935/live/test.stream"); } catch (Exception e) { e.printStackTrace(); }}/*** * 图片转RTMP流 * * @param outRtmpUrl * @throws Exception * @throws org.bytedeco.javacv.FrameRecorder.Exception * @throws InterruptedException */public static void transferPicToRtmp(String outRtmpUrl) throws Exception, org.bytedeco.javacv.FrameRecorder.Exception, InterruptedException { int frameRate = 25; FrameRecorder recorder; try { recorder = FrameRecorder.createDefault(outRtmpUrl, 352, 288); } catch (org.bytedeco.javacv.FrameRecorder.Exception e) { log.error(e.toString()); throw e; } recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264); recorder.setFormat("flv"); recorder.setFrameRate(frameRate); recorder.setGopSize(frameRate); /************************************************************* * 设置音频 ************************************************************/ // 不可变(固定)音频比特率 recorder.setAudioOption("crf", "0"); // 最高质量 recorder.setAudioQuality(0); // 音频比特率 recorder.setAudioBitrate(192000); // 音频采样率 recorder.setSampleRate(44100); // 双通道(立体声) recorder.setAudioChannels(2); // 音频编/解码器 recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC); /************************************************************* * 设置音频结束 ************************************************************/ System.out.println("准备开始推流..."); try { recorder.start(); } catch (org.bytedeco.javacv.FrameRecorder.Exception e) { try { System.out.println("录制器启动失败,正在重新启动..."); if (recorder != null) { System.out.println("尝试关闭录制器"); recorder.stop(); System.out.println("尝试重新开启录制器"); recorder.start(); } } catch (org.bytedeco.javacv.FrameRecorder.Exception e1) { log.error(e.toString()); throw e; } } GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();// 本地环境 Rectangle screenSize = ge.getMaximumWindowBounds();// 获取当前屏幕最大窗口边界 CanvasFrame frame = new CanvasFrame("图片转RTMP流");// javacv提供的图像展现窗口 int width = 352; int height = 288; long startTime = 0; Frame capturedFrame = null; System.out.println("开始推流"); frame.setBounds((int) (screenSize.getWidth() - width) / 2, (int) (screenSize.getHeight() - height) / 2, width, height);// 窗口居中 frame.setCanvasSize(width, height);// 设置CanvasFrame窗口大小 BufferedImage image1 = ImageIO.read(new FileInputStream("D:/code/CameraMonitor/doc/a1.jpg")); BufferedImage image2 = ImageIO.read(new FileInputStream("D:/code/CameraMonitor/doc/a2.jpg")); BufferedImage image3 = ImageIO.read(new FileInputStream("D:/code/CameraMonitor/doc/a3.jpg")); BufferedImage image4 = ImageIO.read(new FileInputStream("D:/code/CameraMonitor/doc/a4.jpg")); int idx = 0; Java2DFrameConverter co = new Java2DFrameConverter(); while (frame.isShowing()) { System.out.println("推流..."); if (idx % 4 == 1) { capturedFrame = co.getFrame(image1); } else if (idx % 4 == 2) { capturedFrame = co.getFrame(image2); } else if (idx % 4 == 3) { capturedFrame = co.getFrame(image3); } else { capturedFrame = co.getFrame(image4); } idx++; if (idx > 1000) { idx = 0; } frame.showImage(capturedFrame); if (startTime == 0) { startTime = System.currentTimeMillis(); } long videoTS = 1000 * (System.currentTimeMillis() - startTime); if (videoTS > recorder.getTimestamp()) { recorder.setTimestamp(videoTS);// 时间戳 } if (capturedFrame != null) { recorder.record(capturedFrame); } Thread.sleep(100); } frame.dispose(); recorder.stop(); recorder.release();}
阅读全文
0 0
- 图片通过javaCV转RTMP流
- javacv旋转图片
- javacv把海康摄像头rtsp流转推到rtmp流
- javaCV开发详解之4:转流器实现(也可作为本地收流器、推流器,新增添加图片及文字水印,视频图像帧保存),实现rtsp/rtmp/本地文件转发到rtmp流媒体服务器(基于javaCV-FFMPEG)
- javaCV开发详解之4:转流器实现(也可作为本地收流器、推流器,新增添加图片及文字水印,视频图像帧保存),实现rtsp/rtmp/本地文件转发到rtmp流媒体服务器(基于javaCV-FFMPEG)
- 通过javacv对视频每隔1秒钟截取1张图片
- 通过rtmp向fms发送视频流
- javacv
- javacv
- JavaCV
- FFMPEG 截取RTMP直播流图片命令
- 通过Javacv摄像头连续抓图
- Java通过调用javacv打开摄像头
- javacv解码、录制视频,保存图片
- JavaCV读写包含中文路径的图片
- 使用JAVACV把图片合成视频
- javaCV开发详解之3:收流器实现,录制流媒体服务器的rtsp/rtmp视频文件(基于javaCV-FFMPEG)
- javaCV开发详解之3:收流器实现,录制流媒体服务器的rtsp/rtmp视频文件(基于javaCV-FFMPEG)
- Windows延迟删除、重命名
- Maven tomcat插件debug项目时 ,出现source not found的解决办法
- HDOJ1001
- 基于Dubbo的分布式系统架构(二):搭建一个简单的分布式架构
- ssh--applicationContext.xml
- 图片通过javaCV转RTMP流
- Privilegelnterceptor
- sizeof特点
- Ngx中的红黑树描述
- ssh--struts.xml
- Eclipse快捷键大全
- HDOJ1096
- 文件读写通用工具类
- python 创建:udp tcp服务器 线程 进程 进程池 互斥锁 协程