iscflutterplugin 1.0.7
iscflutterplugin: ^1.0.7 copied to clipboard
A Flutter plugin to play hikvision isc platform. It used hikvision native library, *.so for java and *.a for ios.
example/lib/main.dart
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:iscflutterplugin/isc_http.dart';
import 'package:iscflutterplugin/isc_player.dart';
import 'package:iscflutterplugin/iscflutterplugin.dart';
import 'package:path_provider/path_provider.dart';
import 'package:permission_handler/permission_handler.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
Iscflutterplugin _controller;
String _previewUrl;
var cameraCode;
_MyAppState() {
//初始化配置
ArtemisConfig.host = "xxx";
ArtemisConfig.appKey = "xxx";
ArtemisConfig.appSecret = "xxx";
cameraCode = 'xxx';
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('海康isc播放器插件,支持android/ios'),
),
body: Column(
children: <Widget>[
Container(
width: 500,
height: 300,
color: Colors.black,
child: IscPlayerWidget(
onCreated: _onCreated,
),
),
Expanded(
child: SingleChildScrollView(
child: Container(
width: double.infinity,
child: Column(
children: <Widget>[
RaisedButton(child: Text("预览"), onPressed: _preview),
RaisedButton(
child: Text("码流平滑切换(仅支持Android)"),
onPressed: _changeStream),
RaisedButton(
child: Text("抓拍(需存储权限)"), onPressed: _capture),
RaisedButton(
child: Text(
_isRecording ? "结束录像(需存储权限)" : "开始录像(需存储权限)"),
onPressed: _record),
RaisedButton(child: Text("云台"), onPressed: _ptzs),
],
),
),
),
)
],
),
),
);
}
void _onCreated(controller) {
_controller = controller;
}
void _changeStream() async {
var ret = await _controller.changeStream(_previewUrl);
print('码流切换 : $ret');
}
///云台控制
void _ptzs() async {
//开始云台控制
var ret = await IscApi.ptzControl(cameraCode, 0, 'ZOOM_OUT');
print('开始云台控制 : $ret');
sleep(Duration(milliseconds: 100));
//停止云台控制
var ret1 = await IscApi.ptzControl(cameraCode, 1, 'ZOOM_OUT');
print('停止云台控制 : $ret1');
}
var _isRecording = false;
///录像
void _record() async {
String path;
if (defaultTargetPlatform == TargetPlatform.android) {
//申请权限
_requestPermission();
// //图片保存路径
path =
'${(await getExternalStorageDirectory()).path}/${DateTime.now().toString()}.mp4';
}
print('path = $path');
if (_isRecording) {
var ret = await _controller.stopRecord();
if (ret['ret']) {
_isRecording = false;
}
print('结束录像 : $ret');
} else {
var ret = await _controller.startRecord(path);
if (ret['ret']) {
_isRecording = true;
}
print('开始录像 : $ret');
}
setState(() {});
}
///抓拍
void _capture() async {
String path;
//抓拍
if (defaultTargetPlatform == TargetPlatform.android) {
//申请权限
_requestPermission();
//图片保存路径
path =
'${(await getExternalStorageDirectory()).path}/${DateTime.now().toString()}.jpg';
}
var ret = await _controller.capturePicture(path);
print('path = $path');
print('抓拍 : $ret');
}
///预览
void _preview() async {
//获取预览地址
Map ret = await IscApi.getPreviewURL(cameraIndexCode: cameraCode,version: 1);
_previewUrl = ret['data']['url'];
print('预览地址 = $_previewUrl');
//设置播放器状态回调
_controller.setStatusCallback((status) {
print('播放器状态 = ${_controller.getStatusMessage(status)}');
});
//开始预览
_controller.startRealPlay(_previewUrl);
}
///申请权限
void _requestPermission() async {
if (await Permission.storage.request().isGranted) {
print('已授权');
}
}
}