精华内容
下载资源
问答
  • 道路监控视频资源

    2018-05-08 17:07:20
    十个 视频资源 搞视频分割,背景建模的同学可下载 道路监控视频
  • 在web页面实时播放监控视频

    万次阅读 2019-07-14 10:18:48
    因为项目需求,需要在web页面播放实时监控视频,而且是同时播放多个视频,还支持切换页面播放。监控是大华和海康 厂家的,并没有做流服务器,还是rtsp的流媒体格式,所以不能用H5的video来播放。 方案一 后端把...

    背景

    因为项目需求,需要在web页面播放实时监控视频,而且是同时播放多个视频,还支持切换页面播放。监控是大华和海康 厂家的,并没有做流服务器,还是rtsp的流媒体格式,所以不能用H5的video来播放。

    方案一:video.js

    后端把rtsp转成web支持的rtmp格式,然后使用video.js(使用方法看文档)来包装处理rtmp流媒体。

    遇到的坑

    1. 同时加载多个视频会占用大量内存,而且丢包严重,导致页面雪花,容易崩溃。
    2. V5以上版本不支持播放rtmp流,因为不再支持flash
    3. Vue build过后视频不能播放

    解决办法

    1. 按需加载

      a. 按照需要加载的dom大小,加载不同分辨率的视频(这一点需要后台提供处理视频的参数)。分辨率决定的占用的内存

      b. 只播放当前需要播放的视频,把其他的视频stop并且删除

    2. 下载使用videojs5.x.x版本。(5.20.1 亲测可以)

    3. 因为我使用使用npm安装的videojs,然后在build的时候会videojs.swf文件的路径指向会出错。

      a. 下载videojs离线包,然后放在static文件夹使用

      b. 或者在引用videojs的地方,videojs.options.flash.swf = './static/plugin/videojs/videojs.swf'

    总结

    不管怎么处理,丢包还是有的,播放多个视频始终达不到需要的效果,有的时候播放一个视频都会丢包严重。也可能是后台处理的问题。没办法,只能换一种实现方案

    方案二:大华SDK二次开发

    采用大华SDK二次开发

    流程

    1. Java、C#等语言二次开发大华SDK,打包成ocx包。网上有相关教程
    2. 解压OCX包。单击文件中的reg.bat注册dll(注册好dll就行了)
    3. 前端代码
    <!-- 这里的clsid 是打包成ocx的ID -->
    <object classid="clsid:30209FBC-57EB-4F87-BF3E-740E3D8019D2" codebase="" standby="Waiting..." id="playOcx" width="1280" height="720" name="playOcx" align="center" >
      <embed width="618" height="360" align="center"></embed>
    </object>
    
    <script>
    var SSOcx = document.getElementById("playOcx");
    // 下面就可以通过 SSOcx.xxx 来调用dll包中的方法了
    // 比如 SSOcx.SetDeviceInfo("192.168.1.108",37777,0,"admin","admin");
    </script>
    

    总结

    开发麻烦。

    功能简单,不支持音频。

    基本上只支持IE。需要ActiveX(Chrome45 关闭了默认支持ActiveX,需要手动打开;Chrome49就完全不支持ActiveX, 新版Firefox也不支持ActiveX)的支持才能直接调用dll。

    方案三:webplugin.exe

    使用webplugin.exe。如果你的电脑设备上已经和大华摄像头连通,可以直接用IE访问摄像头IP,会提示你下载webplugin.exe。当然网上也有资源下载。

    使用方法

    1. 安装webplugin.exe
    2. 获取webplugin.exe的clsid。 (注意:每个.exe文件的id可能都不一样。。如果你的电脑设备上已经和大华摄像头连通,可以直接用IE访问摄像头IP,进入监控页面,然后查看元素,获取clsid)
    3. 可以把上面审查元素的object对象复制出来。(和下面不一定一样)
    <object id="player" width="100%" height="100%"
            classid="clsid:7F9063B6-E081-49DB-9FEC-D72422F2727F"
            codebase="">
    </object>
    
    1. 相关的js方法。(也不一定一样。也可审查元素获取调用方法)
    var g_ocx = document.getElementById('player');
    var bRet = g_ocx.LoginDeviceEx('192.168.0.102', '554' 'admin', 'admin', 0);
    if (bRet == 0) {
        //设置窗口数量
        g_ocx.SetWinBindedChannel(1, 0, 63, 64);
        //设置截图保存地址
        g_ocx.SetConfigPath(1,"C:\\视频监控\\images");
        //设置录制视频保存地址
        g_ocx.SetConfigPath(2,"C:\\视频监控\\vidos");
        //设置画质 0 高 1 低
        // g_ocx.SetPicQuality(0);
        //设置视频实时性 0-10 实时登记依次降低
        g_ocx.SetAdjustFluency(0);
        //监视模式
        g_ocx.SetModuleMode(1); 
        //连接视频
        g_ocx.ConnectRealVideo(0, 1);
        // 播放声音
        g_ocx.PlayOpenSound();
        // 停止声音
        g_ocx.PlayStopSound();
    } else {
        alert("网络连接错误!");
        return false;
    }
    
    function reqFullScreen(element) {
      var ocx = element;
      if (Sys.ie) {
          //ie浏览器
          ocx.SwitchToFullScreen();
      } else {
          //其他浏览器
          ocx.OnFullScreenClk();
      }
    }
    

    总结

    功能相对较多。

    基本上只支持IE。需要ActiveX(Chrome45 关闭了默认支持ActiveX,需要手动打开;Chrome49就完全不支持ActiveX, 新版Firefox也不支持ActiveX)的支持才能直接调用dll。

    方案四:H5Stream

    使用H5Stream,支持Chrome。文档地址。有后台管理界面,方便操作,配置丰富,功能齐全。

    具体的使用方法请按照使用文档操作,操作比较简单,需要单独开启端口来启动服务。

    总结

    操作简单

    功能齐全,播放清晰

    支持大部分浏览器

    底层好像是使用websocket来做的流媒体播放,也是用videojs基础框架。

    待解决的问题

    1. 105个监控配置进去就就开始传输,不知道怎么按需加载。
    2. 也因为上面的原因,导致后台服务容易down掉,页面在一定时间后也会崩溃。
    3. 不知道怎么动态设置分辨率。不同场景下加载同样分辨率的视频流,总感觉在浪费资源。
    展开全文
  • 监控视频存储方案

    2020-11-13 14:21:21
    监控视频一般为了保证随时调出任意时间段的监控视频,每个监控摄像头数量如此庞大的监控视频存储是一大难度问题。航天安网视频实时压缩服务器可帮监控视频提供10倍无损压缩存储解决方案。 像安防监控视频存储案例,...

    监控视频一般为了保证随时调出任意时间段的监控视频,每个监控摄像头数量如此庞大的监控视频存储是一大难度问题。航天安网视频实时压缩服务器可帮监控视频提供10倍无损压缩存储解决方案。
    像安防监控视频存储案例,存量大,硬盘的需求就会更大更多,还要满足90天的存储时间。
    航天安网视频数据管理系统是以人工智能为基础、专注于视频及图像处理的创新型产品,通过集成深度学习更多种人工智能技术实现智能压缩存储。
    航天安网T-1前段压缩产品
    通过自主研发的核心技术可在不改变帧率、不改变视频分辨率、不改变时长、不损失特征点、不影响后续AI智能分析等条件下实现高清视频平均10倍以上实时压缩,压缩后视频文件大小平均为原文件大小的1/10,另外,该设备支持无线网络与移动网络接入,能够同时完成压缩与传输两项任务。
    在这里插入图片描述
    产品优势:
    在这里插入图片描述
    方案优势:
    符合公安“一机一档”的要求;
    实时增加编码水印,其中含有调用者ID和电脑信息等;
    水印生成后,无法后期消除,在调用视频时实时存在;
    视频所有帧以及帧与帧之间增加溯源信息。
    技术标准:

    本方案严格遵守中华人民共和国国家标准GB/T 28181—2016《公共安全防范视频监控联网系统信息传输,交换,控制技术要求》,满足其中规定的网络传输协议、媒体传输协议和信息传输延迟要求。
    在这里插入图片描述

    展开全文
  • 监控视频专用播放器,支持98%的视频文件,亲测很好用,下载使用绝对没有问题
  • 海康摄像头监控视频播放详解

    万次阅读 2018-01-27 21:31:39
    2019.12.09 更新(重要!!!) 一,此博文及对应代码写于2018年初,基于...二,近期已重新开发此功能,已兼容新/旧款设备,支持单路/多路实时监控,以及单路历史监控视频回放,且采用不同方案实现。详情如下: ...

    2019.12.09 更新(重要!!!)

    一,此博文及对应代码写于2018年初,基于海康SDK V5.3.3.2版本(当时最新版本),只适用于2019年前海康监控设备;(海康监控产品更新换代,旧版SDK不再适用于新产品。故老款设备监控视频可正常查看,新款无法查看)

    二,近期已重新开发此功能,已兼容新/旧款设备,支持单路/多路实时监控,以及单路历史监控视频回放,且采用不同方案实现。详情如下:

    1. 单路视频预览(使用xml布局SurfaceView控件)
    2. 单路视频预览(动态new View 添加到 ViewGroup)
    3. 多路视频预览(动态new View 添加到 ViewGroup)
    4. 多路视频预览(使用RecyclerView)
    5. 单路视频回放(选择时间段)
    6. 多路视频预览集成示例-在指定ViewGroup显示(动态new View 添加到 ViewGroup)

    部分效果图如下:

     

    由于某些原因不便开源,有问题的朋友可私聊交流;

     


     本篇文章讲述的是基于海康SDK播放监控视频,包含以下几个方面:

    • 播放海康视频用到的API详解;
    • 播放海康视频实践过程详解;
    • 播放海康视频Cordova插件封装;

    github地址:https://github.com/fangxiaopeng/fxp-plugin-video,包含完整代码及详细注释,欢迎star or fork

     

    最近项目上有海康监控视频播放需求,包括Android 和 IOS两个版本。今天讲讲Android上的实现过程,后面有空了再讲讲IOS。

     

    思路:基于海康视频SDK,使用AsyncTask登录设备后,获取实时流音视频数据,解码显示到SurfaceView。通过startActivityForResult的resultCode设置回调。

     

    以下为工程文件目录结构及效果截图:

     

     

    下面分阶段讲监控视频播放过程及需要用到的API。

    1,登录设备

    调用以下方法登录设备:

    public int NET_DVR_Login_V30(String sDvrIp, int iDvrPort, ava.lang.String sUserName, String sPassword, NET_DVR_DEVICEINFO_V30 DeviceInfo)

    参数说明:

    [in] sDvrIp          设备 IP 地址或静态域名
    [in] iDvrPort        设备端口号
    [in] sUserName       登录的用户名
    [in] sPassword       用户密码
    [out] DeviceInfo     设备信息

    返回值:

     -1表示失败,其他值表示返回的用户ID值。该用户ID具有唯一性,后续对设备的操作都需要通过此ID实现。

     

    这里需要讲下用于获取设备信息的NET_DVR_Login_V30类。

     新建NET_DVR_Login_V30类对象,作为登录设备的一个参数传入,登录成功后即可返回设备详细信息,包含以下信息:

    sSerialNumber        设备序列号
    byAlarmInPortNum     报警输入个数
    byAlarmOutPortNum    报警输出个数
    byDiskNum            硬盘个数
    byDVRType            设备类型
    byChanNum            设备模拟通道个数
    byStartChan          模拟通道起始通道号
    byAudioChanNum       设备语音通道数
    byIPChanNum          设备最大数字通道个数,低 8 位
    byZeroChanNum        零通道个数
    wDevType             设备类型
    byStartDChan         起始数字通道号
    byHighDChanNum       数字通道个数,高 8 位

     

    2,获取实时流音视频数据

     登录设备成功后,调用NET_DVR_RealPlay_V40 
    方法获取实时流音视频数据。

    public int NET_DVR_RealPlay_V40(int lUserID, NET_DVR_PREVIEWINFO previewInfo, RealPlayCallBack CallBack)

    参数说明:

    [in] lUserID     NET_DVR_Login_V30 的返回值
    [in] previewInfo    预览参数,包括码流类型、取流协议、通道号等
    [in] CallBack       码流数据回调函数

    返回值:

    -1 表示失败,其他值作为 NET_DVR_StopRealPlay 等函数的句柄参数。

    这里需要重点讲下以下两个类:

    (1)NET_DVR_PREVIEWINFO:用于设置预览参数。

    可设置项如下:

    lChannel          通道号,目前设备模拟通道号从 1 开始,数字通道的起始通道号一般从 33 开始,具体取值在登录接口返回
    dwStreamType      码流类型:0-主码流,1-子码流,2-码流 3,3-虚拟码流,以此类推 dwLinkMode       连接方式:0- TCP 方式,1- UDP 方式,2- 多播方式,3- RTP 方式,4-RTP/RTSP,5-RSTP/HTTP
    bBlocked          0- 非阻塞取流,1- 阻塞取流
    bPassbackRecord   0-不启用录像回传,1-启用录像回传。ANR 断网补录功能,客户端和设备之间网络异常恢复之后自动将前端数据同步过来,需要设备支持。
    byPreviewMode     预览模式:0- 正常预览,1- 延迟预览
    byProtoType       应用层取流协议:0- 私有协议,1- RTSP 协议 
    hHwnd             播放窗口的句柄,为 NULL 表示不解码显示

    (2)RealPlayCallback:用于获取实时音视频数据。实现的以下接口

    public interface RealPlayCallBack {
        public void fRealDataCallBack(int iRealHandle, int iDataType, byte[] pDataBuffer, int iDataSize); 
    }

    参数说明:

    [out] iRealHandle        当前的预览句柄
    [out] iDataType          数据类型
    [out] pDataBuffer        存放数据的缓冲区指针
    [out] iDataSize          缓冲区大小

    3,解码播放实时流音视频

    调用NET_DVR_RealPlay_V40 方法获取实时流音视频数据成功后,通过播放库进行解码显示。

    实现RealPlayCallback接口的fRealDataCallback方法,拿到实时流音视频数据,调用以下方法解码播放。

    private void processData(int iPlayViewNo, int iDataType, byte[] pDataBuffer, int iDataSize, int iStreamMode) {
            if (HCNetSDK.NET_DVR_SYSHEAD == iDataType) {
                if (m_iPort >= 0) {
                    return;
                }
                m_iPort = Player.getInstance().getPort();
                if (m_iPort == -1) {
                    Log.e(TAG, "getPort is failed with: " + Player.getInstance().getLastError(m_iPort));
                    return;
                }
                Log.i(TAG, "getPort succ with: " + m_iPort);
                if (iDataSize > 0) {
                    if (!Player.getInstance().setStreamOpenMode(m_iPort, iStreamMode)) //set stream mode
                    {
                        Log.e(TAG, "setStreamOpenMode failed");
                        return;
                    }
                    if (!Player.getInstance().openStream(m_iPort, pDataBuffer, iDataSize, 2 * 1024 * 1024)) //open stream
                    {
                        Log.e(TAG, "openStream failed");
                        return;
                    }
                    while (!m_bSurfaceCreated) {
                        try {
                            Thread.sleep(100);
                        } catch (InterruptedException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        Log.i(TAG, "wait 100 for surface, handle:" + iPlayViewNo);
                    }
    
                    if (!Player.getInstance().play(m_iPort, getHolder())) {
                        Log.e(TAG, "play failed,error:" + Player.getInstance().getLastError(m_iPort));
                        return;
                    }
                    if (!Player.getInstance().playSound(m_iPort)) {
                        Log.e(TAG, "playSound failed with error code:" + Player.getInstance().getLastError(m_iPort));
                        return;
                    }
                }
            } else {
                if (!Player.getInstance().inputData(m_iPort, pDataBuffer, iDataSize)) {
                    Log.e(TAG, "inputData failed with: " + Player.getInstance().getLastError(m_iPort));
                }
            }
        }

    4,停止获取实时流音视频数据

     调用以下方法停止获取实时流:

    public boolean NET_DVR_StopRealPlay(int iRealHandle)

    参数说明:

    [in] iRealHandle         预览句柄,NET_DVR_RealPlay_V40 的返回值

    返回值:

     TRUE表示成功,FALSE表示失败。

     

    5,停止本地播放
     停止获取实时流音视频数据后,还需要手动关闭本地解码播放。可调用以下方法:

        private void stopPlayer() {
            Player.getInstance().stopSound();
            if (!Player.getInstance().stop(this.m_iPort)) {
                Log.e(TAG, "stop is failed!");
                return;
            }
            if (!Player.getInstance().closeStream(this.m_iPort)) {
                Log.e(TAG, "closeStream is failed!");
                return;
            }
            if (Player.getInstance().freePort(this.m_iPort)) {
                this.m_iPort = -1;
                return;
            }
            Log.e(TAG, "freePort is failed!" + this.m_iPort);
        }

    6,注销登录

     单个设备可同时连接的用户数量是有限制的,达到限制后其他用户无法再登录(登录返回错误码5)。所以我们不再预览时,应该注销登录。调用以下方法即可:

    public boolean NET_DVR_Logout_V30 (int lUserID)

    参数说明:

    [in]lUserID        用户 ID 号,NET_DVR_Login_V30 的返回值

    返回值:

    TRUE 表示成功,FALSE表示失败。 

     

    至此,海康摄像头监控视频实时预览过程算是讲完了。下面讲部分具体实现:

     

    1,项目架构

     为了更好的支持后续功能拓展,也为了降低类的复杂度,提升代码可维护性,尽可能的秉持了单一职责原则和接口隔离原则。以下为部分类说明:

    LoginAsyncTask.java            异步任务类登录设备
    AsyncTaskExecuteListener.java  异步任务类执行结果监听接口
    PlaySurfaceView.java           自定义SurfaceView播放视频
    MonitorVedioActivity.java      界面交互Activity
    MethodUtils.java               工具类
    VideoInfo.java                 设备实体类

    2,登录设备

     登录设备,然后根据登录返回信息获取实时流,这里用异步任务类再合适不过了。我是写了一个异步任务类配合接口完成设备

    登录及登录结果获取功能,具体实现可查看github代码。

    3,自动适配单路/多路视频,自定义播放列数

    /**
         * 开始播放实时监控视频
         *
         * @param chanNum   通道数目
         * @param columnNum 展示列数
         */
        private void startPreview(int chanNum, int columnNum) {
    
            playView = new PlaySurfaceView[chanNum];
            // 建立frameLayout容纳所有通道视频画面
            FrameLayout videoLayout = new FrameLayout(this);
            for (int i = 0; i < chanNum; i++) {
                if (playView[i] == null) {
                    // 第i通道SurfaceView
                    playView[i] = new PlaySurfaceView(this);
                    // 设置第i通道监控画面尺寸,单路时全屏播放,多路时分列4:3播放
                    playView[i].setViewSize(metric.widthPixels / columnNum, columnNum == 1 ? metric.heightPixels : 3 * metric.widthPixels / (4 * columnNum));
                    // 设置第i通道监控画面布局参数
                    FrameLayout.LayoutParams videoItemParams = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
                    videoItemParams.topMargin = i / columnNum * playView[i].getCurHeight();
                    videoItemParams.leftMargin = i % columnNum * playView[i].getCurWidth();
                    videoItemParams.gravity = Gravity.TOP | Gravity.LEFT;
                    // 将第i通道SurfaceView添加到FrameLayout
                    videoLayout.addView(playView[i], videoItemParams);
                }
                // 播放第i通道视频
                playView[i].startPreview(iLogId, i + iStartChan);
            }
            // 设置scrollView布局参数
            FrameLayout.LayoutParams scrollViewParams = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
            ScrollView scrollView = new ScrollView(this);
            // 将含有多通道视频画面的frameLayout添加到scrollView
            scrollView.addView(videoLayout);
            // 动态添加scrollView布局
            addContentView(scrollView, scrollViewParams);
            // 获取起始通道监控视频播放状态码
            iPlayId = playView[0].m_iPreviewHandle;
        }

    4,获取实时流音视频数据

    public void startPreview(int iLogId, int chanNum) {
            RealPlayCallBack realPlayCallBack = getRealPlayerCbf();
            if (realPlayCallBack == null) {
                Log.e(TAG, "fRealDataCallBack object is failed!");
                return;
            }
            Log.i(TAG, "preview channel:" + chanNum);
            NET_DVR_PREVIEWINFO netDVRPreviewInfo = new NET_DVR_PREVIEWINFO();
            // 通道号,模拟通道号从1开始,数字通道号从33开始,具体取值在登录接口返回
            netDVRPreviewInfo.lChannel = chanNum;
            // 码流类型
            netDVRPreviewInfo.dwStreamType = 1;
            // 连接方式,0-TCP方式,1-UDP方式,2-多播方式,3-RTP方式,4-RTP/RTSP,5-RSTP/HTTP
            // previewInfo.dwLinkMode = 5;
            // 0-非阻塞取流,1-阻塞取流
            netDVRPreviewInfo.bBlocked = 1;
            // 实时预览,返回值-1表示失败
            this.m_iPreviewHandle = HCNetSDK.getInstance().NET_DVR_RealPlay_V40(iLogId, netDVRPreviewInfo, realPlayCallBack);
    
            if (m_iPreviewHandle < 0) {
                Log.e(TAG, "NET_DVR_RealPlay is failed!Err:" + HCNetSDK.getInstance().NET_DVR_GetLastError());
            }
        }

    5,解码播放实时流音视频

     见前面过程讲解部分,或github代码,不再赘述。

    6,SurfaceView播放视频

     SurfaceView是View的子类,功能非常强大。它允许在其上添加层,允许其他线程更新视图对象,使用了双缓冲机制,非常适

    合我们的需求。创建SurfaceView的时候需要实现SurfaceHolder.Callback接口,它可以用来监听SurfaceView的状态,比如:SurfaceView

    的改变 、SurfaceView的创建 、SurfaceView 销毁等,我们可以在相应的方法中做一些操作。

     这里我实现了SurfaceHolder.Callback接口,并重写了以下几个方法:

    @Override
    public void surfaceCreated(SurfaceHolder paramSurfaceHolder) {
                    videoSurfaceview.getHolder().setFormat(-3);
                    if ((-1 != iPort) && (paramSurfaceHolder.getSurface().isValid()))
                        Player.getInstance().setVideoWindow(iPort, 0, paramSurfaceHolder);
                }
    
    @Override
    public void surfaceChanged(SurfaceHolder paramSurfaceHolder, int paramInt1, int paramInt2, int paramInt3) {
    
                }
    
    @Override
    public void surfaceDestroyed(SurfaceHolder paramSurfaceHolder) {
                    if ((-1 != iPort) && (paramSurfaceHolder.getSurface().isValid()))
                        Player.getInstance().setVideoWindow(iPort, 0, null);
                }

    注意:必须实现SurfaceHolder.Callback接口并重写以上方法,不然会出现诸如锁屏再进入或切换到后台再进入后黑屏问题。

    7,获取错误信息

    (1)返回最后操作的错误码NET_DVR_GetLastError

    // 调用 NET_DVR_GetLastError 获取错误码,通过错误码判断出错原因
    int errorCode = HCNetSDK.getInstance().NET_DVR_GetLastError();

    错误码详见《设备网络编程指南(Android)》第4章。

     

    至此,Android平台的海康视频播放功能开发完成了。下面讲讲封装为Cordova插件。

     

     我以前写过几篇封装Cordova插件的博文,业务需求虽不同,但方法是一样的,所以这里就不再重复写了。海康视频播放插件已上传到github,所有代码均有详细注释,github地址:https://github.com/fangxiaopeng/fxp-plugin-video。如果大家对Cordova插件开发有兴趣的话,可以看看我的另外几篇博文:

     Cordova插件开发(1)-Android插件开发详解

     Cordova插件开发(2)-Android插件安装包制作详解

     Cordova插件开发(3)-将Cordova插件发布到npm

     

    这里需要讲的是将视频播放结果设置到js回调。

     

    思路:以startActivityForResult的方式启动视频播放Avtivity,在视频播放Activity退出时设置resultCode并传递信息,

    在onActivityResult回调中获取对应Activity传递的信息,通过callbackContext设置js回调。

     

    下面是具体实现:

    (1)在继承于CordovaPlugin的类中,以startActivityForResult的方式启动视频播放Avtivity

    private void toMonitorVideoActivity(VideoInfo videoInfo) {
            Log.e(TAG, "toMonitorVideoActivity");
    
            Intent intent = new Intent(this.cordova.getActivity(), MonitorVedioActivity.class);
            Bundle bundle = new Bundle();
            bundle.putSerializable("videoInfo", videoInfo);
            intent.putExtras(bundle);
            if (this.cordova != null) {
                this.cordova.startActivityForResult((CordovaPlugin) this, intent, REQUEST_MonitorVideo);
            }
        }

    (2)在视频播放Activity退出时设置resultCode并传递信息

        /**
         * 退出Activity,设置返回值
         *
         * @param activity  待退出activity
         * @param resultCode    返回码
         * @param msg   返回信息
         */
        public void quitActivity(Activity activity,int resultCode, String msg){
            Intent intent = new Intent();
            intent.putExtra("result",msg);
            activity.setResult(resultCode,intent);
            activity.finish();
        }

    (3)在onActivityResult回调中获取对应Activity传递的信息

        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent intent) {
            switch (requestCode){
                case REQUEST_HCVideo:
                    Log.i(TAG,"back from HCVideoActivity");
                    break;
                case REQUEST_MonitorVideo:
                    Log.i(TAG,"back from MonitorVedioActivity");
                    break;
            }
            setCallBack(resultCode,intent);
        }

    (4)通过callbackContext设置js回调

        private void setCallBack(int resultCode, Intent intent){
            if (this.callbackContext != null){
                String resultMsg = intent.getExtras().getString("result");
                Log.i(TAG,"resultCode:" + resultCode);
                Log.i(TAG,"resultMsg:" + resultMsg);
                switch (resultCode){
                    case RESULT_NORMAL:
                        Log.i(TAG,"RESULT_NORMAL");
                        callbackContext.success("success");
                        break;
                    case RESULT_ERROR:
                        Log.e(TAG,"RESULT_ERROR");
                        callbackContext.error(resultMsg);
                        break;
                }
            }
        }

    OK。

     


    欢迎关注微信公众号交流讨论!

     

     

     

     

    展开全文
  • 海康网络摄像头 通过WEB访问海康网络摄像头在线展示监控视频
  • 道路监控视频

    热门讨论 2017-02-25 01:50:17
    4个道路监控视频,avi格式,可用于做opencv 车辆检测的测试材料
  • 前端实现播放直播视频或监控视频

    千次阅读 2020-12-16 16:03:56
    用百度web播放器实现的监控视频功能 API参考 https://cloud.baidu.com/doc/MCT/index.html 实现后效果: 九宫格视频监控。 代码: $.ajax({ type: "get", url: '你的直播流url地址', success: function...

    用百度web播放器实现的监控视频功能
    API参考 https://cloud.baidu.com/doc/MCT/index.html
    实现后效果:
    在这里插入图片描述
    九宫格视频监控。

    代码:

    $.ajax({
    				type: "get",
    				url: '你的直播流url地址',
    				success: function (res) {
    					console.log(res)
    					var playlists = new Array();
    					for (let i = 0; i < res.length; i++) {
    						playlists.push({
    							title: res[i].name,
    							sources: [
    								{
    									file: res[i].url,
    
    								},
    							]
    						})
    					}
    					console.log(playlists)
    					var player = cyberplayer("playercontainer").setup({
    						isLive: true, // 必须设置,表明是直播视频
    						//file: "http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8", // <—hls直播地址
    						playlist:playlists,//直播流列表
    							// [
    							// 	{
    							// 		title: "测试00",
    							// 		sources: [
    							// 			{
    							// 				file: "http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8",
    
    							// 			},
    							// 		]
    							// 	},
    							// ],
    						autostart: true,
    						stretching: "uniform",
    						volume: 100,
    						controls: true,
    						hls: {
    							reconnecttime: 5 // hls直播重连间隔秒数
    						},
    						ak: "1de8cb4ba79d4fb3b57fe86b1564c325" // 公有云平台注册即可获得accessKey
    					});
    
    				}
    			});
    

    效果:
    在这里插入图片描述
    次
    图2为视频选择列表
    找不到js文件的话留言找我

    展开全文
  • 到交警部门可bai以看。...版监控录像可以发生...2.察看交通事故监控视频是当事人取证的方法之一,当事人有权利调看监控录像。扩展资料:主要功能:1、本地录像,保存一定时间段内的本地视频监控录像资料,并能方便地...
  • 主流监控视频demo及接入操作手册

    热门讨论 2017-11-13 13:29:29
    主流监控视频demo及接入操作手册!支持抓图、录像调整摄像头角度
  • 监控视频在现代城市中发挥着巨大的作用,交通要道、景点、商场、楼道、街道等地方都要安装监控。摄像机每天24小时的工作成果,对存储方式有着较大要求。 面对存储需求 (1)容量需求弹性较大,存储容量的多少、 (2...
  • 目前海量视频的存储方式一般分为:实体硬盘存储和云存储两种方式。在海量视频存储问题的解决方案上,选择哪一种方式都会遇到很头疼的事情,选择云存储要考虑到安全性、下载和数据传输...像国家安防,雪亮工程的监控视频
  • 而海量安防监控视频存储成为了城市智慧化运营的一个关键问题。传统的安防监控存储方案在智慧城市建设中暴露出存储成本高,耗能高,维护成本飙升等问题,如何在保证视频数据高清无损的前提下,尽可能的减少视频存储...
  • 监控视频现在应用到各行各业,小到机房的监控视频,大到安防的街道监控视频。那么视频的存储就会遇到很大的难题,每年的硬盘损耗,视频质量损坏是一大难题。 一:视频压缩 航天安网VDMS视频数据管理系统中推出BBW...
  • 车辆识别-道路监控视频源(高清 AVI格式),可用于基于视频的车辆识别,内含3个视频文件
  • h264监控视频文件播放软件

    热门讨论 2012-10-02 08:55:48
    h264监控视频文件播放软件,可以同时4画面
  • web前端监控视频的展示

    千次阅读 2019-10-05 13:03:02
    监控视频的前端展示,我主要做过三种视频流的展示:rtsp,HLS和FLV。 1、rtsp视频流  rtsp视频流需要安装插件,我当时做这个流是安装VLC播放器插件,这个插件兼容性不好,目前只发现360浏览器能正常播放,局限性...
  • 用h5video和h5stream实现监控视频的播放--rtsp流

    千次阅读 多人点赞 2019-09-07 10:17:12
    这几天一直很头疼这个监控视频的问题,研究了很多方案,包括直接用video写,还有vue-video-player插件,最后还是通过h5stream实现了,方法很简单,下面我来简单总结一下。(我是用的vue-cli2) 第一步,先在唯一的...
  • 天地伟业监控视频丢失恢复方法

    千次阅读 2019-08-03 15:33:12
    近日我们遇到一个客户使用的天地伟业监控由于误操作导致数据丢失的案例。 CHS数据恢复验室工程师从客户提供的镜像文件中成功分析出了视频...使用万能监控视频恢复程序,扫描类型设置成天地伟业,然后开始扫描。 ...
  • Video Extractor监控视频侦查取证分析系统 修改时间:2019-03-25 22:10:35 浏览次数:233次 Video Extractor软件功能与升级介绍 支持监控录像机品牌:支持海康监控;支持大华监控;支持WFS监控; 支持...
  • 本文介绍如何使用云视睿博的监控转发系统将局域网内的监控摄像头视频转发到互联网上,通过云视睿博流媒体服务器NTV Media Server G3进行流媒体播出。用户通过智能手机、PC等终端远程监看,并可以通过API接口实现与...
  • 关于直播视频平台与监控视频平台技术架构方案   前言 讲个大实话,直播平台复杂在直播端(也就是播放端),而监控平台复杂在接入端(前端设备或平台)。 至于技术难点,难者自知。   一、直播平台(想尽一切...
  • 拷贝了个监控视频但是一半的播放不成,文件类型是264的,下载了个264播放器也无法播放,还有什么播放器能播放监控视频
  • 汉邦高科监控视频删除后恢复

    千次阅读 2016-04-20 16:50:32
    汉邦高科作为众多监控品牌中的一种,使用也是比较广泛的,但是监控视频经常会因为各种各样的原因导致其丢失损坏,那么遇到这种情况我们该怎么办呢?甲驭科技数据恢复中心小编教您如何对丢失的汉邦监控视频数据恢复。 ...
  • 本文将和大家分享如何利用深度学习算法实现高清监控视频无损压缩。 传输和存储能力无力支撑高清视频数据增长的现实 随着5G技术的成熟,以及高清监控设备的普及,视频数据暴增的时代已经来临。同时,面对着如VR、4K、...
  • 监控视频有延迟,怎么来解决?

    千次阅读 2018-01-11 00:00:00
    在无线视频监控的过程中,图像不清晰,监控视频有延迟这类现象是用户及商家所不乐见的。因此,今天我们来谈谈如何解决监控视频延迟的问题。 在无线视频监控系统的使用过程中,我们发现会高概率会发生视频延迟现象的...
  • LiveGBS可以实现监控视频统一汇聚、集中存储。 按需云端录像-用户播放摄像机时录像 配置 按需直播 开启,云端录像 开启 云端一直录像-一直存储国标摄像机录像 配置 按需直播 关闭,云端录像 开启,LiveGBS支持...
  • 严格意义上说,监控视频画面的图像质量不仅跟分辨率有关,也跟信噪比,编码方式等有关;但最常用的技术指标就是分辨率了; 下面是常用的几种分辨率术语, D1:704*576 HCIF(Half CIF):704*288 CIF:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,746
精华内容 8,698
关键字:

监控视频