美文网首页Flutter圈子Flutter中文社区
海康isc平台flutter版视频播放插件

海康isc平台flutter版视频播放插件

作者: xiaobug | 来源:发表于2020-05-13 13:18 被阅读0次

背景介绍:

前端时间基于公司项目需求,需要在flutter中播放海康的 iSecure Center 平台视频监控画面,在网上找寻了好久,发现没有合适的视频播放插件,咨询海康官方也没有提供flutter版支持,所以内部封装了一下native端的SDK,开发了一个基于海康isc平台SDK的flutter版插件,并发布到 https://pub.dev/ 有需要的童鞋可以自行使用;

iscflutterplugin使用:

插件使用起来比较简单,可以直接参考demo,插件中注释写的非常详细,同时,大家如果有使用上的问题,可以加QQ群 856941179 进行交流.

引入依赖:

在pubspec.yaml文件中增加依赖:

dependencies:
  iscflutterplugin: ^1.0.3

运行命令获取依赖:

flutter pub get

在Dart代码中导包:

import 'package:iscflutterplugin/iscflutterplugin.dart';

example:

import 'dart:io';

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 = 'xxx';

  @override
  void initState() {
    super.initState();
    //初始化配置
    ArtemisConfig.host = "xxx";
    ArtemisConfig.appKey = "xxx";
    ArtemisConfig.appSecret = "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 {
    //申请权限
    _requestPermission();
    //图片保存路径
    String 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 {
    //申请权限
    _requestPermission();
    //图片保存路径
    String path =
        '${(await getExternalStorageDirectory()).path}/${DateTime.now().toString()}.jpg';
    print('path = $path');

    //抓拍
    var ret = await _controller.capturePicture(path);
    print('抓拍 : $ret');
  }

  ///预览
  void _preview() async {
    //获取预览地址
    Map ret = await IscApi.getPreviewURL(cameraIndexCode: cameraCode);
    _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('已授权');
    }
  }
}

相关文章

网友评论

    本文标题:海康isc平台flutter版视频播放插件

    本文链接:https://www.haomeiwen.com/subject/qlrnnhtx.html