android javacv直播,无插件即时视频播放
基于项目的需求,因为在我们实际的应用场景中,每个楼宇至少有100个摄像头,如果接入50个楼宇的话,就会有5000多个摄像头,如果是后端将所有的摄像头数据全部转换的话,会消耗大量的CPU和网络IO,而且也会产生很多的临时的m3u8文件,因此性能上一个很大的瓶颈。基于此,因此,需要设计一种即时查看IP Camera的方式,当用户浏览时,服务器进行RTSP流到HLS的转换,当不浏览时,即停止转换。在我们的场景中,当鼠标用户点击摄像头图标时,即开始浏览,当用户关闭浏览窗口时,则停止转换。
实现方案
因此为了实现这个问题,必须首先解决如何优雅的启动和停止Ffmpeg的视频流转换的问题,然后再把它包装成restful service即可以满足需求,先给出两种实现方案。
方案一、基于javacv实现视频流的转换
JavaCV首先提供了计算机视觉领域研究人员常用的函数库的封装:包括OpenCV, FFmpeg, libdc1394, PGRFlyCapture, OpenKinect, videoInput, 和 ARToolKitPlus库,其中FFmpeg库的封装我们可以用来进行视频的转换。详细的文章可以参考
https://blog.csdn.net/eguid_1/article/details/52678775
视频的转换比较简单,不考虑音频的转换。
增加依赖
使用开源库https://github.com/bytedeco/javacv的javacv库, 首先引入此库。
org.bytedeco
javacv-platform
1.5.3
视频流转码
javacv的使用实例可以参考网站
https://www.codota.com/code/java/classes/org.bytedeco.javacv.FFmpegFrameGrabber
,里面有很多实例可以参考,下面的代码片段是一个简单的实例,实现转码。/**
* Record video frame by frame
*
* @Param inputFile- The address can be webcast / taped address, or a remote / local file path
* @param outputFile
* - This address is only an address file, if you use this method to push the streaming media server will complain, because there is no set encoding format
* @throws FrameGrabber.Exception
* @throws FrameRecorder.Exception
* @throws org.bytedeco.javacv.FrameRecorder.Exception */
public static void frameRecord(String inputFile, String outputFile, int audioChannel)
throws Exception, org.bytedeco.javacv.FrameRecorder.Exception {
boolean start = true; // this variable is recommended to set a global control variable for controlling the recording ends
// Get video source
FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(inputFile);
// streaming output address resolution (length, height), whether the recorded audio (0: not record / 1: record)
FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outputFile, 1280, 720, audioChannel);
// start taking video source
recordByFrame(grabber, recorder, isStart);
}
private static void recordByFrame(FFmpegFrameGrabber grabber, FFmpegFrameRecorder recorder, Boolean status)
throws Exception, org.bytedeco.javacv.FrameRecorder.Exception {
try {
// This method is recommended in thread
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();
}
}
}
测试转码public static void main(String[] args)
throws FrameRecorder.Exception, FrameGrabber.Exception, InterruptedException {
String inputFile = "rtsp://admin:!honeywell1@192.168.100.55:554/cam/realmonitor?channel=1&subtype=0";
// Decodes-encodes
String outputFile = "recorde.mp4";
frameRecord(inputFile, outputFile,1);
}
方案二、基于开源rtsp-stream实现视频流的转换
rtsp-stream是一个易于使用,为已有的系统提供在浏览器中播放原始的RTSP流的现成解决方案。它提供了视频流的启动,停止转码的方法以及获取视频列表的服务,并提供了用户认证和授权功能。github网站:
https://github.com/Roverr/rtsp-stream
API 列表
它提供的服务如下:/start - 启动流转换
/stream/{id} - 获取视频流
/list - 获取视频流列表/stop - 停止流转换
认证
rtsp-stream为每个service提供了无认证和JWT认证两种方式,可以跟存在的系统中进行认证服务对接。默认是无认证方式,对于是私有网络,用户无法在internet下访问到此服务,相对安全,可以采用无认证方式,如果在internet环境下一定需要有认证设置。
认证相关的环境变量设置如下:
Env variableDescriptionDefaultTypeRTSP_STREAM_AUTH_JWT_ENABLEDIndicates if the service should use the JWT authentication for the requestsfalsebooleanRTPS_STREAM_AUTH_JWT_SECRETThe secret used for creating the JWT tokensmacilacistringRTSP_STREAM_AUTH_JWT_PUB_PATHPath to the public shared RSA key./key.pubstringRTSP_STREAM_AUTH_JWT_METHODCan be secret or rsa. Changes how the application does the JWT verification.secretstring
API介绍
POST /start
启动对视频流进行转换。请求参数:RTSP uri和alias。其中alias是可选参数。Requires payload:{
"uri": "rtsp://username:password@host",
"alias": "camera1"
}
Response:{
"uri": "/stream/id/index.m3u8",
"running": true,
"id": "id",
"alias": "camera1"
}
GET /stream/{id}/*file视频流的HLS的块文件。浏览器会基于给定m3u8文件获取流的块文件。比如,http://localhost:8080/stream/bd761e69-af21-4e70-9fed-7f2f9032fa61/index.m3u8
http://localhost:8080/stream/bd761e69-af21-4e70-9fed-7f2f9032fa61/1654.ts
http://localhost:8080/stream/bd761e69-af21-4e70-9fed-7f2f9032fa61/1655.ts
http://localhost:8080/stream/bd761e69-af21-4e70-9fed-7f2f9032fa61/1656.ts
GET /list
获取当前的视频列表。Response:[
{
"running": true,
"uri": "/stream/9f4fa8eb-98c0-4ef6-9b89-b115d13bb192/index.m3u8",
"id": "9f4fa8eb-98c0-4ef6-9b89-b115d13bb192",
"alias": "9f4fa8eb-98c0-4ef6-9b89-b115d13bb192"
},
{
"running": false,
"uri": "/stream/camera1/index.m3u8",
"id": "8ab9a89c-8271-4c89-97b7-c91372f4c1b0",
"alias": "camera1"
}
]
POST /stop从视频流列表中停止或者移动此视频流。可以传入streamid或者alias,通过这两个中的一个确定视频流。
Requires payload:{
"id": "40b1cc1b-bf19-4b07-8359-e934e7222109",
"alias": "camera1",
"remove": true, // optional - indicates if stream should be removed as well from list or not
"wait": false // optional - indicates if the call should wait for the stream to stop
}
ResponseEmpty 200
或
Empty 404
测试
使用roverr/rtsp-stream:2-management来测试此功能,这个组件里包含了一个测试UI,8080端口是视频流转换服务端口,80是前端页面端口.docker run -p 80:80 -p 8080:8080 roverr/rtsp-stream:2-management
打开测试网址http://localhost,增加RSTSP的地址,然后选择返回的视频流块文件,即可播放此视频。
写在最后
综合这两种方案,都能实现视频的即时播放功能,第一种方案需仍然需要使用javacv库来实现视频流的转换服务,第二种方案已经提供了成熟的接口,因此,更加适合我们的项目需求,性能测试比之前的方案都有很大的提高。
android javacv直播,无插件即时视频播放相关推荐
- 传统大华海康宇视安防摄像头RTSP流如何转webrtc直播低延时无插件浏览器视频播放
传统大华海康宇视安防摄像头RTSP流如何转webrtc直播低延时无插件浏览器视频播放 1.问题场景 2.WEBRTC延时对比 3.LiveNVR支持WEBRTC输出 4.RTSP/HLS/FLV/RT ...
- c语言欧几里得算法求素数,jrs直播(无插件) -官网
题目: 最近完成的一个项目是参加第九届英特尔杯的参赛作品. 这个参赛作品的名称叫做Training4Fun,是一个台球综合训练jrs直播(无插件) -官网系统.我们的选题动机:台球辅助训练缺乏.我们可 ...
- 360在线无插件直播html,360直播高清版
360直播是360直播网推出的手机直播软件,专注于各种足球.篮球直播,为广大球迷们提供高清流畅的足球比赛直播视频,想来观看体育赛事的可以来搜一搜手游网上下载360直播高清版,观看360直播无插件高清足 ...
- html5 无插件视频播放器,多功能流媒体播放器网页无插件直播EasyPlayer.js如何实现播放完自动循环播放...
原标题:多功能流媒体播放器网页无插件直播EasyPlayer.js如何实现播放完自动循环播放 EasyPlayer-Android播放器是一款可针对RTSP.RTMP.RTSP&RTMP协议进 ...
- 视频在html不能播放器,网页无插件直播H265编码视频播放器EasyPlayer网页播放器不能播放怎么处理?...
原标题:网页无插件直播H265编码视频播放器EasyPlayer网页播放器不能播放怎么处理? EasyPlayer播放器系列项目提供了非常简单易用的SDK及API接口,用户通过API调用就可以非常快速 ...
- 流媒体服务器+终端(android,ios,web),如何从海康平台上拉流接入RTSP安防网络摄像头/海康大华硬盘录像机网页无插件直播流媒体服务器EasyNVR?...
背景需求 随着雪亮工程.明厨亮灶.手机看店.智慧幼儿园监控等行业开始将传统的安防摄像头进行互联网.微信直播,我们知道摄像头直播的春天了.将安防摄像头或NVR上的视频流转成互联网直播常用的RTMP.HT ...
- 使用JavaCV实现海康rtsp转rtmp实现无插件web端直播(无需转码,低资源消耗)
使用JavaCV实现海康rtsp转rtmp实现无插件web端直播(无需转码,低资源消耗) 目录结构 添加依赖,编写配置文件 创建Bean 创建缓存Cache 修改启动类 拉流.推流.转封装 定时任务T ...
- 监控摄像头RTSP低延时无插件直播解决方案
监控摄像头RTSP低延时无插件直播解决方案 第一章 应用简介 当前,视频监控应用场景越来越多,传统的视频监控厂商提供的解决方案需要安装厂商自己的手机APP或PC客户端软件,非常不方便在互联网环境下与第 ...
- 基于EasyNVR摄像机无插件直播方案二次开发实现自己的摄像机IPC-NVR无插件化直播解决方案
背景介绍 在之前的博客中<基于EasyNVR实现RTSP/Onvif监控摄像头Web无插件化直播监控>,对EasyNVR所实现的功能我们已经有较多描述,这些也在方案地址:http://ww ...
最新文章
- 基于Matlab血管切片的三维重建(资源整合)
- [转]SupSite页面文件与模块关系说明
- Windows 7 延长支持服务价格曝光:一台电脑最低25美元
- ASP.NET Performance Monitoring, and When to Alert Administrators
- php面试题11(边看边复习刚刚讲的)(array_multisort($arr1,$arr2); 用$arr1来排序$arr2。)...
- [转载] --- 数据库基本知识
- 服务器响应为4.7.0,454 4.7.0 临时身份验证失败 - Exchange | Microsoft Docs
- Linux 环境 zookeeper集群安装、配置、测试
- python字符串迭代_Python字符串迭代/函数
- 分布式系统监视zabbix讲解十之监控tomcat--技术流ken
- linux 常见开机故障解决办法
- 为何主程序退出了,创建的多线程还在运行呢?
- 十六进制编辑器_Windows最佳免费十六进制编辑器
- 审批流程展示html,审批流程图怎么绘制?不懂可以看这里
- 【爬虫】关于企业信用信息公示系统-加速乐最新反爬虫机制
- 【华人学者风采】黄霞 清华大学
- 程序员干累了,当个培训讲师?我亲身试水,讲讲感受
- 云原生—Rust编程语言能与C/C++媲美
- Redis的下载安装运行
- CONCATENATE示例