betterplayer icon indicating copy to clipboard operation
betterplayer copied to clipboard

[BUG] Cannot play video on iOS (code 11828)

Open Nico04 opened this issue 2 years ago • 1 comments

Hello :)

I can't play several videos on iOS, with vimeo dash url.

Failed to load video:
Error Domain=AVFoundationErrorDomain Code=-11828 "Cannot Open" UserInfo={NSLocalizedFailureReason=This media format is not supported., NSLocalizedDescription=Cannot Open, NSUnderlyingError=0x28393c870 {Error Domain=NSOSStatusErrorDomain Code=-12847 "(null)"}}
[VERBOSE-2:ui_dart_state.cc(209)] Unhandled Exception: PlatformException(VideoError, Failed to load video: Cannot Open, null, null)

My code is simple:

BetterPlayer.network(
      'https://player.vimeo.com/external/648359100.mpd?s=a4419a2e2113cc24a87aef2f93ef69a8e4c8fb0c',
      betterPlayerConfiguration: BetterPlayerConfiguration(
        autoPlay: autoPlay,
        fit: BoxFit.contain,
        controlsConfiguration: const BetterPlayerControlsConfiguration(
          controlBarColor: Colors.black38,
        ),
      ),
    )

It's work fine with same link on Android 11, but it throws on iOS 14.8 and 15. I've tested v0.0.81 and v0.0.82, with Flutter 2.10.5

Video works fine on this web player

Nico04 avatar May 04 '22 08:05 Nico04

I have the some problem here :

String url1 = 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerBlazes.mp4';
  String url2 = 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4';

  late String url;
  late BetterPlayerController _betterPlayerController;

  @override
  void initState() {
    super.initState();
    url = url1;
    BetterPlayerDataSource betterPlayerDataSource = BetterPlayerDataSource(
        BetterPlayerDataSourceType.network, url,cacheConfiguration: const BetterPlayerCacheConfiguration(useCache: true));
    _betterPlayerController = BetterPlayerController(
        const BetterPlayerConfiguration(autoPlay: true),
        betterPlayerDataSource: betterPlayerDataSource);
  }

  _playOtherVideo(){
    setState(() {
      url = url == url1 ? url2 : url1;
      _betterPlayerController.setupDataSource(BetterPlayerDataSource(
          BetterPlayerDataSourceType.network,
          url,
          cacheConfiguration: const BetterPlayerCacheConfiguration(useCache: true)));
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            AspectRatio(
              aspectRatio: 16 / 9,
              child: BetterPlayer(
                controller: _betterPlayerController,
              ),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _playOtherVideo,
        tooltip: 'change video',
        child: const Icon(Icons.adb),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }

when i set autoplay: to false it works

saddemYassin avatar Jun 08 '22 10:06 saddemYassin