首页 > 其他分享 >Flutter 3.0+ 利用VLC播放器使用rtsp协议,本地测试和打包压缩

Flutter 3.0+ 利用VLC播放器使用rtsp协议,本地测试和打包压缩

时间:2023-07-31 11:12:23浏览次数:47  
标签:VLC rtsp flutter build 3.0 android OBS

Flutter 中使用 rtsp 协议

在 Flutter 中可以集成 VLC 播放器通过 rtsp 协议连接到监控相机来实现远程监控,当然也可以用来做直播 APP。

使用 flutter_vlc_player 库

扩展包地址点我跳转

首先在 pubspec.yaml 中添加库引用:

dependencies:
  flutter_vlc_player: ^7.2.0

安卓端配置

  1. android/app/src/main/AndroidManifest.xml中添加网络使用权限

<uses-permission android:name="android.permission.INTERNET" />

  1. 如果 rtsp 为非加密连接,则需要加上明文网络使用权限

android:usesClearTextTraffic="true"

  1. android/app/build.gradle中加入以下配置:
    android {
        packagingOptions {
        // Fixes duplicate libraries build issue,
        // when your project uses more than one plugin that depend on C++ libs.
            pickFirst 'lib/**/libc++_shared.so'
        }

    buildTypes {
        release {
            minifyEnabled true
            useProguard true
            proguardFiles getDefaultProguardFile(
                    'proguard-android-optimize.txt'),
                    'proguard-rules.pro'
        }
    }
    }

请注意,如果您的 gradle 版本较新,那么 useProguard 已经不再使用,请删除这一行。

  1. android/app目录内新建一个proguard-rules.pro文件,内容为

-keep class org.videolan.libvlc.** { *; }

  1. 调整android/app/build.gradle中的 minSdkVersion。
    defaultConfig {
        minSdkVersion 27  //20以上
        targetSdkVersion flutter.targetSdkVersion
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
    }

使用 flutter_vlc_player 库

import 'package:flutter/material.dart';
import 'package:flutter_vlc_player/flutter_vlc_player.dart';

class VLCTest extends StatefulWidget {
  const VLCTest({super.key});

  @override
  State<VLCTest> createState() => _VLCTestState();
}

class _VLCTestState extends State<VLCTest> {
  late VlcPlayerController _vlcPlayerController;
  String host = "rtsp://192.168.2.22:8554/mystream";

  @override
  void initState() {
    super.initState();
    _vlcPlayerController = VlcPlayerController.network(
        host,
        hwAcc: HwAcc.full,
        autoPlay: true);
  }

  @override
  void dispose() async {
    // TODO: implement dispose
    super.dispose();
    await _vlcPlayerController.stopRendererScanning();
    await _vlcPlayerController.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return FractionallySizedBox(
      widthFactor: 1,
      heightFactor: 1,
      child: Center(
        child: VlcPlayer(controller: _vlcPlayerController, aspectRatio: 16 / 9),
      ),
    );
  }
}

本地测试

下面就是本地测试环节,需要在本地建立 rtsp 服务器并推流,在 flutter 程序中连接并拉取。

使用 OBS+OBS-RTSPServer 插件搭建 rtsp 服务器并将桌面推流

目前(截止 2023 年 7 月)OBS-RTSPServer 插件最新 release 版本为 3.0,支持的最新 OBS 版本为 28,

OSB下载 28.x 版本安装 OBS 本体。

然后在obs-rtspserver v3.0.0下载 3.0.0 版本插件安装

全部安装完成后,在 OBS 中新建场景-桌面。

在工具-RTSP 服务器中设置“目标”中的 URL 为rtsp://localhost:8554/mystream,然后打开服务器即可。

注意,不需要设置 OBS 的推流功能,现在就已经在 rtsp 服务器中推流了。

使用 flutter 进行测试

将 flutter 代码中的 host 地址改为rtsp://localhost:8554/mystream,打开这个界面稍等一会儿就会自动播放。

如果 flutter 中无法播放,请下载一个 VLC 播放器或 potplayer 播放上述地址进行测试。

延迟优化

经过上述步骤的测试,我们发现有延迟问题,推流端的延迟我们无法保证,因为往往推流的是监控设备。

于是我们先优化拉取的延迟问题。

我们可以将 VLC 的拉流缓存时长调低就可以极大缓解延迟问题。

_vlcPlayerController = VlcPlayerController.network(
        host,
        hwAcc: HwAcc.full,
        autoPlay: true,
        options: VlcPlayerOptions(
            advanced: VlcAdvancedOptions([
          VlcAdvancedOptions.liveCaching(100),
          VlcAdvancedOptions.networkCaching(100)
        ])));

当然如果您有更好的优化方案,烦请告知,感谢!

打包压缩

通过flutter build apk后,我们发现安装包竟增加了 100+MB!这是不可接收的!

使用flutter build apk --analyze-size 分析我们发现在打包过程中 flutter 自动将所有 abi 打包进了 APK 包里。

于是我们可以用flutter build apk --release --split-per-abi --target-platform android-arm,android-arm64来指定目标平台。

针对打包后体积过大的问题,有人如下说道

VLC uses lots of native code. As a result, it has 18-30MB of native libraries per CPU architecture. While that will be compressed somewhat in the APK, a 57MB increase in APK is actually better than I would expect.

You either need to:

  • Live with it, or

  • Use splits or product flavors to indicate which subset of CPU architectures you are willing to support (the library itself supports arm64-v8a, armeabi-v7a, mips, x86, and x86_64), or

  • Do not use VLC

标签:VLC,rtsp,flutter,build,3.0,android,OBS
From: https://www.cnblogs.com/weifan93/p/17592922.html

相关文章

  • RTSP/Onvif视频服务器LntonNVR(源码版)视频平台忘记密码无法登录,重置密码的具体操作步骤
    LntonNVR安防视频云服务主要功能在于通过RTSP/Onvif协议,接入前端音视频采集设备,通过平台将拉取过来的音视频流转化成适合全平台播放的RTMP、RTSP、FLV、HLS、Webrtc等视频流格式,方便用户进行网页直播,或接入自身业务平台。我们在实际项目中,经常有遇到用户反馈说部署了LntonNVR平台后......
  • 2023.07 WSL2 CentOS 使用桥接网卡固定IP/加入局域网
    WSL2CentOS使用桥接网卡固定IP/加入局域网参考资料https://zhuanlan.zhihu.com/p/593263088https://www.cnblogs.com/lic0914/p/17003251.html进入Hyper-V管理器新建桥接网卡进入%USERPROFILE%目录新建.wslconfig文件[wsl2]vmIdleTimeout=-1networkingMo......
  • vue-cli3.0 项目无法通过ip访问
    第一:在 package.json中添加 --host0.0.0.0 第二:在 vue.config.js中添加host:0.0.0.0 ......
  • Android平台GB28181设备接入侧如何同时对外输出RTSP流?
    技术背景GB28181的应用场景非常广泛,如公共安全、交通管理、企业安全、教育、医疗等众多领域,细分场景可用于如执法记录仪、智能安全帽、智能监控、智慧零售、智慧教育、远程办公、明厨亮灶、智慧交通、智慧工地、雪亮工程、平安乡村、生产运输、车载终端等:公共安全:通过GB28181协议,用......
  • 龙蜥白皮书精选:面向 HTTP 3.0 时代的高性能网络协议栈
    文/高性能网络 SIG01背景概述 随着互联网特别是移动互联网的快速发展,对互联网通信协议提出了新的诉求。经过多年的发展,QUIC协议在2021年正式被IEFT标准化,成为HTTP3的标准传输层协议。QUIC是基于UDP实现的面向连接可靠有序的传输协议。相比于TCP在内核态实现,QUIC......
  • Acrobat Pro DC 2023 for Mac(PDF编辑器) 2023.003.20244 中文版
    AcrobatProDC2023forMac是一款功能强大的PDF编辑器软件,由AdobeSystems开发。它为Mac用户提供了广泛的PDF处理工具和功能,使用户能够创建、编辑、转换和共享高质量的PDF文件。以下是AcrobatProDC2023forMac的一些主要特点和功能:PDF编辑:AcrobatProDC允许用户对PDF文件进......
  • Unity实现camera数据注入RMP推送或轻量级RTSP服务模块
    技术背景随着技术的不断进步和应用的不断深化,Unity3DVR应用的前景非常广阔,它广泛应用于教育、医疗、军事、工业设计、虚拟数字人等多个领域。教育领域:Unity3DVR技术可以用来创建虚拟现实教室,让学生能够身临其境地体验课程内容,提高学习效果和兴趣;医疗领域:Unity3DVR技术可以用来创......
  • 【2023.07.28】三年计划
    =主线任务今年的主线是考上研究生,并让学校所有人都认识我攒钱买辆车(大概率小米)明年的主线是软考高项,业余时间去考电工和思科支线任务增肥上60kg,让自己身体更好,目前只有53还是太瘦了和妹妹拼完一整个柜子的积木(目前四层已经塞满两层)谈恋爱,找女朋友入校后打算......
  • Kotlin 踩坑日记(六)Android studio 3.0.0 Canary 4 Instant Run
    前言宁夏的特色假日,开斋节放了5天,今天回来上班。放假前,Androidstudio3.0发布了Canary4的升级,因为即将放假,所以就没有升级,节后上班第一天,就安排升级并且试用一下。DebugApk找不到Application类没有别的问题,只是在InstantRun环境下,找不到App的Application类,应用安装成功后,......
  • Unity下如何实现低延迟的全景RTMP|RTSP流渲染
    技术背景Unity3D可以用于创建各种类型的的应用程序,包括虚拟现实、培训模拟器等。以下是一些可以使用Unity3D全景播放的场景:虚拟现实体验:全景视频可以用来创建逼真的虚拟环境,使用户能够感受到身临其境的感觉;培训模拟器:全景视频可以用来创建真实的训练环境,例如飞行模拟器、驾驶模拟器......