DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: xiao2024
今日帖子: 15
在线用户: 19
导航: 论坛 -> 移动应用开发 斑竹:flyers,iamdream  
作者:
男 glwang (glwang) ★☆☆☆☆ -
盒子活跃会员
2018/12/31 16:00:33
标题:
江湖救急:Delphi FMX 安卓/IOS APP开发海康威视萤石云SDK网络摄像机直播、回放等视频播放解决方案思路! 浏览:2727
加入我的收藏
楼主: 1、海康威视萤石云SDK官方开发文档及下载地址:
https://open.ys7.com/doc/zh/
2、关键代码官方示例:安卓
6.2. 直播
6.2.1. 步骤
创建播放器
设置handler回调、显示区域、设备如果设置了视频加密,需要设置视频加密密码,默认为设备的6位验证码
启动播放
停止播放
释放播放器
实例代码如下:Java

    EZPlayer player  = EZOpenSDK.getInstance().createPlayer(String deviceSerial,int cameraNo);

    //设置Handler, 该handler将被用于从播放器向handler传递消息
    player.setHandler(mHandler);

    //设置播放器的显示Surface
    player.setSurfaceHold(mHolder);

    /**
     * 设备加密的需要传入密码
     * 传入视频加密密码,用于加密视频的解码,该接口可以在收到ERROR_INNER_VERIFYCODE_NEED或ERROR_INNER_VERIFYCODE_ERROR错误回调时调用
     * @param verifyCode 视频加密密码,默认为设备的6位验证码
     */
    player.setPlayVerifyCode(String verifyCode);

    //开启直播
    player.startRealPlay();

    //停止直播
    player.stopRealPlay();

    //释放资源
    player.release();
3、当前开发遇到的问题难点:怎样在Delphi FMX窗体中显示SDK中的EZPlayer player对象播放的视频??换句话说:SDK中的这个EZPlayer对象在Delphi中如何处理才能显示视频??
4、Delphi APP最终实现如下显示效果:
此帖子包含附件:
JPEG 图像
大小:57.5K
----------------------------------------------
作者:
男 luchao900 (哈你宝贝) ▲▲▲▲△ -
普通会员
2018/12/31 18:17:30
1楼: 这是要在Android界面中绘制 原生ezplayer 啊,按照fmx源码中实现的webbroser来看,需要重新写两个文件,(源码中是两个文件分别实现)
实现类
Texplayer    继承自control,有一个要实现的 Iexplayer 接口成员,在control的方法中嵌套调用Iexplayer相对应的方法
TFactoryExplayerserver     继承自接口IFmxexplayer,有createExplayer 与 destoryExplayer方法,用于创建与销毁Texplayer
接口
Iexplayer    有要实现的explayer控件的方法,另外必须添加
         procedure SetWebBrowserControl(const AValue: TCustomWebBrowser);
          //WebBrowser要替换成explayer
         function GetParent: TFmxObject;
         function GetVisible : Boolean;
         procedure UpdateContentFromControl;
IFmxexplayer      有create 与 destory方法


方法

注册服务 TFactoryExplayerserve   
       //TPlatformServices.Current.AddPlatformService(IFMXWBService, WBService);
       //IFMXWBService是TFactoryExplayerserver类, WBService是实现的TFactoryExplayerserver实例
       //这步要用{IFDFINE xxxxx}来定义的,因为你只有Android的要实现,
       //win32时就需要用空接口来轮空了,
       //Android时调用的是Android自己继承自TFactoryExplayerserver且重写的类
反注册服务


注册控件  继承自Texplayer并带有属性的TxxxxxExplayer控件
反注册控件   {IFDFINE}……




Android类
Tandroidexplayerserver   用于实现Iexplayer接口中方法的类,并更新内容,设置焦点,父控件,调整控件边界
TandroidFactoryEPserver  继承自IFmxexplayer,创建于销毁Tandroidexplayerserver


方法
注册服务  TandroidFactoryEPserver用于替换上面的TFactoryExplayerserve
反注册服务  {IFDFINE}……  TandroidFactoryEPserver
        //TPlatformServices.Current.RemovePlatformService(IFMXWBService);


看着是不是好糟心啊,fmx的native都是用画板自己绘制的控件,但是原生就要调用原生接口正常生成,然后与fmx的control进行绑定并进行边界调整与焦点设置,这就是跨平台的代价

我看TMS实现的步骤都是大同小异,区别在于,TMS先把SetWebBrowserControl,GetParent,GetVisible,UpdateContentFromControl提取出来写了一个父类control,具体的子类直接继承这个,并实现接口调用

有相关研究的朋友继续补充啊,咱们将这个问题研究并进行简化,大家以后在绘制原生控件时就方便很多了。
----------------------------------------------
-
作者:
男 glwang (glwang) ★☆☆☆☆ -
盒子活跃会员
2018/12/31 22:12:13
2楼: 感谢1楼luchao900提供的思路!可否将ezplayer视频播放窗口用Java封装起来,然后用Delphi调用显示?
----------------------------------------------
作者:
男 luchao900 (哈你宝贝) ▲▲▲▲△ -
普通会员
2018/12/31 22:44:10
3楼: 嗯,当然能了,Tbaner,Twebbroswer,Tcalendar都是类似这样子封装起来的,都是先规划一个原型类,然后在各自平台上面分别实现,win平台调用的ole,Android调用的java代码,mac,ios调用的是OC
这本来就是EMB封装原生控件的模板
而且上面的思路我研究了好长时间,分别把Lazarus Android代码和Delphi代码进行对比,还参照了FmxUI的源代码。
另外要实现java接口函数的话,还需要分别建立接口类,java的接口虚拟类在Delphi的虚拟方法上不能直接调用,需要转化
----------------------------------------------
-
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2018/12/31 22:51:10
4楼: 我想到另外途径,但是不知道安卓平台是否可行,仅供参考。

海康威视提供的Win SDK,除了可以直接播放外,可以回调出图像(RGB?YUV2?),给调用者进行修改输出。比如添加水印,字幕,旋转图像等等。

如果安卓平台也提供回调图像功能,就直接赋值到TBitmap(可能需要转换格式),然后载入到TImage的控件。免除了去搞安卓底层、原生的东西,直接全部是delphi的,开发岂不更快。

我的那个小车的摄像头视频MJPEG,就是这样做的。
----------------------------------------------
-
作者:
男 luchao900 (哈你宝贝) ▲▲▲▲△ -
普通会员
2018/12/31 22:56:59
4楼: 但是像你这个项目,我建议你直接在界面中嵌入TWEBBroswer,用HTML5来打开,太方便了,win32,android,ios平台都支持,又不是什么大项目,不要担心性能问题,直接用web的js控制播放,把官方提供的js下载下来,直接打包了,本地调用多好,省时省力
----------------------------------------------
-
作者:
女 sinagirl (雪亮) ★☆☆☆☆ -
盒子活跃会员
2019/1/1 19:14:12
5楼: 4 楼正解 
或者用ffmpeg vlc 之类 调取 rtsp 视频流
----------------------------------------------
健康快乐每一天
作者:
女 sinagirl (雪亮) ★☆☆☆☆ -
盒子活跃会员
2019/1/1 19:15:36
6楼: 迂回点 用as打包成jar delphi 调用 参考 zxing4delphi
----------------------------------------------
健康快乐每一天
作者:
男 glwang (glwang) ★☆☆☆☆ -
盒子活跃会员
2019/1/2 10:07:06
7楼: 1楼是终极解决方案,开发难度高,技术水平低弄不了;
4楼(上)方案不清楚是否可用于萤石云SDK,技术水平低弄不了;
4楼(下)思路简捷的解决方案;
6楼解决方案应该可行,只是开发IOS还需要用XCODE OC再封装一遍;
----------------------------------------------
作者:
男 nickemma (N.E Zhou) ★☆☆☆☆ -
普通会员
2019/1/2 12:39:52
8楼: 我理解错误了,我还以为你用的是海康威视的SDK,原来你用了萤石的SDK

这两个是不同的东西。

http://www.hikvision.com/cn/download_more_391.html

我理解的萤石:
萤石支持的是IOT网络摄像头,适合家庭、商铺等非专业场合。优点是互联网使用方便。不管你家里的宽带是什么类型(公网/私网),支持萤石的设备都可以上线后自动注册到萤石的云服务器中,由服务器中转数据。

有好也有坏。坏处就是数据经过萤石云主机转发,安全、可控性等。。自己想咯
我个人是不喜欢这种类型,私密的东西都上云了。如果客户的,管它呢。。。

除了萤石,海康威视应该有支持安卓下的SDK。这个SDK应该支持回调图像,给OPENCV等进行二次开发的。

算了,反正可以解决都可以。嵌入网页是最快的解决办法。
----------------------------------------------
-
作者:
男 glwang (glwang) ★☆☆☆☆ -
盒子活跃会员
2019/1/2 18:39:15
9楼: 楼上说的对!海康威视的PC端SDK还好说,虽然现在官方已经不提供Delphi版接口声明了(哈哈 好像VB也不提供啦!),但是翻译一下C/C++的头文件为Pascal也不难,就是萤石云SDK比较麻烦!
----------------------------------------------
作者:
男 glwang (glwang) ★☆☆☆☆ -
盒子活跃会员
2019/1/15 11:46:45
10楼: 经测试4楼(下)思路简捷的解决方案可以实现实时查看直播摄像头的画面,但是无法查看录像回放之前已保存的视频(好像萤石云官方还没有实现H5的录像回放功能)。计划采用6楼的方法,但是遇到的坑很多,目前还没有搞定。。。。
----------------------------------------------
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行74.21875毫秒 RSS