{"id":14969867,"url":"https://github.com/newtadev/pod_player","last_synced_at":"2025-04-04T20:15:19.479Z","repository":{"id":38890199,"uuid":"411377606","full_name":"newtaDev/pod_player","owner":"newtaDev","description":"Video player for flutter web \u0026 mobile devices, Play video from youtube or vimeo or network in flutter using pod player","archived":false,"fork":false,"pushed_at":"2024-08-14T13:54:43.000Z","size":21023,"stargazers_count":108,"open_issues_count":155,"forks_count":221,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-04-04T20:15:14.952Z","etag":null,"topics":["flutter","flutter-web","flutter-web-video-player","hacktoberfest","video-player","vimeo-player","vimeo-player-flutter","youtube-player","youtube-player-flutter"],"latest_commit_sha":null,"homepage":"https://pub.dev/packages/pod_player","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/newtaDev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2021-09-28T17:26:50.000Z","updated_at":"2025-03-04T19:41:14.000Z","dependencies_parsed_at":"2024-06-18T22:55:15.342Z","dependency_job_id":"73e5f3a9-c5ae-4742-8bb1-49c869082b31","html_url":"https://github.com/newtaDev/pod_player","commit_stats":{"total_commits":174,"total_committers":13,"mean_commits":"13.384615384615385","dds":"0.18965517241379315","last_synced_commit":"f3ea20e044d50bac6f35ac408edd65276f534540"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/newtaDev%2Fpod_player","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/newtaDev%2Fpod_player/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/newtaDev%2Fpod_player/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/newtaDev%2Fpod_player/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/newtaDev","download_url":"https://codeload.github.com/newtaDev/pod_player/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247242681,"owners_count":20907134,"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","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-web","flutter-web-video-player","hacktoberfest","video-player","vimeo-player","vimeo-player-flutter","youtube-player","youtube-player-flutter"],"created_at":"2024-09-24T13:42:32.901Z","updated_at":"2025-04-04T20:15:19.455Z","avatar_url":"https://github.com/newtaDev.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n  \u003ca href=\"https://github.com/newtaDev\"\u003e\u003cimg src=\"https://user-images.githubusercontent.com/85326522/159757765-db86f850-fea8-4dc2-bd86-0a27648b24e5.png\" alt=\"pod_player\"\u003e\u003c/a\u003e\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://pub.dev/packages/pod_player/score\"\u003e\u003cimg src=\"https://img.shields.io/badge/Likes-200+-yellowgreen\" alt=\"pub likes\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://pub.dev/packages/pod_player\"\u003e\u003cimg src=\"https://img.shields.io/pub/v/pod_player?style=flat\" alt=\"pub version\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://pub.dev/packages/pod_player/score\"\u003e\u003cimg src=\"https://img.shields.io/badge/score-140-critical\" alt=\"score\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://pub.dev/packages/pod_player/score\"\u003e\u003cimg src=\"https://img.shields.io/badge/popularity-97﹪-critical\" alt=\"pub points\"\u003e\u003c/a\u003e\n\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e \u003cimg src=\"https://komarev.com/ghpvc/?username=newtaDev\u0026label=Total%20views\u0026color=0e75b6\u0026style=flat\" alt=\"newta\" /\u003e \u003c/p\u003e\n\nVideo player for flutter web \u0026 mobile devices, pod player supports playing video from `Youtube` and `Vimeo`\n\npod player is a simple and easy-to-use video player. Its video controls are similar to Youtube player (with customizable controls) and also can play videos from `Youtube` and `Vimeo` (By providing url/video_id).\n\nThis plugin built upon flutter's official [`video_player`](https://pub.dartlang.org/packages/video_player) plugin\n\n---\n\n| PLATFORM | AVAILABLE |\n| :------: | :-------: |\n| Android  |    ✅     |\n|   IOS    |    ✅     |\n|   WEB    |    ✅     |\n\n## Features\n\n- Play `youtube` videos (using video URL or ID)\n- Play `vimeo` videos (using video ID [with ou without hash])\n- Play `vimeo` private videos (using video ID [with ou without hash], access token)\n- Video overlay similar to youtube\n- `Double tap` to seek video.\n- On video tap show/hide video overlay.\n- Auto hide overlay\n- Change `playback speed`\n- Custom overlay\n- Custom progress bar\n- Custom labels\n- `Change video quality` (for vimeo and youtube)\n- Enable/disable full-screen player\n- support for live youtube video\n- [TODO] support for video playlist\n\n## Features on web\n\n- Double tap on Video player to enable/disable full-screen\n- `Mute/unMute` volume\n- Video player integration with keyboard\n\n  - `SPACE` play/pause video\n  - `M` mute/unMute video\n  - `F` enable/disable full-screen\n  - `ESC` enable/disable full-screen\n  - `-\u003e` seek video forward\n  - `\u003c-` seek video backward\n\n- Double tap on video (enable/disables full-screen)\n\n## Demo\n\n---\n\n- Playing videos from youtube\n\n---\n\n\u003ch1 align=\"center\"\u003e\n  \u003cimg src=\"https://user-images.githubusercontent.com/85326522/160871693-74b468de-839d-4ae3-9ef0-581066130072.gif\" alt=\"pod_player\"\u003e\n\u003c/h1\u003e\n\n- Video player on web\n\n---\n\n\u003ch1 align=\"center\"\u003e\n  \u003ca\u003e\u003cimg src=\"https://user-images.githubusercontent.com/85326522/160885274-41be06af-ae6d-41f3-8cff-21767fde8dad.gif\" alt=\"pod_player\"\u003e\u003c/a\u003e\n\u003c/h1\u003e\n\n- Vimeo player and custom video player\n\n---\n\n|                                     Change quality and playback speed                                      |                                        Control video from any where                                        |\n| :--------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------: |\n| ![](https://user-images.githubusercontent.com/85326522/160657119-7295ef4e-851b-42a3-a792-856fb6045b11.gif) | ![](https://user-images.githubusercontent.com/85326522/160657075-a17876c1-680b-472d-b1b9-ab06ba315b96.gif) |\n\n---\n\n- Controls similar to youtube\n\n---\n\n|                                                with overlay                                                |                              without overlay `(alwaysShowProgressBar = true)`                              |\n| :--------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------: |\n| ![](https://user-images.githubusercontent.com/85326522/156813671-ba562deb-3607-46a6-800c-d3a731b22cdd.jpg) | ![](https://user-images.githubusercontent.com/85326522/156813681-fad9f1f9-d73c-478f-8477-b42342424b4a.jpg) |\n\n---\n\n- On mobile full-screen\n\n---\n\n![](https://user-images.githubusercontent.com/85326522/156813701-aa722624-fde3-4036-9392-a0107ee863b2.jpg)\n\n---\n\n- Video controls\n\n---\n\n|                                               On Double tap                                                |                                            Custom progress bar                                             |\n| :--------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------: |\n| ![](https://user-images.githubusercontent.com/85326522/156813691-cd75c638-a4d3-4dda-8a22-eed3e43bd299.jpg) | ![](https://user-images.githubusercontent.com/85326522/156815812-e85bd5bc-2401-42d9-a7ba-c5ad2be494fa.jpg) |\n\n---\n\n- Video player on web\n\n---\n\n![](https://user-images.githubusercontent.com/85326522/156824569-d1ec705d-c278-4503-81fb-84e9dcb58336.jpg)\n\n---\n\n## Usage\n\n- [Installation](#installation)\n  - [Android](#android)\n  - [Ios](#ios)\n  - [Web](#web--not-recommended-in-production)\n- [How to use](#how-to-use)\n- [Configure pod player](#configure-pod-player)\n- [Add Thumbnail](#add-thumbnail)\n- [How to play video from youtube](#how-to-play-video-from-youtube)\n- [How to play video from vimeo](#how-to-play-video-from-vimeo)\n- [How to play video from vimeo private videos](#How-to-play-video-from-vimeo-private-videos)\n- [video player Options](#options)\n- [Example](#example)\n\n## Installation\n\n---\n\nIn your `pubspec.yaml` file within your Flutter Project:\n\n```yaml\ndependencies:\n  pod_player: \u003clatest_version\u003e\n```\n\n### Android\n\n---\n\nIf you are using network-based videos, ensure that the following permission is present in your Android Manifest file, located in `\u003cproject root\u003e/android/app/src/main/AndroidManifest.xml`:\n\n```xml\n\u003cuses-permission android:name=\"android.permission.INTERNET\"/\u003e\n```\n\nIf you need to access videos using http (rather than https) URLs.\n\nLocated inside application tag\n\n```xml\n\u003capplication\n  - - -\n  - - - - - -\n  android:usesCleartextTraffic=\"true\"\n\n```\n\n### Ios\n\n---\n\nAdd permissions to your app's Info.plist file,\n\nlocated in `\u003cproject root\u003e/ios/Runner/Info.plist`\n\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```\n\n### Web ( Not recommended in production)\n\n---\n\nif u are using `youtube` or `vimeo` player on web, then there will be some issue with `CORS` only in web,\nso use this [`flutter_cors`](https://pub.dev/packages/flutter_cors) package\n\n#### using [`flutter_cors`](https://pub.dev/packages/flutter_cors) package to enable or disable CORS\n\n\u003e To Enable CORS (run this command )\n\n```\ndart pub global activate flutter_cors\nfluttercors --enable\n```\n\n\u003e To Disable CORS (run this command )\n\n```\nfluttercors --disable\n```\n\n## How to use\n\n---\n\n```dart\nimport 'package:pod_player/pod_player.dart';\nimport 'package:flutter/material.dart';\n\nclass PlayVideoFromNetwork extends StatefulWidget {\n  const PlayVideoFromNetwork({Key? key}) : super(key: key);\n\n  @override\n  State\u003cPlayVideoFromNetwork\u003e createState() =\u003e _PlayVideoFromNetworkState();\n}\n\nclass _PlayVideoFromNetworkState extends State\u003cPlayVideoFromNetwork\u003e {\n  late final PodPlayerController controller;\n\n  @override\n  void initState() {\n    controller = PodPlayerController(\n      playVideoFrom: PlayVideoFrom.network(\n        'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerFun.mp4',\n      ),\n    )..initialise();\n    super.initState();\n  }\n\n  @override\n  void dispose() {\n    controller.dispose();\n    super.dispose();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      body: PodVideoPlayer(controller: controller),\n    );\n  }\n}\n\n```\n\n## Configure pod player\n\n```dart\n  controller = PodPlayerController(\n    playVideoFrom: PlayVideoFrom.youtube('https://youtu.be/A3ltMaM6noM'),\n    podPlayerConfig: const PodPlayerConfig(\n      autoPlay: true,\n      isLooping: false,\n      videoQualityPriority: [720, 360]\n    )\n  )..initialise();\n```\n\n## Add Thumbnail\n\n```dart\nPodVideoPlayer(\n  controller: controller,\n  videoThumbnail: const DecorationImage(\n    /// load from asset: AssetImage('asset_path')\n    image: NetworkImage('https://images.unsplash.com/photo-1569317002804-ab77bcf1bce4?ixlib=rb-1.2.1\u0026ixid=MnwxMjA3fDB8MHxzZWFyY2h8MXx8dW5zcGxhc2h8ZW58MHx8MHx8\u0026w=1000\u0026q=80',\n    ),\n    fit: BoxFit.cover,\n  ),\n),\n```\n\n## Add PodPlayerLabels (custom labels)\n\n```dart\n@override\nWidget build(BuildContext context) {\n  return Scaffold(\n    body: PodVideoPlayer(\n      controller: controller,\n      podPlayerLabels: const PodPlayerLabels(\n        play: \"Play label customized\",\n        pause: \"Pause label customized\",\n        ...\n      ),\n    ),\n  );\n}\n```\n\n## How to play video from youtube\n\n---\n\n```dart\nimport 'package:pod_player/pod_player.dart';\nimport 'package:flutter/material.dart';\n\nclass PlayVideoFromYoutube extends StatefulWidget {\n  const PlayVideoFromYoutube({Key? key}) : super(key: key);\n\n  @override\n  State\u003cPlayVideoFromYoutube\u003e createState() =\u003e _PlayVideoFromYoutubeState();\n}\n\nclass _PlayVideoFromYoutubeState extends State\u003cPlayVideoFromYoutube\u003e {\n  late final PodPlayerController controller;\n\n  @override\n  void initState() {\n    controller = PodPlayerController(\n      playVideoFrom: PlayVideoFrom.youtube('https://youtu.be/A3ltMaM6noM'),\n    )..initialise();\n    super.initState();\n  }\n\n  @override\n  void dispose() {\n    controller.dispose();\n    super.dispose();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      body: PodVideoPlayer(controller: controller),\n    );\n  }\n}\n\n```\n\n## How to play video from vimeo\n\n---\n\n```dart\nimport 'package:pod_player/pod_player.dart';\nimport 'package:flutter/material.dart';\n\nclass PlayVideoFromVimeo extends StatefulWidget {\n  const PlayVideoFromVimeo({Key? key}) : super(key: key);\n\n  @override\n  State\u003cPlayVideoFromVimeo\u003e createState() =\u003e _PlayVideoFromVimeoState();\n}\n\nclass _PlayVideoFromVimeoState extends State\u003cPlayVideoFromVimeo\u003e {\n  late final PodPlayerController controller;\n\n  @override\n  void initState() {\n    controller = PodPlayerController(\n      playVideoFrom: PlayVideoFrom.vimeo('518228118'),\n    )..initialise();\n    super.initState();\n  }\n\n  @override\n  void dispose() {\n    controller.dispose();\n    super.dispose();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      body: PodVideoPlayer(controller: controller),\n    );\n  }\n}\n\n```\n\n## How to play video from vimeo with hash\n\n---\n\n```dart\nimport 'package:pod_player/pod_player.dart';\nimport 'package:flutter/material.dart';\n\nclass PlayVideoFromVimeo extends StatefulWidget {\n  const PlayVideoFromVimeo({Key? key}) : super(key: key);\n\n  @override\n  State\u003cPlayVideoFromVimeo\u003e createState() =\u003e _PlayVideoFromVimeoState();\n}\n\nclass _PlayVideoFromVimeoState extends State\u003cPlayVideoFromVimeo\u003e {\n  late final PodPlayerController controller;\n\n  @override\n  void initState() {\n    controller = PodPlayerController(\n      playVideoFrom: PlayVideoFrom.vimeo('518228118', hash: '7cc595e1f8'),\n    )..initialise();\n    super.initState();\n  }\n\n  @override\n  void dispose() {\n    controller.dispose();\n    super.dispose();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      body: PodVideoPlayer(controller: controller),\n    );\n  }\n}\n\n```\n\n## How to play video from vimeo private videos\n\n---\n\n```dart\nimport 'package:pod_player/pod_player.dart';\nimport 'package:flutter/material.dart';\n\nclass PlayVideoFromVimeoPrivateVideo extends StatefulWidget {\n  const PlayVideoFromVimeoPrivateVideo({Key? key}) : super(key: key);\n\n  @override\n  State\u003cPlayVideoFromVimeoPrivateVideo\u003e createState() =\u003e\n          _PlayVideoFromVimeoPrivateVideoState();\n}\n\nclass _PlayVideoFromVimeoPrivateVideoState\n    extends State\u003cPlayVideoFromVimeoPrivateVideo\u003e {\n  late final PodPlayerController controller;\n\n  @override\n  void initState() {\n    String videoId = 'your private video id';\n    String token = 'your access token';\n    final Map\u003cString, String\u003e headers = \u003cString, String\u003e{};\n    headers['Authorization'] = 'Bearer ${token}';\n\n    controller = PodPlayerController(\n      playVideoFrom: PlayVideoFrom.vimeoPrivateVideos(\n        videoId,\n        httpHeaders: headers\n      ),\n    )..initialise();\n    super.initState();\n  }\n\n  @override\n  void dispose() {\n    controller.dispose();\n    super.dispose();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      body: PodVideoPlayer(controller: controller),\n    );\n  }\n}\n\n```\n\n## Options\n\n---\n\n- Options for mobile\n\n---\n\n|                                           `Normal player option`                                           |                                           `Vimeo player option`                                            |                                         `Change quality of video`                                          |\n| :--------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------: |\n| ![](https://user-images.githubusercontent.com/85326522/156813694-65cc70ff-f87f-4668-9ac4-7c0ee14c40cb.jpg) | ![](https://user-images.githubusercontent.com/85326522/156821283-f5470bd2-21ad-4fee-90ac-85176ccc788f.jpg) | ![](https://user-images.githubusercontent.com/85326522/156821301-7c6b1a6d-68a6-4945-8cca-d5e417042e30.jpg) |\n\n## Example\n\n---\n\nPlease run the app in the [`example/`](https://github.com/newtaDev/fl_video_player/tree/master/example) folder to start playing!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnewtadev%2Fpod_player","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnewtadev%2Fpod_player","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnewtadev%2Fpod_player/lists"}