Giter Site home page Giter Site logo

muslimtv / flutter_playout Goto Github PK

View Code? Open in Web Editor NEW
151.0 151.0 94.0 15.57 MB

AV Playout in Flutter

License: BSD 3-Clause "New" or "Revised" License

Kotlin 0.40% Java 37.11% Ruby 1.49% Swift 20.48% Objective-C 0.21% Dart 40.20% HTML 0.10%
android avplayer exoplayer hls ios multi-audio player video-playback

flutter_playout's People

Contributors

artths avatar khuramkhalid avatar koyao avatar lecicdjuro avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

flutter_playout's Issues

Get duration of audio.

Hi Khuram, thank you for your fast action to previous issue.

My json model does not contains duration of audio track. And I think, it is redundant work to calculate and save it somewhere for my all tracks.

Can you please add a callback(listener) to audio duration change?

Thank you.

Failed due to flutter_playout

When i am building APK, android studio and VSC both are showing error, build failed due to flutter_playout.

Asking to update gradle version. But when i update whole project stop working.

Any solution

Fatal error in VideoPlayer.swift

Hello. I have downloaded and run the demo. With some videos it doesn't give me problems. Others get the following error:

Screen Shot 2020-04-14 at 22 36 08

Apparently playerViewController is null. This happens to me with all the videos of a m3u playlist. I hope your help.

Thanks!

Update:
I was debugging and this is where the problem happens. Does not pass conditional "! Asset.isPlayable".

Screen Shot 2020-04-14 at 23 06 42

Example app Crashes on playing valid audio

I've tried to play real link audio on the example app audio player and the app crashes once I hit play

the url I've tried to play : https://download.tvquran.com/download/selections/224/59136e042760a.mp3

the app log :

Launching lib\main.dart on JKM LX1 in debug mode...
√ Built build\app\outputs\apk\debug\app-debug.apk.
D/FlutterActivity(19527): Using the launch theme as normal theme.
D/FlutterActivityAndFragmentDelegate(19527): Setting up FlutterEngine.
D/FlutterActivityAndFragmentDelegate(19527): No preferred FlutterEngine was provided. Creating a new FlutterEngine for this FlutterFragment.
D/FlutterActivityAndFragmentDelegate(19527): Attaching FlutterEngine to the Activity that owns this Fragment.
D/FlutterView(19527): Attaching to a FlutterEngine: io.flutter.embedding.engine.FlutterEngine@b6b8f32
D/FlutterActivityAndFragmentDelegate(19527): Executing Dart entrypoint: main, and sending initial route: /
D/AwareBitmapCacher(19527): handleInit switch not opened pid=19527
W/Settings(19527): Setting device_provisioned has moved from android.provider.Settings.Secure to android.provider.Settings.Global.
V/HiTouch_HiTouchSensor(19527): User setup is finished.
V/AudioManager(19527): playSoundEffect effectType: 0
V/AudioManager(19527): querySoundEffectsEnabled...
V/MediaHTTPService(19527): MediaHTTPService(android.media.MediaHTTPService@dec7473): Cookies: null
V/MediaHTTPService(19527): makeHTTPConnection: CookieManager created: java.net.CookieManager@ddf12e
V/MediaHTTPService(19527): makeHTTPConnection(android.media.MediaHTTPService@dec7473): cookieHandler: java.net.CookieManager@ddf12e Cookies: null
D/NetworkSecurityConfig(19527): No Network Security Config specified, using platform default
V/PlayerBase(19527): baseStart() piid=11543
I/MediaPlayer(19527): [HSM] stayAwake true uid: 10391, pid: 19527
I/MediaPlayerNative(19527): Pid:19527 MediaPlayer::start
D/MediaPlayerNative(19527): Action:start, CurrentState:MEDIA_PLAYER_STARTED
D/AndroidRuntime(19527): Shutting down VM
E/AndroidRuntime(19527): FATAL EXCEPTION: main
E/AndroidRuntime(19527): Process: com.example.testplayer, PID: 19527
E/AndroidRuntime(19527): java.lang.IllegalArgumentException: Invalid notification (no valid small icon): Notification(channel=NotificationBarController pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x0 color=0x00000000 category=transport actions=1 vis=PUBLIC)
E/AndroidRuntime(19527): at android.app.NotificationManager.notifyAsUser(NotificationManager.java:393)
E/AndroidRuntime(19527): at android.app.NotificationManager.notify(NotificationManager.java:371)
E/AndroidRuntime(19527): at android.app.NotificationManager.notify(NotificationManager.java:347)
E/AndroidRuntime(19527): at tv.mta.flutter_playout.audio.AudioServiceBinder.updateNotification(AudioServiceBinder.java:551)
E/AndroidRuntime(19527): at tv.mta.flutter_playout.audio.AudioServiceBinder.updatePlaybackState(AudioServiceBinder.java:496)
E/AndroidRuntime(19527): at tv.mta.flutter_playout.audio.AudioServiceBinder.onPrepared(AudioServiceBinder.java:322)
E/AndroidRuntime(19527): at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:3584)
E/AndroidRuntime(19527): at android.os.Handler.dispatchMessage(Handler.java:112)
E/AndroidRuntime(19527): at android.os.Looper.loop(Looper.java:216)
E/AndroidRuntime(19527): at android.app.ActivityThread.main(ActivityThread.java:7625)
E/AndroidRuntime(19527): at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(19527): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
E/AndroidRuntime(19527): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
I/Process (19527): Sending signal. PID: 19527 SIG: 9
Lost connection to device.
Exited (sigterm)

video playing stops when I press back button

I got two screens.
List and video player.
from the list, I choose the video and the video plays.
when I hit the back button the video stops.
but when I press the home button the video is playing on the background. This works fine.
I need the video to play continuously on the background when I hit the back button.
Hope you understood the issue...

And how to enable notification?

not working m3u8

i try using this app using my m3u8 stream and its not working

[Question] - how to setup the example

Hi there,
I would like to see your plugin in action, so I just cloned the repo and built the example project. It is not clear to me where I should set my stream url, which will allow to watch the broadcasted video afterwards.
Any hints will be greatly appreciated, thanks!

Set desired aspect ratio for stream preview

I have live stream that is streaming from the phone camera and it has a 9/16 aspect ratio.
Currently, stream view is only in 16 /9 aspect ratio.
Can this be optional, predefined?

NullPointerException

E/PlayerLayout(30902): java.lang.NullPointerException: Attempt to invoke interface method 'void io.flutter.plugin.common.EventChannel$EventSink.success(java.lang.Object)' on a null object reference
E/PlayerLayout(30902): 	at tv.mta.flutter_playout.video.PlayerLayout$2.run(PlayerLayout.java:460)
E/PlayerLayout(30902): 	at android.os.Handler.handleCallback(Handler.java:883)
E/PlayerLayout(30902): 	at android.os.Handler.dispatchMessage(Handler.java:100)
E/PlayerLayout(30902): 	at android.os.Looper.loop(Looper.java:214)
E/PlayerLayout(30902): 	at android.app.ActivityThread.main(ActivityThread.java:7397)
E/PlayerLayout(30902): 	at java.lang.reflect.Method.invoke(Native Method)
E/PlayerLayout(30902): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
E/PlayerLayout(30902): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:935)
D/PlayerLayout(30902): onTime: [time=0]
E/PlayerLayout(30902): onTime: 

Thank for the great repo, how can I fix this? It's not crashing but it look ugly on log :D

Crash

Crash here
await SystemChannels.platform_views
.invokeMethod('dispose', _platformViewId);

flutter_playout: ^1.0.19

MediaPlayerNative on Android

hiya! When I am trying to run the application on android I am getting an error regarding the MediaPlayerNative. The error is
E/AudioServiceBinder: onPlayerError: [what=-38] [extra=0]
E/MediaPlayerNative: pause called in state 0, mPlayer(0x74db4e8500)
E/MediaPlayerNative: error (-38, 0)
E/AudioServiceBinder: onPlayerError: [what=-38] [extra=0]
E/MediaPlayerNative: pause called in state 0, mPlayer(0x74db4e8500)

Any ideas why?

Error when play audio on android

I have this bloc for the player that works fine in iOS:

import 'package:rxdart/rxdart.dart';
import 'package:flutter_playout/audio.dart';
import 'package:flutter_playout/player_observer.dart';
import 'package:flutter_playout/player_state.dart';

class PlayerBloc with PlayerObserver {
  Audio _audioPlayer;
  PlayerState audioPlayerState = PlayerState.STOPPED;
  bool _loading = false;
  String url;
  String title;
  String subtitle;

  Duration duration = Duration(milliseconds: 1);
  Duration currentPlaybackPosition = Duration.zero;

  String streamUrl;

  setPlayerData(String url, String title, String subtitle) {
    this.url = url;
      this.title = title;
      this.subtitle = subtitle;
      listenForAudioPlayerEvents();
      _audioPlayer = Audio.instance();
      play();
  }

  final playerStatus = new BehaviorSubject<bool>.seeded(true);
  Observable<bool> get playerStatusObservable => playerStatus.stream;
  bool isPlaying = false;

  sinkPlayerStatus() {
    if (audioPlayerState == PlayerState.PLAYING) {
      playerStatus.add(true);
    } else if (audioPlayerState == PlayerState.PAUSED ||
        audioPlayerState == PlayerState.STOPPED) {
      playerStatus.add(false);
    }
  }

  playPause() async {
    try {
      if (audioPlayerState == PlayerState.PLAYING) {
        pause();
      } else {
        play();
      }
    } catch (err) {
      throw Exception(err);
    }
  }

  play() async {
    try {
      _loading = true;
      await _audioPlayer.play(url,
          title: title,
          subtitle: subtitle,
          position: currentPlaybackPosition,
          isLiveStream: true);
      audioPlayerState = PlayerState.PLAYING;
      sinkPlayerStatus();
    } catch (err) {
      throw Exception(err);
    }
  }

  pause() async {
    try {
      await _audioPlayer.pause();
      audioPlayerState = PlayerState.PAUSED;
      sinkPlayerStatus();
    } catch (err) {
      throw Exception(err);
    }
  }

  stop() {
    try {
      _audioPlayer.reset();
      audioPlayerState = PlayerState.STOPPED;
      currentPlaybackPosition = Duration.zero;
    } catch (err) {
      throw Exception(err);
    }
  }

  //OVERRIDE PLAYER OBSERVER

  @override
  void onPlay() {
    audioPlayerState = PlayerState.PLAYING;
  }

  @override
  void onPause() {
    audioPlayerState = PlayerState.PAUSED;
  }

  @override
  void onComplete() {
    audioPlayerState = PlayerState.PAUSED;
    currentPlaybackPosition = Duration.zero;
  }

  @override
  void onTime(int position) {
    currentPlaybackPosition = Duration(seconds: position);
    _loading = false;
  }

  @override
  void onSeek(int position, double offset) {
    super.onSeek(position, offset);
  }

  @override
  void onDuration(int duration) {
    this.duration = Duration(milliseconds: duration);
  }

  @override
  void onError(String error) {
    super.onError(error);
  }

  void dispose() {
    _audioPlayer.dispose();
  }
}

But when i try to run in Android, when i use the method play on the function _audioPlayer.play() i get this error:

Failed assertion: boolean expression must not be null
The relevant error-causing widget was
StreamBuilder
E/flutter (30463): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: Exception: PlatformException(error, Attempt to invoke virtual method 'java.lang.String tv.mta.flutter_playout.audio.AudioServiceBinder.getAudioFileUrl()' on a null object reference, null)
E/flutter (30463): #0 PlayerBloc.play
package:jfj_comunicaciones/blocs/player_bloc.dart:69

What im doing wrong?

[Question] Playing RTMP streams

Hi there,
Can the player able to send RTMP stream to a server e.g. ANT media server? If yes - can you please point me to an example how to do that?
Thanks!

no auto play when the app is in background in IOS ?

Hello
Thanks so much for this package, but i have a problem hope u help me fix it, im getting data using socket io , this data contains a URL that should be played, it works as intended when app is in foreground but when app is in background and it doesn't play the new URL

Not working when i using in listview builder

[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: PlatformException(error, java.lang.IllegalStateException: Trying to create an already
created platform view, view id: 1

No notification in iOS 13.3

When I play the video on iPhone 8 simulator with iOS 13.3 I get no notifications. Am I doing something wrong or it's a bug?

 _videoPlayer = Video(
              autoPlay: true,
              url: link,
              title: 'Title',
              subtitle: 'Subtitle',
            );

the Widget blocks the UI

I am creating an interface like this

In the first render time the widget blocks the UI and also when the widget was rendered and the parameter url changes the widget blocks the UI again.

Every time I click on one of the items in the list the video url changes

Black screen

at tv.mta.flutter_playout.video.PlayerLayout$PlayerAnalyticsEventsListener.onSeekProcessed(PlayerLayout.java:665)

flutter_playout: ^1.0.35

[✓] Flutter (Channel stable, v1.12.13+hotfix.9, on Mac OS X 10.15.4 19E287, locale en-US)
• Flutter version 1.12.13+hotfix.9 at .../flutter
• Framework revision f139b11009 (3 weeks ago), 2020-03-30 13:57:30 -0700
• Engine revision af51afceb8
• Dart version 2.7.2

[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
• Android SDK at ...Android/sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-29, build-tools 29.0.3
• ANDROID_HOME = .../Android/sdk
• ANDROID_SDK_ROOT = .../Android/sdk
• Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 1.8.0_212-release-1586-b4-5784211)
• All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 11.4.1)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 11.4.1, Build version 11E503a
• CocoaPods version 1.8.4

[✓] Android Studio (version 3.6)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin version 42.1.1
• Dart plugin version 191.8593
• Java version OpenJDK Runtime Environment (build 1.8.0_212-release-1586-b4-5784211)

[✓] VS Code (version 1.44.2)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension version 3.9.1

Playing A local file

How to Play A local file ?
tried to put a local paths

assets/audio/file.mp3
/assets/audio/file.mp3
./assets/audio/file.mp3
../assets/audio/file.mp3
.../assets/audio/file.mp3

and it did not work ?

I also defined the audio folder as an asset in the pubspec
assets:
- assets/images/
- assets/audio/

Custom play pause icons not playing pausing properly.

Hello,
I am using this plugin in my flutter app and i am facing a problem. The problem is when i use live url to stream the audio _audioPlayer.pause(); it pauses but when i hit play again its not working but if press notification play button it worked. Kindly help me. I am adding the code here

Audio _audioPlayer;
_audioPlayer.play("myUrl",
isLiveStream: true);
audioPlayerState = PlayerState.PLAYING;

To pause
audioPlayerState = PlayerState.PAUSED;

Thanks!

[Android]Stream doesn't work

The stream that was working on 1.30 version, now isn't working on Android ONLY, while on IOS everything works fine

Source error.
E/ExoPlayerImplInternal(19268): com.google.android.exoplayer2.source.UnrecognizedInputFormatException: None of the available extractors (MatroskaExtractor, FragmentedMp4Extractor, Mp4Extractor, Mp3Extractor, AdtsExtractor, Ac3Extractor, TsExtractor, FlvExtractor, OggExtractor, PsExtractor, WavExtractor, AmrExtractor, Ac4Extractor) could read the stream.
E/ExoPlayerImplInternal(19268): at com.google.android.exoplayer2.source.ProgressiveMediaPeriod$ExtractorHolder.selectExtractor(ProgressiveMediaPeriod.java:1095)
E/ExoPlayerImplInternal(19268): at com.google.android.exoplayer2.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:974)
E/ExoPlayerImplInternal(19268): at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:391)
E/ExoPlayerImplInternal(19268): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/ExoPlayerImplInternal(19268): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/ExoPlayerImplInternal(19268): at java.lang.Thread.run(Thread.java:764)
E/PlayerLayout(19268): onError:
E/PlayerLayout(19268): java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Throwable.getMessage()' on a null object reference

Audio continues on phone call

Currently, if you receive a phone call and the audio is playing, you can hear the caller and the audio continuing in the background. Ideally the audio should pause when you answer the call.
Thanks!

not working

app crach i try using this app using my mp3 stream and its not working

HTTP(s) Headers, Captions, DRM?

Any plans to add HTTP(s) header functionality? On iOS that requires AVAssetResourceLoaderDelegate because the API otherwise is hidden and even then it doesn't work with captions.

How about Widevine, Fairplay, PlayReady?

And the ability to specify external WebVTT/SRT files for playback and selection in the UI by the user would be great too!

iOS plugin is implemented incorrectly

Hi,
Thank you for the nice plugin. However iOS part is implemented incorrectly - it recreates native view every time flutter rebuilds widgets.
For example I have animation that rebuilds all widgets and plugin creates new native iOS view on every frame. In 1 second I have like 20 instances of player playing the same video, sound begin overlap and shuttering appears.
What you should doing is create player instance in init(frame:CGRect... and just return created view in view() then it works as expected.

Remove url requirement and checking

I want to be able create blank video player view first, put it in the view tree and then update it with the url when I have one. Like that:

// create widget  
Video _videoPlayer = Video();

...

// put in some widget tree
child: AspectRatio(
                aspectRatio: 16 / 9,
                child: _videoPlayer,
              ),

...

// update with url and title
 _videoPlayer = Video(
              autoPlay: true,
              url: link,
              title: 'Title',
              subtitle: 'Subtitle',
            );

ATM it's not possible, because if there is no URL, it's null or not valid player instance would not be created (simple UIView in native part and Container() in dart part). Even if I update player widget with the url later it still will not be playing because there is no player instance created and it won't be created because _setupPlayer() is called in initState() only.

I propose to make this parameter optional and to completely remove all checks for its validity. Just create a player instance without a link so we can add it later. Moreover, in its current form, you have a chance to add a link when creating a player, which in your opinion will be valid, but the player will consider it not valid and you will no longer have the opportunity to create a player. All subsequent new url requests will be ignored.

No full screen button

Hello

It is necessary to have full screen button

If there is one need to add to documentation

Issue on pause and stop on Android

When i play an URL stream works perfectly, but when pause or stop and then i try to play again, the audio doesn't work. Whan i'm doing wrong?
One of the stream url is this: http://192.99.32.79:9972/;

For audio control i'm using a bloc, here is:

import 'package:rxdart/rxdart.dart';
import 'package:flutter_playout/audio.dart';
import 'package:flutter_playout/player_observer.dart';
import 'package:flutter_playout/player_state.dart';

class PlayerBloc with PlayerObserver {
  Audio _audioPlayer;
  PlayerState audioPlayerState = PlayerState.STOPPED;
  bool _loading = false;
  String url;
  String title;
  String subtitle;

  Duration duration = Duration(milliseconds: 1);
  Duration currentPlaybackPosition = Duration.zero;

  String streamUrl;

  setPlayerData(String url, String title, String subtitle) {
    this.url = url;
    this.title = title;
    this.subtitle = subtitle;
    listenForAudioPlayerEvents();
    _audioPlayer = Audio.instance();
    play();
  }

  final playerStatus = new BehaviorSubject<bool>.seeded(true);
  Stream<bool> get playerStatusObservable => playerStatus.stream;
  bool isPlaying = false;

  sinkPlayerStatus() {
    if (audioPlayerState == PlayerState.PLAYING) {
      playerStatus.add(true);
    } else if (audioPlayerState == PlayerState.PAUSED ||
        audioPlayerState == PlayerState.STOPPED) {
      playerStatus.add(false);
    }
  }

  playPause() async {
    try {
      if (audioPlayerState == PlayerState.PLAYING) {
        await pause();
      } else {
        await play();
      }
    } catch (err) {
      throw Exception(err);
    }
  }

  play() async {
    try {
      _loading = true;
      await _audioPlayer.play(url,
          title: title,
          subtitle: subtitle,
          position: currentPlaybackPosition,
          isLiveStream: true);
      audioPlayerState = PlayerState.PLAYING;
      sinkPlayerStatus();
    } catch (err) {
      throw Exception(err);
    }
  }

  pause() async {
    try {
      await _audioPlayer.pause();
      audioPlayerState = PlayerState.PAUSED;
      sinkPlayerStatus();
    } catch (err) {
      throw Exception(err);
    }
  }

  stop() async{
    try {
      await _audioPlayer.reset();
      audioPlayerState = PlayerState.STOPPED;
      currentPlaybackPosition = Duration.zero;
      sinkPlayerStatus();
    } catch (err) {
      throw Exception(err);
    }
  }

  //OVERRIDE PLAYER OBSERVER

  @override
  void onPlay() {
    audioPlayerState = PlayerState.PLAYING;
  }

  @override
  void onPause() {
    audioPlayerState = PlayerState.PAUSED;
  }

  @override
  void onComplete() {
    audioPlayerState = PlayerState.PAUSED;
    currentPlaybackPosition = Duration.zero;
  }

  @override
  void onTime(int position) {
    currentPlaybackPosition = Duration(seconds: position);
    _loading = false;
  }

  @override
  void onSeek(int position, double offset) {
    super.onSeek(position, offset);
  }

  @override
  void onDuration(int duration) {
    this.duration = Duration(milliseconds: duration);
  }

  @override
  void onError(String error) {
    super.onError(error);
  }

  void dispose() {
    _audioPlayer.dispose();
  }
}

And what i do for play and pause is call the bloc methods.
This just happen on Android, because in iOS works perfectly.

Unable to build IOS

[!] Unable to determine Swift version for the following pods:

- `flutter_playout` does not specify a Swift version and none of the targets (`Runner`) integrating it have the `SWIFT_VERSION` attribute set. Please contact the author or set the `SWIFT_VERSION` attribute in at least one of
the targets that integrate this pod.

Enable non-HLS (progressive) video sources

Hello,

I needed non HLS support for a project I'm working on.
While I tested this package, iOS was working fine but there was a need for a small change to make it work on Android too.

So I made a pull request with the fix: #26

Next part is valid only for Android
One thing to note is that progressive files are quite varied and some of them support seeking while others do not (https://exoplayer.dev/progressive.html).

One suggestion would be to connect to onSourceInfoRefreshed callback on ProgressiveMediaSource class and internally change the seek state so that all seek events from the user are ignored. I'm not sure what will happen if you seek and the media does not support that. I guess it crashes.
I'm not doing that now because i don't need it and its out of the scope of this pull request.

If the source is an MP4 file it works without any issues, even if that's a live stream.

Doesn´t work on the last Android versions

I`ve tried this plugin with an old Android version (5.0) and works perfectly, but when i try on an newer version like 9 or 10, this plugin simply doesn´t work, there´s a solution?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.