萤石云版本
implementation 'com.ezviz.sdk:ezuikit:2.2.1'
一、编程
1、初始化
//初始化EZUIKit
EZUIKit.initWithAppKey(context.applicationContext as Application,AppKey)
//设置授权token
EZUIKit.setAccessToken(accessToken);
//设置播放回调callback
mPlayer?.setCallBack(MyCallBack(mPlayer!!))
//设置播放参数
mPlayer?.setUrl(playUrl);
//开始播放
mPlayer?.startPlay();
2、报错AccessToken异常,可能是过期或者校验失败,重新获取accessToken后可重试(转义前错误码110002)
通过查询解决,参考网址https://www.jianshu.com/p/3da73df03dc0
class MyCallBack(var mPlayer: EZUIPlayer) : EZUIPlayer.EZUIPlayerCallBack {
override fun onPlayTime(p0: Calendar?) {
Log.d("My","onPlayTime")
}
override fun onPrepared() {
val loadView: View = mPlayer.getChildAt(mPlayer.childCount - 1)
(loadView as? RelativeLayout)?.visibility = View.GONE
Log.d("My","onPrepared")
}
override fun onVideoSizeChange(p0: Int, p1: Int) {
Log.d("My","onVideoSizeChange")
}
override fun onPlayFail(p0: EZUIError?) {
Log.d("My","onPlayFail")
}
override fun onPlaySuccess() {
Log.d("My","onPlaySuccess")
}
override fun onPlayFinish() {
Log.d("My","onPlayFinish")
}
}
3、注册
android
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
main.java.srcDirs += 'libs/'
main.jniLibs.srcDirs = ['libs']
}
implementation 'com.ezviz.sdk:ezuikit:2.2.1'
/*萤石SDK核心模块,必须依赖*/
implementation 'com.ezviz.sdk:ezviz-sdk:4.12.0'
ios
s.dependency 'EZUIKit'
4、遇到的问题
创建多个实例,控制器只能控制最后一个问题
解决
1、flutter注册Widget
@override
Widget build(BuildContext context) {
if (defaultTargetPlatform == TargetPlatform.android) {
return AndroidView(
onPlatformViewCreated: _onPlatformViewCreated,
viewType: "xxx.view",
creationParams: <String, dynamic>{
"key": "参数",
},
creationParamsCodec: const StandardMessageCodec(),
);
} else if (defaultTargetPlatform == TargetPlatform.iOS) {
return UiKitView(
viewType: "xxx.view",
onPlatformViewCreated: _onPlatformViewCreated,
creationParams: <String, dynamic>{
"key": "参数",
},
creationParamsCodec: const StandardMessageCodec(),
);
} else {
print("flutter_plugin_demo 不支持当前平台");
return Container();
}
}
_onPlatformViewCreated注册控制器
void _onPlatformViewCreated(int id) {
EzvizUIKitControl controller = EzvizUIKitControl(id,widget.callback);
widget.ezvizUIKitViewCreatedCallback(controller);
}
控制器注册交互和监听plugin_$id是重点,构建一个widget时,重新构建一个监听器
class EzvizUIKitControl {
final MethodChannel _channel;
EventCallback callback;
EzvizUIKitControl(int id,this.callback):_channel = new MethodChannel("plugin_$id"){
///监听
this.enableWatcherEzviz(id);
this.listenerEzviz((result) {
this.callback(result);
return;
});
}
}
监听
///
void enableWatcherEzviz(int id) async {
if (_eventSubsEzviz == null) {
_eventSubsEzviz = EventChannel('event_$id')
.receiveBroadcastStream()
.listen(_eventListenerEzviz, onError: _errorListener);
}
}
2、android
methodChannel = MethodChannel(messenger, "plugin_$id")
methodChannel?.setMethodCallHandler(this)
///监听
var eventChannel = EventChannel(messenger, "event_$id")
eventChannel?.setStreamHandler(
object : EventChannel.StreamHandler {
override fun onListen(arguments: Any?, events: EventChannel.EventSink?) {
xxxxxxx
}
override fun onCancel(arguments: Any?) {
}
}
)
3、ios
//注册方法
_channel = FlutterMethodChannel(name: "plugin_"+String(viewId), binaryMessenger: registrar.messenger())
registrar.addMethodCallDelegate(self, channel: _channel)
//监听
let eventChannel = FlutterEventChannel(name: "event_"+String(viewId), binaryMessenger: registrar.messenger())
eventChannel.setStreamHandler(self)
二、使用
1、android
权限
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.ivy_ezviz_plugin"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.FLASHLIGHT"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
tools:ignore="ProtectedPermissions"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!--基础功能所需权限-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!--配网所需权限-->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<!--对讲所需权限-->
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!--视频通话权限所需-->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
</manifest>
2、ios
ios注释 # use_frameworks!
三、报错
大坑!!!!!!!!!萤石云官方的
写完代码测试完美!,提交商店失败
ITMS-90809: Deprecated API Usage - New apps that use UIWebView are no longer accepted. Instead, use WKWebView for improved security and reliability. Learn more (https://developer.apple.com/documentation/uikit/uiwebview).
问官方,回答
您好,cocoapods目前的版本是4.8.6,已不维护更新,请手动集成官网最新的版本开发集成,https://open.ys7.com/mobile/download.html?type=app
心态---崩溃!!!!!!
ios解决方法
1、下载官方sdk
https://open.ys7.com/mobile/download.html
https://open.ys7.com/mobile/download.html?type=app
2、解压后,将sdk放到自己的项目
3、配置pod
#
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html.
# Run `pod lib lint xxx_ezviz_plugin.podspec' to validate before publishing.
#
Pod::Spec.new do |s|
# SDK名字
s.name = 'xxx_ezviz_plugin'
s.version = '0.0.1'
s.summary = 'A new Flutter plugin.'
s.description = <<-DESC
A new Flutter plugin.
DESC
s.homepage = 'http://example.com'
s.license = { :file => '../LICENSE' }
s.author = { 'Your Company' => 'email@example.com' }
s.source = { :path => '.' }
s.source_files = 'Classes/**/*'
s.dependency 'Flutter'
#s.subspec 'EZUIKit' do |tc|
# tc.dependency 'EZUIKit', '~>2.0'
# end
# sdk
# s.dependency 'EZUIKit' , '~> 2.0'
# a库
s.vendored_library = 'Classes/Framework/**/*.a'
# 资源文件
s.resource = 'Classes/Framework/**/*.metallib'
# framework库
# s.vendored_frameworks = 'Classes/**/*.framework'
#引用libxml2.lib和libz.lib 去掉头尾的lib
# s.library = "z"
# s.libraries = "z","bz2","iconv","stdc++","stdc++.6.0.9",
# s.frameworks = "AVFoundation","SystemConfiguration","MobileCoreServices","VideoToolbox","AudioToolbox","GLKit","CoreMedia","OpenAL"
s.platform = :ios, '9.0'
# Flutter.framework does not contain a i386 slice.
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' }
s.swift_version = '5.0'
end
4、插件库导入
解决方案:
s.libraries = "z","bz2","iconv","stdc++","stdc++.6.0.9",
s.frameworks = "AVFoundation","SystemConfiguration","MobileCoreServices","VideoToolbox","AudioToolbox","GLKit","CoreMedia","OpenAL"
5、由于EZUIOpenSDK太大,300+M,无法上传至gitee,只能下载后再放到插件的目录下面!!!!
总结:不懂原生,整合太麻烦,优化插件库的方法正在寻找,争取不手动添加
遇到的问题 1、新建的swift文件引用不到
处理: 1、在AS中新建文件,在xcode中引用文件
2、*.framework 本地的需要到AS中
pod install一下