iscflutterplugin 1.0.8 copy "iscflutterplugin: ^1.0.8" to clipboard
iscflutterplugin: ^1.0.8 copied to clipboard

outdated

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: double.infinity,
              height: 200,
              color: Colors.black,
              child: IscPlayerWidget(
                onCreated: _onCreated,
              ),
            ),
            Expanded(
              child: SingleChildScrollView(
                child: Container(
                  width: double.infinity,
                  child: Column(
                    children: <Widget>[
                      Container(
                          width: double.infinity,
                          child: RaisedButton(
                              child: Text("预览"), onPressed: _preview)),
                      Container(
                          width: double.infinity,
                          child: RaisedButton(
                              child: Text("停止预览"), onPressed: _stop)),
                      Container(
                        width: double.infinity,
                        child: RaisedButton(
                            child: Text("码流平滑切换(仅支持Android)"),
                            onPressed: _changeStream),
                      ),
                      Container(
                        width: double.infinity,
                        child: RaisedButton(
                            child: Text("抓拍(需存储权限)"), onPressed: _capture),
                      ),
                      Container(
                        width: double.infinity,
                        child: RaisedButton(
                            child: Text(
                                _isRecording ? "结束录像(需存储权限)" : "开始录像(需存储权限)"),
                            onPressed: _record),
                      ),
                      Container(
                          width: double.infinity,
                          child: RaisedButton(
                              child: Text("云台"), onPressed: _ptzs)),
                      Container(
                        width: double.infinity,
                        child: RaisedButton(
                            child: Text("回放"), onPressed: _playBack),
                      ),
                      Container(
                        width: double.infinity,
                        child: RaisedButton(
                            child: Text("回放指定开始时间位置"), onPressed: _seekTime),
                      ),
                    ],
                  ),
                ),
              ),
            )
          ],
        ),
      ),
    );
  }

  ///创建成功回调
  void _onCreated(controller) {
    _controller = controller;
  }

  ///停止播放
  void _stop() {
    _controller.stopPlay();
  }

  ///切换码流
  void _changeStream() async {
    var ret = await _controller.changeStream(_previewUrl);
    print('码流切换 : $ret');
  }

  /// 回放
  void _playBack() async {
    String beginTime = '2020-06-01T00:00:00.000+08:00';
    String endTime = '2020-06-05T00:00:00.000+08:00';

    Map ret = await IscApi.getPlaybackUrl(
      cameraIndexCode: cameraCode,
      beginTime: beginTime,
      endTime: endTime,
      recordLocation: 1,
    );
    String url = ret['data']['url'];
    print(ret.toString());

    _controller.startPlayback(url, beginTime, endTime);
  }

  ///指定回放开始位置
  void _seekTime() async {
    String seekTime = '2020-06-04T00:00:00.000+08:00';
    _controller.seekAbsPlayback(seekTime);
  }

  ///云台控制
  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('已授权');
    }
  }
}
8
likes
0
points
73
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter plugin to play hikvision isc platform. It used hikvision native library, *.so for java and *.a for ios.

Homepage

License

unknown (license)

Dependencies

crypto, dio, flutter, path_provider, permission_handler

More

Packages that depend on iscflutterplugin

Packages that implement iscflutterplugin