javaCV将socket获取的视频流推到流媒体(RTMP)服务器
参考链接:http://blog.csdn.net/eguid_1/article/details/52678775
相信大家对JAVACV做了些了解,我在这话也不多说了,直接上代码:
public class Client1 {
/**
* Socket客户端
*/
public static void main(String[] args) throws Exception {
try {
int count=0;
while(true){
// "GET /ipcam/jpeg.cgi HTTP/1.1\r\n\r\nAuthorization: Basic YWRtaW46OTk5OQ====\r\n\r\n"
// 创建Socket对象
Socket socket = new Socket("192.168.0.80", 8080);
// 根据输入输出流和服务端连接
OutputStream outputStream = socket.getOutputStream();// 获取一个输出流,向服务端发送信息
// "GET /ipcam/jpeg.cgi HTTP/1.1\r\nAuthorization: Basic YWRtaW46OTk5OQ====\r\n\r\n"
outputStream
.write("GET /ipcam/avc.cgi HTTP/1.1\r\nAuthorization: Basic YWRtaW46OTk5OQ====\r\n\r\n"
.getBytes());
outputStream.flush();
socket.shutdownOutput();// 关闭输出流
InputStream inputStream = socket.getInputStream();// 获取一个输入流,接收服务端的信息
String outputFile = "rtmp://localhost:1935/live/test2";
Player.frameRecord(inputStream, outputFile, 1);
count++;
System.out.println("================================"+count+"次数");
socket.close();
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class Player {
/**
* 按帧录制视频
*
* @param inputFile-该地址可以是网络直播/录播地址,也可以是远程/本地文件路径
* @param outputFile
* -该地址只能是文件地址,如果使用该方法推送流媒体服务器会报错,原因是没有设置编码格式
* @throws FrameGrabber.Exception
* @throws FrameRecorder.Exception
* @throws org.bytedeco.javacv.FrameRecorder.Exception
*/
public static void frameRecord(InputStream inputFile, String outputFile, int audioChannel)
throws Exception, org.bytedeco.javacv.FrameRecorder.Exception {
boolean isStart=true;//该变量建议设置为全局控制变量,用于控制录制结束
// 获取视频源
FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(inputFile);
grabber.setOption("rtsp_transport", "tcp");
// 流媒体输出地址,分辨率(长,高),是否录制音频(0:不录制/1:录制)
FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outputFile, 1280, 720, audioChannel);
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
recorder.setFormat("flv");
// 开始取视频源
recordByFrame(grabber, recorder, isStart);
}
private static void recordByFrame(FFmpegFrameGrabber grabber, FFmpegFrameRecorder recorder, Boolean status)
throws Exception, org.bytedeco.javacv.FrameRecorder.Exception {
try {//建议在线程中使用该方法
grabber.start();
recorder.start();
Frame frame =null ;
while (status&& (frame = grabber.grabFrame()) != null) {
recorder.record(frame);
}
recorder.stop();
grabber.stop();
} finally {
if (grabber != null) {
grabber.stop();
}
}
}
}
JAR下载链接:http://download.csdn.net/download/xiaojie11800/10202284
javaCV将socket获取的视频流推到流媒体(RTMP)服务器相关推荐
- 音视频7——安卓软编音视频数据推送到rtmp服务器
音视频开发路线: Android 音视频开发入门指南_Jhuster的专栏的技术博客_51CTO博客_android 音视频开发入门 demo地址: videoPath/Demo8Activity.j ...
- 音视频7——安卓硬编音视频数据推送到rtmp服务器
音视频开发路线: Android 音视频开发入门指南_Jhuster的专栏的技术博客_51CTO博客_android 音视频开发入门 demo地址: videoPath/Demo8Activity.j ...
- 安卓硬编音视频数据推送到rtmp服务器
一.RTMP使用流程 rtmp协议的api调用顺序如下: 二.初始化RTMP,连接服务器 有两种构建rtmp服务器的方式我们使用的b站的服务器,要使用b站的服务器,你得认证一下,审核还需要大概1天得时 ...
- Android平台如何实现屏幕数据采集并推送至RTMP服务器
随着无纸化.智慧教室等场景的普及,好多企业或者开发者开始寻求更高效稳定低延迟的RTMP同屏方案,本文以大牛直播SDK(Github)的同屏demo(对应工程:SmartServicePublisher ...
- 将h.264裸码流推送到RTMP服务器
h.264裸码流的格式,参考"H.264-AVC-ISO_IEC_14496-10.pdf, page 211.",这个文档的下载地址:https://github.com/win ...
- Android socket 编程 实现消息推送(二)
上篇文章Android socket 编程 实现消息推送(一)讲到socket编程的消息推送原理,现在我们来看看基于Android客户机socket编程实现消息推送的过程. 根据消息推送的原理图,我们 ...
- Drift 运动相机 获取相机视频流进行二次开发教程
Drift运动相机获取视频流开发教程 简介 Drift动动相机支持TCP, RTSP以及RTMP传输协议提供视频流. 其中TCP及RTSP协议,是相机做流服务器端,手机APP端采用拉流的方式获取视频流 ...
- V4L2获取usb视频流测试代码
Video4Linux2(Video for Linux Two, 简称V4L2)是Linux中关于视频设备的驱动框架,为上层访问底层的视频设备提供统一接口.V4L2主要支持三类设备:视频输入输出设备 ...
- Android socket 编程 实现消息推送
最近用socket写了一个消息推送的demo,在这里和大家分享一下. 主要实现了:一台手机向另外一台手机发送消息,这两台手机可以随时自由发送文本消息进行通信,类似我们常用的QQ. 效果图: 原理 ...
最新文章
- 【软件构造】第二章 软件构建的过程和工具(2)
- 阿里1682亿背后的协同研发云——云效正式商业化
- Android 中的线程及 AsyncTask(线程形态之一)解析一下
- 【每日一题】8月6日题目精讲—追债之旅
- uinty粒子系统子物体变大_Unity的粒子系统(一)基础篇
- iPhone砍单后 分析师称苹果也将削减AirPods 3产量
- Rulo扫地机器人app_米家扫拖机器人1T测评|米家扫拖机器人1T的3D避障实际效果如何?...
- linux日常运维命令
- 僵化封闭的苹果:鼠标不支持右键,键盘没有DEL键
- document.querySelector()方法
- [error]: Found option without preceding group in config file ....\my.ini at line:1
- 编程的名言名句(幽默版)
- PHP获取字符串长度之strlen和mb_strlen的区别
- 过程之美——过程让结果更精彩
- sws_kp操作(selenium webdriver+python)
- 仿 Cuto 壁纸应用的加载动画
- WORD “锁定标记”的功能
- layui下的图片轮播图效果代码收藏
- 实验一:行为型设计模式之Strategy模式
- toad关联oracle,配置toad远程连接oracle
热门文章
- 知识点 - 因数之和 因数个数公式
- 【分享论坛】最新steam离线账号/单机资源/优质软件/资源问题解答
- 佛山顺德计算机美工培训班,顺德区电子商务美工培训
- (毕业设计资料)基于单片机FM数字收音机电路系统
- 2017冬季24集训模拟-4.排座椅
- IBM投入千万美元支持中国渠道培训
- 解决M1芯片版本安装Sketch问题 M1芯片安装那个Sketch版本?Sketch已完美支持M1芯片安装 支持big sur系统
- 什么是缓存穿透和缓存雪崩?【缓存问题】【刘新宇】
- 秦腔《花脸》首度加入游戏音乐盒,CSGO让全球玩家聆听“中国声音” 你想成为那个传颂者吗?CSGO开服搭建计划
- 【报告分享】2021中国锂电行业发展-德勤(附下载)