📺A VLC-powered alternative to Flutter's video_player that supports iOS and Android.

Overview

Flutter VLC Player Plugin

Join the chat at https://discord.gg/mNY4fjVk

A VLC-powered alternative to Flutter's video_player that supports iOS and Android.


Installation

iOS

If you're unable to view media loaded from an external source, you should also add the following:

<key>NSAppTransportSecuritykey>
<dict>
  <key>NSAllowsArbitraryLoadskey>
  <true/>
dict>

For more information, or for more granular control over your App Transport Security (ATS) restrictions, you should read Apple's documentation.

Make sure that following line in /ios/Podfile uncommented:

platform :ios, '9.0'

NOTE: While the Flutter video_player is not functional on iOS Simulators, this package (flutter_vlc_player) is fully functional on iOS simulators.

To enable vlc cast functionality for external displays (chromecast), you should also add the following:

<key>NSLocalNetworkUsageDescriptionkey>
<string>Used to search for chromecast devicesstring>
<key>NSBonjourServiceskey>
<array>
  <string>_googlecast._tcpstring>
array>

Android

To load media/subitle from an internet source, your app will need the INTERNET permission.
This is done by ensuring your /android/app/src/main/AndroidManifest.xml file contains a uses-permission declaration for android.permission.INTERNET:

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

As Flutter includes this permission by default, the permission is likely already declared in the file.

Note that if you got "Cleartext HTTP traffic to * is not permitted" you need to add the android:usesClearTextTraffic="true" flag in the AndroidManifest.xml file, or define a new "Network Security Configuration" file. For more information, check https://developer.android.com/training/articles/security-config


In order to load media/subtitle from internal device storage, you should put the storage permissions as follows:

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

In some cases you also need to add the android:requestLegacyExternalStorage="true" flag to the Application tag in AndroidManifest.xml file to avoid acess denied errors. Android 10 apps can't acess storage without that flag. reference

After that you can access the media/subtitle file by

"/storage/emulated/0/{FilePath}"
"/sdcard/{FilePath}"

Android build configuration

  1. In 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'
      }
   }
}
  1. Create android/app/proguard-rules.pro, add the following lines:
-keep class org.videolan.libvlc.** { *; }

Quick Start

To start using the plugin, copy this code or follow the example project in 'flutter_vlc_player/example'

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key}) : super(key: key);

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  VlcPlayerController _videoPlayerController;

  @override
  void initState() {
    super.initState();

    _videoPlayerController = VlcPlayerController.network(
      'https://media.w3.org/2010/05/sintel/trailer.mp4',
      hwAcc: HwAcc.FULL,
      autoPlay: false,
      options: VlcPlayerOptions(),
    );
  }

  @override
  void dispose() async {
    super.dispose();
    await _videoPlayerController.stopRendererScanning();
    await _videoPlayerController.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: Center(
        child: VlcPlayer(
          controller: _videoPlayerController,
          aspectRatio: 16 / 9,
          placeholder: Center(child: CircularProgressIndicator()),
        ),
      ),
    );
  }
}

Upgrade instructions

Version 5.0 Upgrade For Existing Apps

To upgrade to version 5.0 first you need to migrate the existing project to swift.

  1. Clean the repo:

    git clean -xdf

  2. Delete existing ios folder from root of flutter project. If you have some custom changes made to the iOS app - rename it or copy somewhere outside the project.

  3. Re-create the iOS app: This command will create only ios directory with swift support. See https://stackoverflow.com/questions/52244346/how-to-enable-swift-support-for-existing-project-in-flutter

    flutter create -i swift .

  4. Make sure to update the project according to warnings shown by the flutter tools. (Update Info.plist, Podfile).

If you have some changes made to the iOS app, recreate the app using above method and copy in the changed files.

Be sure to follow instructions above after


Breaking Changes (from V4 to V5)

Entire platform has been refactored in v5. It will require a refactor of your app to follow v5.


Current issues

Current issues list is here.
Found a bug? Open the issue.

Comments
  • Implement some useful API methods

    Implement some useful API methods

    This PR adds the following methods:

    • setPlaybackSpeed(double speed)
    • setStreamURL(String url) (previous implementation moved to initialize())
    • addListener(VoidCallback listener)
    • removeListener(VoidCallback listener)
    • clearListeners()
    • setTime(int time)
    • play()
    • pause()
    • stop()

    and exposes the following properties:

    • aspectRatio
    • size
      • width
      • height
    • position
    • duration
    • playbackSpeed
    • playingState [PlaybackState - one of STOPPED, BUFFERING, PLAYING]
    opened by NBTX 72
  • Add many more helper methods to player

    Add many more helper methods to player

    This PR Only implemented and tested on Android. Features:

    1. fix black screen issue on android devices when rotation changes.
    2. get list of embedded audio tracks (also changed some names to be more like vlc conventions)
    3. get list of embedded subtitle tracks (also changed some names to be more like vlc conventions)
    4. get list of embedded video sections
    5. support local and network videos (isLocalVideo parameter) and subtitles (isLocalSubtitle parameter)
    6. added casting ability to an external display device
    7. added autoplay & looping options
    8. set/get subtitle delay, set/get audio delay
    9. and more .... :)

    Also, the example app is updated to show some of these changes.

    opened by alr2413 34
  • Swift conversion v2

    Swift conversion v2

    Swift Conversion of Flutter VLC Plugin. Why? Because Swift has built in null safety. Its extremely easy to read and there is a abundant resource of swift devs.

    Some historical context. The VLCKit project was missing module map from the cocoapods package. I opened up a issue https://code.videolan.org/videolan/VLCKit/-/issues/357

    A few days ago this got resolved. I've had this PR ready for over a month, but due to the issue above could not proceed.

    This PR is finally ready!

    opened by mitchross 26
  • RTMP is not working on IOS.

    RTMP is not working on IOS.

    How are you? This package is great. This package plays my RTMP on a test project (the test project has only VLC Player). but RTMP is not played on my current project (it has too many other packages, firebase, google map, camera...). I think a package suspends the VLC Player. or it is due to the memory limit of the iPhone. I can not see any error log, so I can not know the package and reason. Anyway, If you have any ideas, please let me know. Thank you.

    opened by liqiang1995 24
  • Futter Build Fails > More than one file was found with OS independent path 'lib/x86/libc++_shared.so'

    Futter Build Fails > More than one file was found with OS independent path 'lib/x86/libc++_shared.so'

    Flutter build fails after adding flutter_vlc_player

    environment: sdk: ">=2.2.2 <3.0.0"

    Flutter 1.22.4 • channel stable • https://github.com/flutter/flutter.git Framework • revision 1aafb3a8b9 (4 months ago) • 2020-11-13 09:59:28 -0800 Engine • revision 2c956a31c0 Tools • Dart 2.10.4

    • What went wrong: Execution failed for task ':app:transformNativeLibsWithMergeJniLibsForDebug'.

    More than one file was found with OS independent path 'lib/x86/libc++_shared.so'

    The Stack Trace On Debug With Gradle.

    Task :app:transformNativeLibsWithMergeJniLibsForDebug FAILED

    FAILURE: Build failed with an exception.

    • What went wrong: Execution failed for task ':app:transformNativeLibsWithMergeJniLibsForDebug'.

    More than one file was found with OS independent path 'lib/x86/libc++_shared.so'

    • Try: Run with --info or --debug option to get more log output. Run with --scan to get full insights.

    • Exception is: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformNativeLibsWithMergeJniLibsForDebug'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:110) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77) at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51) at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59) at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54) at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59) at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101) at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44) at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91) at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54) at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51) at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300) at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292) at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174) at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90) at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46) at org.gradle.execution.taskgraph.LocalTaskInfoExecutor.execute(LocalTaskInfoExecutor.java:42) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:277) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:262) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:135) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:200) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.executeWithWork(DefaultTaskPlanExecutor.java:191) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.run(DefaultTaskPlanExecutor.java:130) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) Caused by: com.android.builder.merge.DuplicateRelativeFileException: More than one file was found with OS independent path 'lib/x86/libc++_shared.so' at com.android.builder.merge.StreamMergeAlgorithms.lambda$acceptOnlyOne$2(StreamMergeAlgorithms.java:75) at com.android.builder.merge.StreamMergeAlgorithms.lambda$select$3(StreamMergeAlgorithms.java:100) at com.android.builder.merge.IncrementalFileMergerOutputs$1.create(IncrementalFileMergerOutputs.java:86) at com.android.builder.merge.DelegateIncrementalFileMergerOutput.create(DelegateIncrementalFileMergerOutput.java:61) at com.android.build.gradle.internal.transforms.MergeJavaResourcesTransform$1.create(MergeJavaResourcesTransform.java:386) at com.android.builder.merge.IncrementalFileMerger.updateChangedFile(IncrementalFileMerger.java:221) at com.android.builder.merge.IncrementalFileMerger.mergeChangedInputs(IncrementalFileMerger.java:190) at com.android.builder.merge.IncrementalFileMerger.merge(IncrementalFileMerger.java:77) at com.android.build.gradle.internal.transforms.MergeJavaResourcesTransform.transform(MergeJavaResourcesTransform.java:419) at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:239) at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:235) at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102) at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:230) at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73) at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:50) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:131) at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300) at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292) at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174) at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90) at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99) ... 31 more

    opened by ArjunNagraj 22
  • Complete Flutter VLC Player Rewrite - co-authroed with  @alr2413

    Complete Flutter VLC Player Rewrite - co-authroed with @alr2413

    https://github.com/solid-software/flutter_vlc_player/issues/158

    @alr2413 and I have been hard at work past few months rewriting VLC plugin from scratch to support plugin v2. See https://medium.com/flutter/modern-flutter-plugin-development-4c3ee015cf5a

    Here we have done a few things.

    1. Leverages V2 Android Flutter Plugin design pattern.
    2. All VLC features enabled.
    3. Flutter Platform Interface to support any platform. The platform interface allows for platform specific implementation, ie web, desktop, linux, ios, android. Currently only iOS and Android are supported.
    4. Flutter Pigeon for type safe method calls. No more string matching on method calls! (https://pub.dev/packages/pigeon)

    Couple things.

    We started a brand new repo for the work. It can be found here -> https://github.com/alr2413/flt_vlc_player/tree/master/flutter_vlc_player

    This PR forks from Solid Software, incorporates @alr2413 code from their Repo and packages it into one singular PR commit.

    Testing

    1. If you switch to this branch/pull. You need to goto example folder inside flutter_vlc_folder , delete ios and android folder. Then Inside example run "flutter create . ", The git switch over is causing flutter a hard time in example to run it. Idk why.
    opened by mitchross 17
  • Add Hybrid composition support for Android

    Add Hybrid composition support for Android

    • minSdkVersion from 17 -> 20 as required by Virtual display.
    • Bump ibvlc-all:3.5.0-eap4 -> libvlc-all:3.5.0-eap6
    • Add bool virtualDisplay to specify whether Virtual displays or Hybrid composition is used on Android. Default is Virtual displays.
    • Bump version of flutter_vlc_player_platform_interface: 2.0.0 -> 2.0.1, flutter_vlc_player: 7.1.1 -> 7.1.2
    • Refers: platform-views
    opened by XuanTung95 16
  • Added vlc recording feature

    Added vlc recording feature

    Here is the list of changes in this PR,

    1. Updated pubspec dependency
    2. Fixed local audio/subtitle issue on android
    3. added recording feature of vlc player (which is also mentioned in #227, #165)
    opened by alr2413 16
  • Implement some useful API methods #7 (V2)

    Implement some useful API methods #7 (V2)

    This takes the abandoned " Implement some useful API methods #7" and fixes android and ios code

    It upgrades the VLCMobile Kit base version

    Targets iOS 9.

    Fixes a Crash on HLS Stream.

    opened by mitchross 13
  • Is there a way to spawn multiple VLC players?

    Is there a way to spawn multiple VLC players?

    I am making a client for my CCTV app and am trying to display multiple streams at the same time. Whenever I do though, only the second (or last) one actually loads. The first one just continues to show the placeholder (in this case a loading spinner).

    any help would be greatly appreciated, thank you!

    faa36933-3f5a-4c35-861f-f509ae0d3dfa

    this is the function i use to create my widget

    vlcWidget() {
      final _videoViewController = VlcPlayerController();
      return VlcPlayer(
        url: loginEndpoint + _activeStreamUrl,
        controller: _videoViewController,
        placeholder: Center(child: CircularProgressIndicator()),
      );
    }
    
    opened by moeiscool 12
  • The second loading is abnormal

    The second loading is abnormal

    When I click the phone physical button to return to the system page, and then click the VLC app to enter

    E/flutter (23794): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: PlatformException(channel-error, Unable to establish connection on channel., null, null) E/flutter (23794): #0 VlcPlayerApi.initialize (package:flutter_vlc_player_platform_interface/src/messages/messages.dart:624:7) E/flutter (23794): E/flutter (23794): #1 MethodChannelVlcPlayer.init (package:flutter_vlc_player_platform_interface/src/method_channel/method_channel_vlc_player.dart:34:12) E/flutter (23794): E/flutter (23794): E/flutter (23794): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: PlatformException(error, java.lang.IllegalStateException: Trying to create a platform view of unregistered type: flutter_video_plugin/getVideoView E/flutter (23794): at io.flutter.plugin.platform.PlatformViewsController$1.createVirtualDisplayForPlatformView(PlatformViewsController.java:192) E/flutter (23794): at io.flutter.embedding.engine.systemchannels.PlatformViewsChannel$1.create(PlatformViewsChannel.java:104) E/flutter (23794): at io.flutter.embedding.engine.systemchannels.PlatformViewsChannel$1.onMethodCall(PlatformViewsChannel.java:59) E/flutter (23794): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233) E/flutter (23794): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85) E/flutter (23794): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:818) E/flutter (23794): at android.os.MessageQueue.nativePollOnce(Native Method) E/flutter (23794): at android.os.MessageQueue.next(MessageQueue.java:386) E/flutter (23794): at android.os.Looper.loop(Looper.java:175) E/flutter (23794): at android.app.ActivityThread.main(ActivityThread.java:7625) E/flutter (23794): at java.lang.reflect.Method.invoke(Native Method) E/flutter (23794): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524) E/flutter (23794): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987) E/flutter (23794): , null, null) E/flutter (23794): #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:597:7) E/flutter (23794): #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:158:18) E/flutter (23794): E/flutter (23794): #2 TextureAndroidViewController._sendCreateMessage (package:flutter/src/services/platform_views.dart:1043:18) E/flutter (23794): E/flutter (23794): #3 AndroidViewController.create (package:flutter/src/services/platform_views.dart:748:5) E/flutter (23794): E/flutter (23794): #4 RenderAndroidView._sizePlatformView (package:flutter/src/rendering/platform_view.dart:193:7) E/flutter (23794):

    opened by zjyhll 11
  • libvlc stream: HTTP 401 error

    libvlc stream: HTTP 401 error

    Hi,

    I'm using the flutter vlc player to display a mjpeg steam from IP camera.

    This url is protected by username and password authentication.

    When using google chrome to browse to the url, I get a popup to enter a username and password.

    According to multiple online sources (e.g https://www.tutorialspoint.com/http-basic-authentication-url-with-in-password#:~:text=The%20username%20and%20password%20must,%3A%2F%2Fusername%3Apassword%40URL.) I can skip this authentication using the http://username:[email protected] format

    But when using the format also, i get a HTTP 401 error when connecting to the stream.

    Url is structured like this: http://username:password@endpoint:11002/axis-cgi/mjpg/video.cgi?resolution=800x600

    When entering this URL in google chrome the camera feed is displayed without issue and no login popup.

    what am I missing to get the VLC video player to work in my flutter app?

    Thanks in advance.

    opened by TNelen 0
  • rtp data sometimes not received on iOS 16

    rtp data sometimes not received on iOS 16

    "On some device" upgrade to iOS 16, the RTP data does not receive UDP data while using the flutter_vlc_player plugin. We can not figure out what the root cause is, so report an issue here. Is there anyone meet a similar situation? Any suggestion would be appreciated.

    opened by herehere 1
  • Not working on iOS

    Not working on iOS

    Im using basic demo given by plugin. It is working on android but for iOS video is not playing, it not giving any issue. Does it support cast from iOS. I'm using simulator.

    opened by AniketBynaric 3
  • Cast not working on iOS in the example app

    Cast not working on iOS in the example app

    Has any of you successfully cast a video on iOS to a Chromecast? When I cast my video on Android, it works fine, but on iOS, something is broken: even if I use the example app provided in the library, the screen goes black, and the cast commands are available, but nothing is cast on the TV (through the Chromecast)

    Any suggestions would be appreciated, thanks for your help.

    opened by AngeloAvv 0
Releases(7.1.5)
Owner
Solid Software
Solid Software
A view for video based on video_player and provides many basic functions.

flutter_video_view A view for video based on video_player and provides many basic functions. Getting Started This project is a starting point for a Fl

LiWeNHuI 3 Dec 9, 2022
A flutter package for iOS and Android for applying filter to an image

Photo Filters package for flutter A flutter package for iOS and Android for applying filter to an image. A set of preset filters are also available. Y

Ansh rathod 1 Oct 26, 2021
Flutter plugin for selecting multiple images from the Android and iOS image library

Flutter plugin for selecting multiple images from the Android and iOS image library, taking new pictures with the camera, and edit them before using such as rotating, cropping, adding sticker/filters.

Weta Vietnam 91 Dec 19, 2022
Just_audio: a feature-rich audio player for Android, iOS, macOS and web

just_audio just_audio is a feature-rich audio player for Android, iOS, macOS and web. Mixing and matching audio plugins The flutter plugin ecosystem c

Ensar Yusuf Yılmaz 2 Jun 28, 2022
A Flutter package for both android and iOS which provides Audio recorder

social_media_recorder A Flutter package for both android and iOS which provides

subhikhalifeh 16 Dec 29, 2022
Automatically generates native code for adding splash screens in Android and iOS.

Automatically generates native code for adding splash screens in Android and iOS. Customize with specific platform, background color and splash image.

Jon Hanson 949 Jan 2, 2023
A Flutter audio plugin (Swift/Java) to play remote or local audio files on iOS / Android / MacOS and Web

AudioPlayer A Flutter audio plugin (Swift/Java) to play remote or local audio files on iOS / Android / MacOS and Web. Online demo Features Android / i

Erick Ghaumez 489 Dec 18, 2022
A Flutter media player plugin for iOS and android based on ijkplayer

Flutter media player plugin for android/iOS based on ijkplayer.

于飞白呀 1.4k Jan 4, 2023
Play simultaneously music/audio from assets/network/file directly from Flutter, compatible with android / ios / web / macos, displays notifications

?? assets_audio_player ?? Play music/audio stored in assets files (simultaneously) directly from Flutter (android / ios / web / macos). You can also u

Florent CHAMPIGNY 651 Dec 24, 2022
A flutter plugin to handle Android / iOS camera

?? Overview Flutter plugin to add Camera support inside your project. CamerAwesome include a lot of useful features like: ?? Live camera flip ( switch

Apparence.io 511 Jan 5, 2023
A Flutter plugin to use speech recognition on iOS & Android (Swift/Java)

speech_recognition A flutter plugin to use the speech recognition iOS10+ / Android 4.1+ Basic Example Sytody, speech to todo app Installation Depend o

Erick Ghaumez 331 Dec 19, 2022
Audio classification Tflite package for flutter (iOS & Android).

Audio classification Tflite package for flutter (iOS & Android). Can also support Google Teachable Machine models.

Michael Nguyen 47 Dec 1, 2022
Tiwee - An IPTV player developed for android/ios devices with flutter

Tiwee An IPTV player developed for android/ios devices with flutter you can watc

Hossein 58 Dec 27, 2022
Apps For streaming audio via url (Android, iOS & Web ). Developed with Dart & Flutter ❤

Flutter Sleep App (Dicoding Submission : Learn to Make Flutter Apps for Beginners) Stream Great collection of high-definition sounds that can be mixed

Utrodus Said Al Baqi 13 Nov 29, 2022
An ipod classic for iOS/Android, built with Flutter

Retro aims to bring back the iPod Classic experience to iOS and Android. I originally started working on it nearly 2 years ago and released it as a TestFlight beta (because Apple wouldn't allow it on the App Store) and have been maintaining it myself since.

Retro Music 69 Jan 3, 2023
A opensource, minimal and powerful audio player for android

A opensource, minimal and powerful audio player for android

Milad 7 Nov 2, 2022
Simple plugin to implement Picture in Picture support for Android only.

flutter_pip Simple plugin to implement Picture in Picture support for Android only. Android Setup You need to declare that your app supports Picture i

null 0 Dec 22, 2021
[WIP] üWave mobile app (Android)

üWave for Android A Flutter and NewPipe based client for üWave! Note that while it uses Flutter, it's not cross platform. Only Android is supported. A

üWave 9 Sep 11, 2020
ScrollGalleryView is a flexible library which helps you to create awesome media galleries in your Android application.

ScrollGalleryView ScrollGalleryView is a flexible library which helps you to create awesome media galleries in your Android application. It's easily i

Boris Korogvich 529 Nov 30, 2022