|
|
导航: |
论坛 -> 移动应用开发
斑竹: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最终实现如下显示效果:
此帖子包含附件:
大小:57.5K |
----------------------------------------------
|
作者: |
|
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调用显示?
----------------------------------------------
|
作者: |
|
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的虚拟方法上不能直接调用,需要转化
----------------------------------------------
-
|
作者: |
|
2018/12/31 22:51:10 |
4楼: |
我想到另外途径,但是不知道安卓平台是否可行,仅供参考。
海康威视提供的Win SDK,除了可以直接播放外,可以回调出图像(RGB?YUV2?),给调用者进行修改输出。比如添加水印,字幕,旋转图像等等。
如果安卓平台也提供回调图像功能,就直接赋值到TBitmap(可能需要转换格式),然后载入到TImage的控件。免除了去搞安卓底层、原生的东西,直接全部是delphi的,开发岂不更快。
我的那个小车的摄像头视频MJPEG,就是这样做的。
----------------------------------------------
-
|
作者: |
|
2018/12/31 22:56:59 |
4楼: |
但是像你这个项目,我建议你直接在界面中嵌入TWEBBroswer,用HTML5来打开,太方便了,win32,android,ios平台都支持,又不是什么大项目,不要担心性能问题,直接用web的js控制播放,把官方提供的js下载下来,直接打包了,本地调用多好,省时省力
----------------------------------------------
-
|
作者: |
|
2019/1/1 19:14:12 |
5楼: |
4 楼正解 或者用ffmpeg vlc 之类 调取 rtsp 视频流
----------------------------------------------
健康快乐每一天
|
作者: |
|
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再封装一遍;
----------------------------------------------
|
作者: |
|
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楼的方法,但是遇到的坑很多,目前还没有搞定。。。。
----------------------------------------------
|
|