{"id":13529360,"url":"https://github.com/solid-software/flutter_vlc_player","last_synced_at":"2025-10-06T21:56:13.175Z","repository":{"id":37390687,"uuid":"164102668","full_name":"solid-software/flutter_vlc_player","owner":"solid-software","description":"📺 Flutter VLC powered video player.","archived":false,"fork":false,"pushed_at":"2025-09-25T03:33:58.000Z","size":1347,"stargazers_count":582,"open_issues_count":352,"forks_count":284,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-09-25T05:32:42.590Z","etag":null,"topics":["flutter","flutter-video-player","vlc"],"latest_commit_sha":null,"homepage":"","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/solid-software.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-01-04T12:05:33.000Z","updated_at":"2025-09-25T03:32:35.000Z","dependencies_parsed_at":"2023-02-09T11:16:02.906Z","dependency_job_id":"9e90f425-ba82-4879-ae8d-13d69d180b57","html_url":"https://github.com/solid-software/flutter_vlc_player","commit_stats":null,"previous_names":[],"tags_count":39,"template":false,"template_full_name":null,"purl":"pkg:github/solid-software/flutter_vlc_player","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solid-software%2Fflutter_vlc_player","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solid-software%2Fflutter_vlc_player/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solid-software%2Fflutter_vlc_player/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solid-software%2Fflutter_vlc_player/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/solid-software","download_url":"https://codeload.github.com/solid-software/flutter_vlc_player/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solid-software%2Fflutter_vlc_player/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278686634,"owners_count":26028325,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-06T02:00:05.630Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["flutter","flutter-video-player","vlc"],"created_at":"2024-08-01T07:00:35.659Z","updated_at":"2025-10-06T21:56:13.133Z","avatar_url":"https://github.com/solid-software.png","language":"Dart","funding_links":["https://patreon.com/solidsoftwarehq"],"categories":["Bindings","Dart"],"sub_categories":[],"readme":"#  Flutter VLC Player Plugin\n[![Join the chat at https://discord.gg/mNY4fjVk](https://img.shields.io/discord/716939396464508958?label=discord)](https://discord.gg/mNY4fjVk)\n[![Support me on Patreon](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fshieldsio-patreon.vercel.app%2Fapi%3Fusername%3Dsolidsoftwarehq%26type%3Dpatrons\u0026style=flat)](https://patreon.com/solidsoftwarehq)\n[![flutter_vlc_player](https://nokycucwgzweensacwfy.supabase.co/functions/v1/get_project_badge?projectId=148)](https://nokycucwgzweensacwfy.supabase.co/functions/v1/get_project_url?projectId=148)\n\nA VLC-powered alternative to Flutter's video_player that supports iOS and Android.\n\n\u003cdiv\u003e\n  \u003cimg src=\"/flutter_vlc_player/doc/single.jpg\" height=\"400\"\u003e\n  \u003cimg src=\"/flutter_vlc_player/doc/multiple.jpg\" height=\"400\"\u003e\n\u003c/div\u003e\n\n\u003cbr\u003e\n\n\n## Installation\n\n### iOS\n\nIf you're unable to view media loaded from an external source, you should also add the following:\n```xml\n\u003ckey\u003eNSAppTransportSecurity\u003c/key\u003e\n\u003cdict\u003e\n  \u003ckey\u003eNSAllowsArbitraryLoads\u003c/key\u003e\n  \u003ctrue/\u003e\n\u003c/dict\u003e\n```\nFor more information, or for more granular control over your App Transport Security (ATS) restrictions, you should\n[read Apple's documentation](https://developer.apple.com/documentation/bundleresources/information_property_list/nsapptransportsecurity/nsallowsarbitraryloads).\n\nMake sure that following line in `\u003cproject root\u003e/ios/Podfile` uncommented:\n\n`platform :ios, '9.0'`\n\n\u003e NOTE: While the Flutter `video_player` is not functional on iOS Simulators, this package (`flutter_vlc_player`) **is**\n\u003e fully functional on iOS simulators.\n\nTo enable vlc cast functionality for external displays (chromecast), you should also add the following:\n\n```xml\n\u003ckey\u003eNSLocalNetworkUsageDescription\u003c/key\u003e\n\u003cstring\u003eUsed to search for chromecast devices\u003c/string\u003e\n\u003ckey\u003eNSBonjourServices\u003c/key\u003e\n\u003carray\u003e\n  \u003cstring\u003e_googlecast._tcp\u003c/string\u003e\n\u003c/array\u003e\n```\n\n\u003chr\u003e\n\n### Android\nTo load media/subitle from an internet source, your app will need the `INTERNET` permission.  \nThis is done by ensuring your `\u003cproject root\u003e/android/app/src/main/AndroidManifest.xml` file contains a `uses-permission`\ndeclaration for `android.permission.INTERNET`:\n```xml\n\u003cuses-permission android:name=\"android.permission.INTERNET\" /\u003e\n```\n\nAs Flutter includes this permission by default, the permission is likely already declared in the file.\n\nNote that if you got \"Cleartext HTTP traffic to * is not permitted\"\nyou 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\n\n\u003cbr\u003e\n\nIn order to load media/subtitle from internal device storage, you should put the storage permissions as follows:\n```xml\n\u003cuses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/\u003e\n\u003cuses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/\u003e\n```\nIn 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](https://stackoverflow.com/a/60917774/14919621)\n\nAfter that you can access the media/subtitle file by \n\n    \"/storage/emulated/0/{FilePath}\"\n    \"/sdcard/{FilePath}\"\n\n\u003chr\u003e\n\n#### Android build configuration\n\n1. In `android/app/build.gradle`:\n```groovy\nandroid {\n    packagingOptions {\n       // Fixes duplicate libraries build issue, \n       // when your project uses more than one plugin that depend on C++ libs.\n        pickFirst 'lib/**/libc++_shared.so'\n    }\n   \n   buildTypes {\n      release {\n         minifyEnabled true\n         proguardFiles getDefaultProguardFile(\n                 'proguard-android-optimize.txt'),\n                 'proguard-rules.pro'\n      }\n   }\n}\n```\n\n2. Create `android/app/proguard-rules.pro`, add the following lines:\n```proguard\n-keep class org.videolan.libvlc.** { *; }\n```\n\n\u003cbr\u003e\n\n## Quick Start\nTo start using the plugin, copy this code or follow the example project in 'flutter_vlc_player/example'\n\n```dart\nimport 'package:flutter/material.dart';\nimport 'package:flutter_vlc_player/flutter_vlc_player.dart';\n\nvoid main() {\n  runApp(MyApp());\n}\n\nclass MyApp extends StatelessWidget {\n  // This widget is the root of your application.\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      title: 'Flutter Demo',\n      theme: ThemeData(\n        visualDensity: VisualDensity.adaptivePlatformDensity,\n      ),\n      home: MyHomePage(),\n    );\n  }\n}\n\nclass MyHomePage extends StatefulWidget {\n  MyHomePage({Key key}) : super(key: key);\n\n  @override\n  _MyHomePageState createState() =\u003e _MyHomePageState();\n}\n\nclass _MyHomePageState extends State\u003cMyHomePage\u003e {\n  VlcPlayerController _videoPlayerController;\n\n  @override\n  void initState() {\n    super.initState();\n\n    _videoPlayerController = VlcPlayerController.network(\n      'https://media.w3.org/2010/05/sintel/trailer.mp4',\n      hwAcc: HwAcc.full,\n      autoPlay: false,\n      options: VlcPlayerOptions(),\n    );\n  }\n\n  @override\n  void dispose() async {\n    super.dispose();\n    await _videoPlayerController.stopRendererScanning();\n    await _videoPlayerController.dispose();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(),\n      body: Center(\n        child: VlcPlayer(\n          controller: _videoPlayerController,\n          aspectRatio: 16 / 9,\n          placeholder: Center(child: CircularProgressIndicator()),\n        ),\n      ),\n    );\n  }\n}\n```\n\u003cbr\u003e\n\n### Recording feature\nTo start/stop video recording, you have to call the `startRecording(String saveDirectory)` and `stopRecording()` methods, respectively. By calling the stop method you can get the path of recorded file from `vlcPlayerController.value.recordPath`.\n\n\u003chr\u003e\n\n## Upgrade instructions\n\n### Version 5.0 Upgrade For Existing Apps\nTo upgrade to version 5.0 first you need to migrate the existing project to swift.\n\n1. Clean the repo:\n\n     ```git clean -xdf```\n     \n2. 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.\n\n3. 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\n\n\n    ```flutter create -i swift .```\n\n\n    \n4. Make sure to update the project according to warnings shown by the flutter tools. (Update Info.plist, Podfile).\n\nIf you have some changes made to the iOS app, recreate the app using above method and copy in the changed files.\n\nBe sure to follow instructions above after \n\n\u003cbr\u003e\n\n### Breaking Changes (from V4 to V5)\nEntire platform has been refactored in v5. It will require a refactor of your app to follow v5. \n\n\u003chr\u003e\n\n## Known Issues\n\u003cb\u003e1)\u003c/b\u003e The video recording feature is problematic in iOS/Android: if the video reaches its end while you're recording it, the underlying `vlckit`/`libvlc` library fails to finalize the recording process, and we cannot retrieve the recorded file. \nThe issue is reported and tracked here: \n\u003cbr\u003e\n[https://code.videolan.org/videolan/VLCKit/-/issues/394](https://code.videolan.org/videolan/VLCKit/-/issues/394) (see last comment from September 22, 2020)\n\n\u003chr\u003e\n\n## Current issues\nCurrent issues list [is here](https://github.com/solid-software/flutter_vlc_player/issues).   \nFound a bug? [Open the issue](https://github.com/solid-software/flutter_vlc_player/issues/new).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolid-software%2Fflutter_vlc_player","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsolid-software%2Fflutter_vlc_player","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolid-software%2Fflutter_vlc_player/lists"}