media-kit / media-kit

A cross-platform video player & audio player for Flutter & Dart.
https://github.com/media-kit/media-kit
MIT License
916 stars 132 forks source link

Audio does not play again after setting new Audio track after calling player.stop() #828

Closed chymchym1905 closed 1 week ago

chymchym1905 commented 2 weeks ago
class VideoStateNotifier extends StateNotifier<VideoUtilsControl> {
  GlobalKey<VideoState> key;
  VideoStateNotifier(this.key)
      : super(VideoUtilsControl(
            Video(
              key: key,
              controller: VideoController(Player()),
              fit: BoxFit.fitWidth,
              onEnterFullscreen: () async {
                await SystemChrome.setPreferredOrientations(
                    [DeviceOrientation.landscapeLeft, DeviceOrientation.landscapeRight]);
              },
              onExitFullscreen: () async {
                await SystemChrome.setPreferredOrientations(
                    [DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]);
                await SystemChrome.setPreferredOrientations(DeviceOrientation.values);
              },
            ),
            key));
  bool get isFullscreen {
    if (state.vidstate.currentState != null) {
      return state.vidstate.currentState!.isFullscreen();
    }
    return false;
  }

  Video get video => state.vid;

  void setmedia(VideoItem item) async {
    await state.vid.controller.player.open(Media(item.video));
    await state.vid.controller.player.setAudioTrack(AudioTrack.auto());
    await state.vid.controller.player.setAudioTrack(AudioTrack.uri(item.audio));
    print(state.vid.controller.player.state.track.audio);
  }

  void unsetmedia() async {
    await state.vid.controller.player.stop();
    print(state.vid.controller.player.state.track.audio);
  }

  void enterFullscreen() async {
    if (state.vidstate.currentState != null) {
      await state.vidstate.currentState!.enterFullscreen();
    }
  }

  void exitFullscreen() async {
    if (state.vidstate.currentState != null) {
      await state.vidstate.currentState!.exitFullscreen();
    }
  }
}

I'm using a provider to manage the video. when i call unsetmedia() and setmedia() again, the player does not play the audio. Is there a workaround? I only put 1 stance of Video in the entire app.

abdelaziz-mahdy commented 1 week ago

does pause not work in your case? instead of stop doing pause should have the same effect.

for me i dont set audio but it works so you can try without setting audio too just to make sure if it work

also you can check the player logs to know where the problem happens

player = Player(configuration: PlayerConfiguration(logLevel: MPVLogLevel.debug)); 

player.stream.log.listen((event) { print("log $event"); });
chymchym1905 commented 1 week ago

After i play the first video (set media for the first time), I got the log like this

flutter: log PlayerLog(prefix: cplayer, level: debug, text: Run command: stop, flags=73, args=[flags=""])
flutter: media_kit: wakelock: _count = 1
flutter: log PlayerLog(prefix: cplayer, level: debug, text: Run command: playlist-clear, flags=73, args=[])
flutter: log PlayerLog(prefix: cplayer, level: debug, text: Run command: playlist-play-index, flags=73, args=[index="none"])
flutter: log PlayerLog(prefix: cplayer, level: debug, text: Run command: loadfile, flags=64, args=[url="https://rr5---sn-nx5s7n76.googlevideo.com/videoplayback?expire=1716296976&ei=sEhMZo-aHcGxsfIPnOSvoA8&ip=35.81.83.91&id=o-ACGRKsvVKD1GfjFNypVATys6x3c-pGBvp0gS9YjOJiO1&itag=137&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=R5&mm=31%2C29&mn=sn-nx5s7n76%2Csn-nx57ynsk&ms=au%2Crdu&mv=u&mvi=5&pl=24&vprv=1&svpuc=1&mime=video%2Fmp4&rqh=1&gir=yes&clen=33011013&dur=87.099&lmt=1700269380092228&mt=1716274956&fvip=2&keepalive=yes&c=IOS&txp=6219224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRQIhANhpJVaE2QseWZlq29icPXD87gYceVYYS30g0cuudc_BAiByr84Ei7fNlzLS6vZ5ocKbFilpbLhGyohde9itgXTANw%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl&lsig=AHWaYeowRAIgO47m2DRu2QuC5MguL0nKV3wGFKtuKjU0tAlcsc2feLICIG3QW3-1nqj7hCjK9-mrTzLXLcNi0S62WxDOdceeoihz",  flags="append", options=""]) (This is the video url)
flutter: log PlayerLog(prefix: cplayer, level: debug, text: Run command: cycle, flags=73, args=[name="pause", value="1.000000"])
flutter: log PlayerLog(prefix: cplayer, level: v, text: Set property: pause -> 1)
flutter: log PlayerLog(prefix: cplayer, level: v, text: Set property: playlist-pos=0 -> 1)
flutter: log PlayerLog(prefix: global, level: debug, text: state path: 'watch_later' -> '-')
flutter: log PlayerLog(prefix: cplayer, level: v, text: Running hook: main/on_load)
flutter: log PlayerLog(prefix: cplayer, level: v, text: Set property: aid="auto" -> 1)
flutter: log PlayerLog(prefix: cplayer, level: debug, text: Run command: audio-add, flags=64, args=[url="https://rr5---sn-nx5s7n76.googlevideo.com/videoplayback?expire=1716296976&ei=sEhMZo-aHcGxsfIPnOSvoA8&ip=35.81.83.91&id=o-ACGRKsvVKD1GfjFNypVATys6x3c-pGBvp0gS9YjOJiO1&itag=140&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=R5&mm=31%2C29&mn=sn-nx5s7n76%2Csn-nx57ynsk&ms=au%2Crdu&mv=u&mvi=5&pl=24&vprv=1&svpuc=1&mime=audio%2Fmp4&rqh=1&gir=yes&clen=1411526&dur=87.167&lmt=1700269375586545&mt=1716274956&fvip=2&keepalive=yes&c=IOS&txp=6218224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRQIgDrdlyFKjooMfo4ahvouCuvn0qSd4i3Uo8wQf2MW-oMACIQCNGUywPk8ZA-ZkA7ogwng8DmczDR53nww17dKeRkO5qQ%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl&lsig=AHWaYeowRAIgO47m2DRu2QuC5MguL0nKV3wGFKtuKjU0tAlcsc2feLICIG3QW3-1nqj7hCjK9-mrTzLXLcNi0S62WxDOdceeoihz", flags="select", title="external", lang="auto"]) (this is the audio url)
flutter: log PlayerLog(prefix: ffmpeg, level: v, text: Opening https://rr5---sn-nx5s7n76.googlevideo.com/videoplayback?expire=1716296976&ei=sEhMZo-aHcGxsfIPnOSvoA8&ip=35.81.83.91&id=o-ACGRKsvVKD1GfjFNypVATys6x3c-pGBvp0gS9YjOJiO1&itag=140&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=R5&mm=31%2C29&mn=sn-nx5s7n76%2Csn-nx57ynsk&ms=au%2Crdu&mv=u&mvi=5&pl=24&vprv=1&svpuc=1&mime=audio%2Fmp4&rqh=1&gir=yes&clen=1411526&dur=87.167&lmt=1700269375586545&mt=1716274956&fvip=2&keepalive=yes&c=IOS&txp=6218224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRQIgDrdlyFKjooMfo4ahvouCuvn0qSd4i3Uo8wQf2MW-oMACIQCNGUywPk8ZA-ZkA7ogwng8DmczDR53nww17dKeRkO5qQ%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl&lsig=AHWaYeowRAIgO47m2DRu2QuC5MguL0nKV3wGFKtuKjU0tAlcsc2feLICIG3QW3-1nqj7hCjK9-mrTzLXLcNi0S62WxDOdceeoihz) (this is the audio url)
flutter: log PlayerLog(prefix: ffmpeg, level: debug, text: resize stream to 131072 bytes, drop 0 bytes)
flutter: log PlayerLog(prefix: ffmpeg, level: v, text: Mime-type: 'audio/mp4')
flutter: log PlayerLog(prefix: ffmpeg, level: debug, text: Stream opened successfully.)
flutter: log PlayerLog(prefix: demux, level: v, text: Trying demuxers for level=normal.)
flutter: log PlayerLog(prefix: demux, level: debug, text: Trying demuxer: disc (force-level: normal))
flutter: log PlayerLog(prefix: demux, level: debug, text: Trying demuxer: edl (force-level: normal))
flutter: log PlayerLog(prefix: demux, level: debug, text: Trying demuxer: cue (force-level: normal))
flutter: log PlayerLog(prefix: demux, level: debug, text: Trying demuxer: rawaudio (force-level: normal))
flutter: log PlayerLog(prefix: demux, level: debug, text: Trying demuxer: rawvideo (force-level: normal))
flutter: log PlayerLog(prefix: demux, level: debug, text: Trying demuxer: mkv (force-level: normal))
flutter: log PlayerLog(prefix: demux, level: debug, text: Trying demuxer: lavf (force-level: normal))
flutter: log PlayerLog(prefix: lavf, level: v, text: Found 'mov,mp4,m4a,3gp,3g2,mj2' at score=100 size=2048.)
flutter: log PlayerLog(prefix: lavf, level: v, text: Could not set AVOption allowed_extensions='ALL')
flutter: log PlayerLog(prefix: demux, level: v, text: Detected file format: mov,mp4,m4a,3gp,3g2,mj2 (libavformat))
flutter: log PlayerLog(prefix: ffmpeg, level: v, text: Opening https://rr5---sn-nx5s7n76.googlevideo.com/videoplayback?expire=1716296976&ei=sEhMZo-aHcGxsfIPnOSvoA8&ip=35.81.83.91&id=o-ACGRKsvVKD1GfjFNypVATys6x3c-pGBvp0gS9YjOJiO1&itag=137&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=R5&mm=31%2C29&mn=sn-nx5s7n76%2Csn-nx57ynsk&ms=au%2Crdu&mv=u&mvi=5&pl=24&vprv=1&svpuc=1&mime=video%2Fmp4&rqh=1&gir=yes&clen=33011013&dur=87.099&lmt=1700269380092228&mt=1716274956&fvip=2&keepalive=yes&c=IOS&txp=6219224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRQIhANhpJVaE2QseWZlq29icPXD87gYceVYYS30g0cuudc_BAiByr84Ei7fNlzLS6vZ5ocKbFilpbLhGyohde9itgXTANw%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl&lsig=AHWaYeowRAIgO47m2DRu2QuC5MguL0nKV3wGFKtuKjU0tAlcsc2feLICIG3QW3-1nqj7hCjK9-mrTzLXLcNi0S62WxDOdceeoihz) (video url)
flutter: log PlayerLog(prefix: ffmpeg, level: debug, text: resize stream to 131072 bytes, drop 0 bytes)
flutter: log PlayerLog(prefix: ffmpeg, level: v, text: Mime-type: 'video/mp4')
flutter: log PlayerLog(prefix: ffmpeg, level: debug, text: Stream opened successfully.)
flutter: log PlayerLog(prefix: demux, level: v, text: Trying demuxers for level=normal.)
flutter: log PlayerLog(prefix: demux, level: debug, text: Trying demuxer: disc (force-level: normal))
flutter: log PlayerLog(prefix: demux, level: debug, text: Trying demuxer: edl (force-level: normal))
flutter: log PlayerLog(prefix: demux, level: debug, text: Trying demuxer: cue (force-level: normal))
flutter: log PlayerLog(prefix: demux, level: debug, text: Trying demuxer: rawaudio (force-level: normal))
flutter: log PlayerLog(prefix: demux, level: debug, text: Trying demuxer: rawvideo (force-level: normal))
flutter: log PlayerLog(prefix: demux, level: debug, text: Trying demuxer: mkv (force-level: normal))
flutter: log PlayerLog(prefix: demux, level: debug, text: Trying demuxer: lavf (force-level: normal))
flutter: log PlayerLog(prefix: lavf, level: v, text: Found 'mov,mp4,m4a,3gp,3g2,mj2' at score=100 size=2048.)
flutter: log PlayerLog(prefix: lavf, level: v, text: Could not set AVOption allowed_extensions='ALL')
flutter: log PlayerLog(prefix: demux, level: v, text: Detected file format: mov,mp4,m4a,3gp,3g2,mj2 (libavformat))
flutter: log PlayerLog(prefix: cplayer, level: v, text: Opening done: https://rr5---sn-nx5s7n76.googlevideo.com/videoplayback?expire=1716296976&ei=sEhMZo-aHcGxsfIPnOSvoA8&ip=35.81.83.91&id=o-ACGRKsvVKD1GfjFNypVATys6x3c-pGBvp0gS9YjOJiO1&itag=137&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=R5&mm=31%2C29&mn=sn-nx5s7n76%2Csn-nx57ynsk&ms=au%2Crdu&mv=u&mvi=5&pl=24&vprv=1&svpuc=1&mime=video%2Fmp4&rqh=1&gir=yes&clen=33011013&dur=87.099&lmt=1700269380092228&mt=1716274956&fvip=2&keepalive=yes&c=IOS&txp=6219224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRQIhANhpJVaE2QseWZlq29icPXD87gYceVYYS30g0cuudc_BAiByr84Ei7fNlzLS6vZ5ocKbFilpbLhGyohde9itgXTANw%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl&lsig=AHWaYeowRAIgO47m2DRu2QuC5MguL0nKV3wGFKtuKjU0tAlcsc2feLICIG3QW3-1nqj7hCjK9-mrTzLXLcNi0S62WxDOdceeoihz) (video url)
flutter: log PlayerLog(prefix: lavf, level: v, text: select track 0)
flutter: log PlayerLog(prefix: lavf, level: v, text: select track 0)
flutter: log PlayerLog(prefix: cplayer, level: info, text: (+) Video --vid=1 (*) (h264 1440x1080 30.000fps))
flutter: log PlayerLog(prefix: cplayer, level: info, text: (+) Audio --aid=1 --alang=auto (*) 'external' (aac 2ch 44100Hz) (external))
flutter: log PlayerLog(prefix: vd, level: v, text: Container reported FPS: 30.000000)
flutter: log PlayerLog(prefix: vd, level: v, text: Codec list:)
flutter: log PlayerLog(prefix: vd, level: v, text: h264 - (null))
flutter: log PlayerLog(prefix: vd, level: v, text: Opening decoder h264)
flutter: log PlayerLog(prefix: vd, level: v, text: Looking at hwdec h264-videotoolbox...)
flutter: log PlayerLog(prefix: vd, level: v, text: Trying hardware decoding via h264-videotoolbox.)
flutter: log PlayerLog(prefix: vd, level: v, text: Selected codec: h264 ((null)))
flutter: log PlayerLog(prefix: vf, level: v, text: User filter list:)
flutter: log PlayerLog(prefix: vf, level: v, text: (empty))
flutter: log PlayerLog(prefix: ad, level: v, text: Codec list:)
flutter: log PlayerLog(prefix: ad, level: v, text: aac - (null))
flutter: log PlayerLog(prefix: ad, level: v, text: aac_fixed (aac) - (null))
flutter: log PlayerLog(prefix: ad, level: v, text: aac_at (aac) - (null))
flutter: log PlayerLog(prefix: ad, level: v, text: Opening decoder aac)
flutter: log PlayerLog(prefix: ad, level: v, text: Requesting 1 threads for decoding.)
flutter: log PlayerLog(prefix: ad, level: v, text: Selected codec: aac ((null)))
flutter: log PlayerLog(prefix: af, level: v, text: User filter list:)
flutter: log PlayerLog(prefix: af, level: v, text: (empty))
flutter: log PlayerLog(prefix: cplayer, level: v, text: Starting playback...)
flutter: log PlayerLog(prefix: lavf, level: debug, text: stream 0: resize index to 128)
flutter: log PlayerLog(prefix: af, level: v, text: [in] 44100Hz stereo 2ch floatp)
flutter: log PlayerLog(prefix: af, level: v, text: [userspeed] 44100Hz stereo 2ch floatp)
flutter: log PlayerLog(prefix: af, level: v, text: [userspeed] (disabled))
flutter: log PlayerLog(prefix: af, level: v, text: [convert] 44100Hz stereo 2ch floatp)
flutter: log PlayerLog(prefix: ao, level: v, text: Trying audio driver 'audiounit')
flutter: log PlayerLog(prefix: ao/audiounit, level: v, text: requested format: 44100 Hz, stereo channels, floatp)
flutter: log PlayerLog(prefix: ao/audiounit, level: v, text: max channels: 1, requested: 2)
flutter: log PlayerLog(prefix: ao/audiounit, level: v, text: AU channel layout tag: 0 (0))
flutter: log PlayerLog(prefix: ao/audiounit, level: v, text: channel map: 0: 42)
flutter: log PlayerLog(prefix: ao/audiounit, level: v, text: using stereo output)
flutter: log PlayerLog(prefix: ao/audiounit, level: v, text: using soft-buffer of 8820 samples.)
flutter: log PlayerLog(prefix: cplayer, level: info, text: AO: [audiounit] 44100Hz stereo 2ch floatp)
flutter: log PlayerLog(prefix: cplayer, level: v, text: AO: Description: AudioUnit (iOS))
flutter: log PlayerLog(prefix: af, level: v, text: [convert] (disabled))
flutter: log PlayerLog(prefix: af, level: v, text: [out] 44100Hz stereo 2ch floatp)
flutter: log PlayerLog(prefix: vd, level: v, text: Pixel formats supported by decoder: videotoolbox_vld yuv420p)
flutter: log PlayerLog(prefix: vd, level: v, text: Codec profile: unknown (0x64))
flutter: log PlayerLog(prefix: vd, level: v, text: Requesting pixfmt 'videotoolbox_vld' from decoder.)
flutter: log PlayerLog(prefix: vd, level: info, text: Using hardware decoding (videotoolbox).)
flutter: log PlayerLog(prefix: vd, level: v, text: Decoder format: 1440x1080 videotoolbox[nv12] bt.709/bt.709/bt.1886/limited/auto CL=mpeg2/4/h264)
flutter: log PlayerLog(prefix: vf, level: v, text: [in] 1440x1080 videotoolbox[nv12] bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264)
flutter: log PlayerLog(prefix: vf, level: v, text: [userdeint] 1440x1080 videotoolbox[nv12] bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264)
flutter: log PlayerLog(prefix: vf, level: v, text: [userdeint] (disabled))
flutter: log PlayerLog(prefix: vf, level: v, text: [autorotate] 1440x1080 videotoolbox[nv12] bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264)
flutter: log PlayerLog(prefix: vf, level: v, text: [autorotate] (disabled))
flutter: log PlayerLog(prefix: vf, level: v, text: [convert] 1440x1080 videotoolbox[nv12] bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264)
flutter: log PlayerLog(prefix: vf, level: v, text: [convert] (disabled))
flutter: log PlayerLog(prefix: vf, level: v, text: [out] 1440x1080 videotoolbox[nv12] bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264)
flutter: log PlayerLog(prefix: cplayer, level: info, text: VO: [libmpv] 1440x1080 videotoolbox[nv12])
flutter: log PlayerLog(prefix: cplayer, level: v, text: VO: Description: render API for libmpv)
flutter: log PlayerLog(prefix: vo/libmpv, level: v, text: reconfig to 1440x1080 videotoolbox[nv12] bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264)
flutter: log PlayerLog(prefix: lavf, level: debug, text: stream 0: resize index to 128)
flutter: log PlayerLog(prefix: vo/libmpv, level: v, text: mpv_render_context_render() not being called or stuck.)
flutter: log PlayerLog(prefix: cplayer, level: v, text: first video frame after restart shown)
flutter: log PlayerLog(prefix: cplayer, level: v, text: audio ready)
flutter: log PlayerLog(prefix: cplayer, level: debug, text: starting video playback)
flutter: log PlayerLog(prefix: cplayer, level: v, text: starting audio playback)
flutter: log PlayerLog(prefix: vo/libmpv, level: v, text: mpv_render_context_render() not being called or stuck.)
flutter: VideoOutput.Resize
flutter: {id: 3, handle: 4949294128, rect: {width: 1440.0, top: 0.0, left: 0.0, height: 1080.0}}
flutter: log PlayerLog(prefix: cplayer, level: v, text: playback restart complete @ 0.000000, audio=playing, video=playing)
flutter: log PlayerLog(prefix: libmpv_render, level: v, text: Window size: 1440x1080 (Borders: l=0 t=0 r=0 b=0))
flutter: log PlayerLog(prefix: libmpv_render, level: v, text: Video source: 1440x1080 (1:1))
flutter: log PlayerLog(prefix: libmpv_render, level: v, text: Video display: (0, 0) 1440x1080 -> (0, 0) 1440x1080)
flutter: log PlayerLog(prefix: libmpv_render, level: v, text: Video scale: 1.000000/1.000000)
flutter: log PlayerLog(prefix: libmpv_render, level: v, text: OSD borders: l=0 t=0 r=0 b=0)
flutter: log PlayerLog(prefix: libmpv_render, level: v, text: Video borders: l=0 t=0 r=0 b=0)
flutter: log PlayerLog(prefix: libmpv_render, level: v, text: Testing FBO format rgba16f)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: Resizing texture: 16x16)
flutter: log PlayerLog(prefix: libmpv_render, level: v, text: Using FBO format rgba16f.)
flutter: log PlayerLog(prefix: libmpv_render, level: v, text: No advanced processing required. Enabling dumb mode.)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: vertex shader source:)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [  1] #version 300 es)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [  2] #ifdef GL_FRAGMENT_PRECISION_HIGH)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [  3] precision highp float;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [  4] #else)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [  5] precision mediump float;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [  6] #endif)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [  7] precision mediump sampler2D;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [  8] precision mediump sampler3D;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [  9] #define tex1D texture)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 10] #define tex3D texture)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 11] #define LUT_POS(x, lut_size) mix(0.5 / (lut_size), 1.0 - 0.5 / (lut_size), (x)))
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 12] in vec2 vertex_position;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 13] in vec2 vertex_texcoord0;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 14] out vec2 texcoord0;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 15] in vec2 vertex_texcoord1;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 16] out vec2 texcoord1;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 17] void main() {)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 18] gl_Position = vec4(vertex_position, 1.0, 1.0);)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 19] texcoord0 = vertex_texcoord0;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 20] texcoord1 = vertex_texcoord1;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 21] })
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: fragment shader source:)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [  1] #version 300 es)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [  2] #ifdef GL_FRAGMENT_PRECISION_HIGH)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [  3] precision highp float;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [  4] #else)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [  5] precision mediump float;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [  6] #endif)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [  7] precision mediump sampler2D;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [  8] precision mediump sampler3D;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [  9] #define tex1D texture)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 10] #define tex3D texture)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 11] #define LUT_POS(x, lut_size) mix(0.5 / (lut_size), 1.0 - 0.5 / (lut_size), (x)))
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 12] out vec4 out_color;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 13] in vec2 texcoord0;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 14] in vec2 texcoord1;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 15] uniform mat3 colormatrix;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 16] uniform vec3 colormatrix_c;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 17] uniform vec3 src_luma;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 18] uniform vec3 dst_luma;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 19] uniform sampler2D texture0;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 20] uniform vec2 texture_size0;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 21] uniform mat2 texture_rot0;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 22] uniform vec2 texture_off0;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 23] uniform vec2 pixel_size0;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 24] uniform sampler2D texture1;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 25] uniform vec2 texture_size1;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 26] uniform mat2 texture_rot1;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 27] uniform vec2 texture_off1;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 28] uniform vec2 pixel_size1;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 29] void main() {)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 30] vec4 color = vec4(0.0, 0.0, 0.0, 1.0);)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 31] color.r = 1.000000 * vec4(texture(texture0, texcoord0)).r;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 32] color.gb = 1.000000 * vec4(texture(texture1, texcoord1)).ra;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 33] color = color.rgbr;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 34] color.rgb = mat3(colormatrix) * color.rgb + colormatrix_c;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 35] color.a = 1.0;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 36] // color mapping)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 37] color.rgb *= vec3(1.000000);)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 38] color.rgb *= vec3(1.000000);)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 39] out_color = color;)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: [ 40] })
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: shader link log (status=1):)
flutter: log PlayerLog(prefix: lavf, level: v, text: EOF reached.)
flutter: media_kit: wakelock: _count = 0

The first play is normal, but after I unsetmedia and setmedia using my provider, the audio doesn't play (I tried pause instead of stop but doesn't work) When I call unsetmedia() there seems to be no logs, here's the logs when I play setmedia() again (on a new video and audio)

flutter: log PlayerLog(prefix: cplayer, level: debug, text: Run command: stop, flags=73, args=[flags=""])
flutter: media_kit: wakelock: _count = 1
flutter: log PlayerLog(prefix: cplayer, level: debug, text: Run command: playlist-clear, flags=73, args=[])
flutter: log PlayerLog(prefix: cplayer, level: debug, text: Run command: playlist-play-index, flags=73, args=[index="none"])
flutter: log PlayerLog(prefix: cplayer, level: debug, text: Run command: loadfile, flags=64, args=[url="https://rr2---sn-nx57ynsz.googlevideo.com/videoplayback?expire=1716296978&ei=sUhMZrLPOv66sfIP97qqmA8&ip=35.81.83.91&id=o-AJL54W3GfWDtFGAxoo9J5-a-hwDLnV3s89AQphU6qdIV&itag=299&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=F5&mm=31%2C29&mn=sn-nx57ynsz%2Csn-nx5s7n7d&ms=au%2Crdu&mv=u&mvi=2&pl=24&vprv=1&svpuc=1&mime=video%2Fmp4&rqh=1&gir=yes&clen=19571448&dur=39.883&lmt=1700227591904705&mt=1716274956&fvip=1&keepalive=yes&c=IOS&txp=6219224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRAIgaW7rhmfoBQX7lnCIx1IJkwdUUJ2y7Hiz-KZnDx5sbwMCIGD633MLqneGCUIMKydvjPrVcdymUWAfeVb2BxgnNcqr&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl&lsig=AHWaYeowRQIhAIYKudFfrayKmww5cpfUbpTazjsUy6LrRqClG5Ca0dVlAiAFnvx8Z9cCNjTUPBZmnUYkdvfB31-fGHGok2kZdAoV3g%3D%3D", flags="append", options=""])
flutter: log PlayerLog(prefix: cplayer, level: debug, text: Run command: cycle, flags=73, args=[name="pause", value="1.000000"])
flutter: log PlayerLog(prefix: cplayer, level: v, text: Set property: pause -> 1)
flutter: log PlayerLog(prefix: cplayer, level: v, text: Set property: playlist-pos=0 -> 1)
flutter: log PlayerLog(prefix: cplayer, level: v, text: EOF code: 3)
flutter: log PlayerLog(prefix: cplayer, level: v, text: Running hook: main/on_unload)
flutter: log PlayerLog(prefix: cplayer, level: info, text: Track switched:)
flutter: log PlayerLog(prefix: cplayer, level: info, text: (+) Video --vid=1 (*) (h264 1440x1080 30.000fps))
flutter: log PlayerLog(prefix: cplayer, level: info, text: (+) Audio --aid=1 --alang=auto (*) 'external' (aac 2ch 44100Hz) (external))
flutter: log PlayerLog(prefix: cplayer, level: v, text: Set property: aid="auto" -> 1)
flutter: log PlayerLog(prefix: cplayer, level: debug, text: Run command: audio-add, flags=64, args=[url="https://rr2---sn-nx57ynsz.googlevideo.com/videoplayback?expire=1716296978&ei=sUhMZrLPOv66sfIP97qqmA8&ip=35.81.83.91&id=o-AJL54W3GfWDtFGAxoo9J5-a-hwDLnV3s89AQphU6qdIV&itag=140&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=F5&mm=31%2C29&mn=sn-nx57ynsz%2Csn-nx5s7n7d&ms=au%2Crdu&mv=u&mvi=2&pl=24&vprv=1&svpuc=1&mime=audio%2Fmp4&rqh=1&gir=yes&clen=647356&dur=39.938&lmt=1700227631065984&mt=1716274956&fvip=1&keepalive=yes&c=IOS&txp=6218224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRgIhAIkwSARsoILbV1V3MB3vecb9Lkf76NAhD4npl7tNrhN2AiEA1malogxrmV-UwgS_0UcrxRkIMSKQjN-iS6-8ZtKUFQw%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl&lsig=AHWaYeowRQIhAIYKudFfrayKmww5cpfUbpTazjsUy6LrRqClG5Ca0dVlAiAFnvx8Z9cCNjTUPBZmnUYkdvfB31-fGHGok2kZdAoV3g%3D%3D", flags="select", title="external", lang="auto"]) (audio url)
flutter: log PlayerLog(prefix: cplayer, level: v, text: Set property: http-header-fields=null -> -2)
flutter: log PlayerLog(prefix: ad, level: debug, text: Uninit decoder.)
flutter: log PlayerLog(prefix: vd, level: debug, text: Uninit decoder.)
flutter: log PlayerLog(prefix: cplayer, level: v, text: finished playback, success (reason 2))
flutter: log PlayerLog(prefix: cplayer, level: info, text: )
flutter: log PlayerLog(prefix: global, level: debug, text: state path: 'watch_later' -> '-')
flutter: log PlayerLog(prefix: cplayer, level: v, text: Running hook: main/on_load)
flutter: log PlayerLog(prefix: ffmpeg, level: v, text: Opening https://rr2---sn-nx57ynsz.googlevideo.com/videoplayback?expire=1716296978&ei=sUhMZrLPOv66sfIP97qqmA8&ip=35.81.83.91&id=o-AJL54W3GfWDtFGAxoo9J5-a-hwDLnV3s89AQphU6qdIV&itag=299&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=F5&mm=31%2C29&mn=sn-nx57ynsz%2Csn-nx5s7n7d&ms=au%2Crdu&mv=u&mvi=2&pl=24&vprv=1&svpuc=1&mime=video%2Fmp4&rqh=1&gir=yes&clen=19571448&dur=39.883&lmt=1700227591904705&mt=1716274956&fvip=1&keepalive=yes&c=IOS&txp=6219224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRAIgaW7rhmfoBQX7lnCIx1IJkwdUUJ2y7Hiz-KZnDx5sbwMCIGD633MLqneGCUIMKydvjPrVcdymUWAfeVb2BxgnNcqr&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl&lsig=AHWaYeowRQIhAIYKudFfrayKmww5cpfUbpTazjsUy6LrRqClG5Ca0dVlAiAFnvx8Z9cCNjTUPBZmnUYkdvfB31-fGHGok2kZdAoV3g%3D%3D) (video url)
flutter: log PlayerLog(prefix: vo/libmpv, level: v, text: mpv_render_context_render() not being called or stuck.)
flutter: log PlayerLog(prefix: ffmpeg, level: debug, text: resize stream to 131072 bytes, drop 0 bytes)
flutter: log PlayerLog(prefix: ffmpeg, level: v, text: Mime-type: 'video/mp4')
flutter: log PlayerLog(prefix: ffmpeg, level: debug, text: Stream opened successfully.)
flutter: log PlayerLog(prefix: demux, level: v, text: Trying demuxers for level=normal.)
flutter: log PlayerLog(prefix: demux, level: debug, text: Trying demuxer: disc (force-level: normal))
flutter: log PlayerLog(prefix: demux, level: debug, text: Trying demuxer: edl (force-level: normal))
flutter: log PlayerLog(prefix: demux, level: debug, text: Trying demuxer: cue (force-level: normal))
flutter: log PlayerLog(prefix: demux, level: debug, text: Trying demuxer: rawaudio (force-level: normal))
flutter: log PlayerLog(prefix: demux, level: debug, text: Trying demuxer: rawvideo (force-level: normal))
flutter: log PlayerLog(prefix: demux, level: debug, text: Trying demuxer: mkv (force-level: normal))
flutter: log PlayerLog(prefix: demux, level: debug, text: Trying demuxer: lavf (force-level: normal))
flutter: log PlayerLog(prefix: lavf, level: v, text: Found 'mov,mp4,m4a,3gp,3g2,mj2' at score=100 size=2048.)
flutter: log PlayerLog(prefix: lavf, level: v, text: Could not set AVOption allowed_extensions='ALL')
flutter: log PlayerLog(prefix: demux, level: v, text: Detected file format: mov,mp4,m4a,3gp,3g2,mj2 (libavformat))
flutter: log PlayerLog(prefix: cplayer, level: v, text: Opening done: https://rr2---sn-nx57ynsz.googlevideo.com/videoplayback?expire=1716296978&ei=sUhMZrLPOv66sfIP97qqmA8&ip=35.81.83.91&id=o-AJL54W3GfWDtFGAxoo9J5-a-hwDLnV3s89AQphU6qdIV&itag=299&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=F5&mm=31%2C29&mn=sn-nx57ynsz%2Csn-nx5s7n7d&ms=au%2Crdu&mv=u&mvi=2&pl=24&vprv=1&svpuc=1&mime=video%2Fmp4&rqh=1&gir=yes&clen=19571448&dur=39.883&lmt=1700227591904705&mt=1716274956&fvip=1&keepalive=yes&c=IOS&txp=6219224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRAIgaW7rhmfoBQX7lnCIx1IJkwdUUJ2y7Hiz-KZnDx5sbwMCIGD633MLqneGCUIMKydvjPrVcdymUWAfeVb2BxgnNcqr&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl&lsig=AHWaYeowRQIhAIYKudFfrayKmww5cpfUbpTazjsUy6LrRqClG5Ca0dVlAiAFnvx8Z9cCNjTUPBZmnUYkdvfB31-fGHGok2kZdAoV3g%3D%3D) (video url)
flutter: log PlayerLog(prefix: lavf, level: v, text: select track 0)
flutter: log PlayerLog(prefix: cplayer, level: info, text: (+) Video --vid=1 (*) (h264 1920x810 60.000fps))
flutter: log PlayerLog(prefix: vd, level: v, text: Container reported FPS: 60.000000)
flutter: log PlayerLog(prefix: vd, level: v, text: Codec list:)
flutter: log PlayerLog(prefix: vd, level: v, text: h264 - (null))
flutter: log PlayerLog(prefix: vd, level: v, text: Opening decoder h264)
flutter: log PlayerLog(prefix: vd, level: v, text: Looking at hwdec h264-videotoolbox...)
flutter: log PlayerLog(prefix: vd, level: v, text: Trying hardware decoding via h264-videotoolbox.)
flutter: log PlayerLog(prefix: vd, level: v, text: Selected codec: h264 ((null)))
flutter: log PlayerLog(prefix: vf, level: v, text: User filter list:)
flutter: log PlayerLog(prefix: vf, level: v, text: (empty))
flutter: log PlayerLog(prefix: cplayer, level: v, text: Starting playback...)
flutter: log PlayerLog(prefix: vd, level: v, text: Pixel formats supported by decoder: videotoolbox_vld yuv420p)
flutter: log PlayerLog(prefix: vd, level: v, text: Codec profile: unknown (0x64))
flutter: log PlayerLog(prefix: vd, level: v, text: Requesting pixfmt 'videotoolbox_vld' from decoder.)
flutter: log PlayerLog(prefix: vd, level: info, text: Using hardware decoding (videotoolbox).)
flutter: log PlayerLog(prefix: vd, level: v, text: Decoder format: 1920x810 videotoolbox[nv12] bt.709/bt.709/bt.1886/limited/auto CL=mpeg2/4/h264)
flutter: log PlayerLog(prefix: vf, level: v, text: [in] 1920x810 videotoolbox[nv12] bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264)
flutter: log PlayerLog(prefix: vo/libmpv, level: v, text: mpv_render_context_render() not being called or stuck.)
flutter: log PlayerLog(prefix: vf, level: v, text: [userdeint] 1920x810 videotoolbox[nv12] bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264)
flutter: log PlayerLog(prefix: vf, level: v, text: [userdeint] (disabled))
flutter: log PlayerLog(prefix: vf, level: v, text: [autorotate] 1920x810 videotoolbox[nv12] bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264)
flutter: log PlayerLog(prefix: vf, level: v, text: [autorotate] (disabled))
flutter: log PlayerLog(prefix: vf, level: v, text: [convert] 1920x810 videotoolbox[nv12] bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264)
flutter: log PlayerLog(prefix: vf, level: v, text: [convert] (disabled))
flutter: log PlayerLog(prefix: vf, level: v, text: [out] 1920x810 videotoolbox[nv12] bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264)
flutter: log PlayerLog(prefix: cplayer, level: info, text: VO: [libmpv] 1920x810 videotoolbox[nv12])
flutter: log PlayerLog(prefix: cplayer, level: v, text: VO: Description: render API for libmpv)
flutter: log PlayerLog(prefix: vo/libmpv, level: v, text: reconfig to 1920x810 videotoolbox[nv12] bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264)
flutter: log PlayerLog(prefix: vo/libmpv, level: v, text: mpv_render_context_render() not being called or stuck.)
flutter: log PlayerLog(prefix: cplayer, level: v, text: first video frame after restart shown)
flutter: log PlayerLog(prefix: cplayer, level: debug, text: starting video playback)
flutter: log PlayerLog(prefix: cplayer, level: v, text: playback restart complete @ 0.000000, audio=eof, video=playing)
flutter: VideoOutput.Resize
flutter: {handle: 4949294128, id: 3, rect: {top: 0.0, left: 0.0, height: 810.0, width: 1920.0}}
flutter: log PlayerLog(prefix: libmpv_render, level: v, text: Window size: 1920x810 (Borders: l=0 t=0 r=0 b=0))
flutter: log PlayerLog(prefix: libmpv_render, level: v, text: Video source: 1920x810 (1:1))
flutter: log PlayerLog(prefix: libmpv_render, level: v, text: Video display: (0, 0) 1920x810 -> (0, 0) 1920x810)
flutter: log PlayerLog(prefix: libmpv_render, level: v, text: Video scale: 1.000000/1.000000)
flutter: log PlayerLog(prefix: libmpv_render, level: v, text: OSD borders: l=0 t=0 r=0 b=0)
flutter: log PlayerLog(prefix: libmpv_render, level: v, text: Video borders: l=0 t=0 r=0 b=0)
flutter: log PlayerLog(prefix: libmpv_render, level: v, text: Testing FBO format rgba16f)
flutter: log PlayerLog(prefix: libmpv_render, level: debug, text: Resizing texture: 16x16)
flutter: log PlayerLog(prefix: libmpv_render, level: v, text: Using FBO format rgba16f.)
flutter: log PlayerLog(prefix: libmpv_render, level: v, text: No advanced processing required. Enabling dumb mode.)
flutter: log PlayerLog(prefix: lavf, level: debug, text: stream 0: resize index to 128)
flutter: media_kit: wakelock: _count = 0

This time, the audio doesn't play. I need to set audio because the video url does not contain audio and they need to go together. Edit: I correct the logs

abdelaziz-mahdy commented 1 week ago

Can you try without setting audio tracks everywhere?

Also do you play the same video? Or another one maybe the other video got no audio

Since I can't find the problem I am trying to reduce the commands that may lead to a problem

chymchym1905 commented 1 week ago

I edited my comment, I need to set audio because every video url does not contain audio. Im working with separate video and audio urls. Playing the same video result the same. Audio is gone I also edited in the logs which url is video which url is audio. They are all valid (for now)

abdelaziz-mahdy commented 1 week ago

Can you provide a simple reproducible code, with example urls, to check where is the main problem?

chymchym1905 commented 1 week ago
import 'package:flutter/material.dart';
import 'package:media_kit/media_kit.dart';
import 'package:media_kit_video/media_kit_video.dart';
void main() {
  MediaKit.ensureInitialized();
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});
  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;
  final player = Player();
  late final VideoController controller = VideoController(player);
  @override
  void initState() {
    player.open(Media('https://rr5---sn-nx5s7n76.googlevideo.com/videoplayback?expire=1716296976&ei=sEhMZo-aHcGxsfIPnOSvoA8&ip=35.81.83.91&id=o-ACGRKsvVKD1GfjFNypVATys6x3c-pGBvp0gS9YjOJiO1&itag=137&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=R5&mm=31%2C29&mn=sn-nx5s7n76%2Csn-nx57ynsk&ms=au%2Crdu&mv=u&mvi=5&pl=24&vprv=1&svpuc=1&mime=video%2Fmp4&rqh=1&gir=yes&clen=33011013&dur=87.099&lmt=1700269380092228&mt=1716274956&fvip=2&keepalive=yes&c=IOS&txp=6219224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRQIhANhpJVaE2QseWZlq29icPXD87gYceVYYS30g0cuudc_BAiByr84Ei7fNlzLS6vZ5ocKbFilpbLhGyohde9itgXTANw%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl&lsig=AHWaYeowRAIgO47m2DRu2QuC5MguL0nKV3wGFKtuKjU0tAlcsc2feLICIG3QW3-1nqj7hCjK9-mrTzLXLcNi0S62WxDOdceeoihz'));
    player.setAudioTrack(AudioTrack.uri('https://rr5---sn-nx5s7n76.googlevideo.com/videoplayback?expire=1716296976&ei=sEhMZo-aHcGxsfIPnOSvoA8&ip=35.81.83.91&id=o-ACGRKsvVKD1GfjFNypVATys6x3c-pGBvp0gS9YjOJiO1&itag=140&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=R5&mm=31%2C29&mn=sn-nx5s7n76%2Csn-nx57ynsk&ms=au%2Crdu&mv=u&mvi=5&pl=24&vprv=1&svpuc=1&mime=audio%2Fmp4&rqh=1&gir=yes&clen=1411526&dur=87.167&lmt=1700269375586545&mt=1716274956&fvip=2&keepalive=yes&c=IOS&txp=6218224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRQIgDrdlyFKjooMfo4ahvouCuvn0qSd4i3Uo8wQf2MW-oMACIQCNGUywPk8ZA-ZkA7ogwng8DmczDR53nww17dKeRkO5qQ%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl&lsig=AHWaYeowRAIgO47m2DRu2QuC5MguL0nKV3wGFKtuKjU0tAlcsc2feLICIG3QW3-1nqj7hCjK9-mrTzLXLcNi0S62WxDOdceeoihz'));
    super.initState();
  }

  void _incrementCounter() {
    setState(() {

    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Video(controller: controller, width: MediaQuery.of(context).size.width, height: 200, fit: BoxFit.fitWidth,),
            TextButton(onPressed: (){
              player.open(Media('https://rr2---sn-nx57ynsz.googlevideo.com/videoplayback?expire=1716296978&ei=sUhMZrLPOv66sfIP97qqmA8&ip=35.81.83.91&id=o-AJL54W3GfWDtFGAxoo9J5-a-hwDLnV3s89AQphU6qdIV&itag=299&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=F5&mm=31%2C29&mn=sn-nx57ynsz%2Csn-nx5s7n7d&ms=au%2Crdu&mv=u&mvi=2&pl=24&vprv=1&svpuc=1&mime=video%2Fmp4&rqh=1&gir=yes&clen=19571448&dur=39.883&lmt=1700227591904705&mt=1716274956&fvip=1&keepalive=yes&c=IOS&txp=6219224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRAIgaW7rhmfoBQX7lnCIx1IJkwdUUJ2y7Hiz-KZnDx5sbwMCIGD633MLqneGCUIMKydvjPrVcdymUWAfeVb2BxgnNcqr&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl&lsig=AHWaYeowRQIhAIYKudFfrayKmww5cpfUbpTazjsUy6LrRqClG5Ca0dVlAiAFnvx8Z9cCNjTUPBZmnUYkdvfB31-fGHGok2kZdAoV3g%3D%3D'));
              player.setAudioTrack(AudioTrack.uri('https://rr2---sn-nx57ynsz.googlevideo.com/videoplayback?expire=1716296978&ei=sUhMZrLPOv66sfIP97qqmA8&ip=35.81.83.91&id=o-AJL54W3GfWDtFGAxoo9J5-a-hwDLnV3s89AQphU6qdIV&itag=140&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=F5&mm=31%2C29&mn=sn-nx57ynsz%2Csn-nx5s7n7d&ms=au%2Crdu&mv=u&mvi=2&pl=24&vprv=1&svpuc=1&mime=audio%2Fmp4&rqh=1&gir=yes&clen=647356&dur=39.938&lmt=1700227631065984&mt=1716274956&fvip=1&keepalive=yes&c=IOS&txp=6218224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRgIhAIkwSARsoILbV1V3MB3vecb9Lkf76NAhD4npl7tNrhN2AiEA1malogxrmV-UwgS_0UcrxRkIMSKQjN-iS6-8ZtKUFQw%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl&lsig=AHWaYeowRQIhAIYKudFfrayKmww5cpfUbpTazjsUy6LrRqClG5Ca0dVlAiAFnvx8Z9cCNjTUPBZmnUYkdvfB31-fGHGok2kZdAoV3g%3D%3D'));
            }, child: Text('Change video')),
            TextButton(onPressed: (){
              player.stop();
            }, child: Text('Stop video'))
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add))
    );
  }
}

Okay... Im not sure what's happening, when i do this it's completely functional...

chymchym1905 commented 1 week ago

I even replicate it with riverpod but it seems to work fine.. Maybe the problem is me

chymchym1905 commented 1 week ago

I just found the problem, it's just a very specific case with my code, I will close the issue, Thanks for your time @abdelaziz-mahdy

abdelaziz-mahdy commented 1 week ago

glad to i was able to help

chymchym1905 commented 1 week ago

Sorry, I will open again. This problem is there. Please have a look at this code provider.dart

import 'package:flutter/material.dart';
import 'package:media_kit/media_kit.dart';
import 'package:flutter/services.dart';
import 'package:media_kit_video/media_kit_video.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

final videoProvider = StateNotifierProvider<VideoStateNotifier, VideoUtilsControl>((ref) {
  final GlobalKey<VideoState> key = GlobalKey<VideoState>();
  return VideoStateNotifier(key);
});

class VideoItem{
  final String video;
  final String audio;
  VideoItem(this.video, this.audio);
}

class VideoStateNotifier extends StateNotifier<VideoUtilsControl> {
  GlobalKey<VideoState> key;
  VideoStateNotifier(this.key)
      : super(VideoUtilsControl(
            Video(
              key: key,
              controller: VideoController(Player(configuration: PlayerConfiguration(logLevel: MPVLogLevel.debug))),
              fit: BoxFit.fitWidth,
              onEnterFullscreen: () async {
                await SystemChrome.setPreferredOrientations(
                    [DeviceOrientation.landscapeLeft, DeviceOrientation.landscapeRight]);
              },
              onExitFullscreen: () async {
                await SystemChrome.setPreferredOrientations(
                    [DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]);
                await SystemChrome.setPreferredOrientations(DeviceOrientation.values);
              },
            ),
            key));
  bool get isFullscreen {
    if (state.vidstate.currentState != null) {
      return state.vidstate.currentState!.isFullscreen();
    }
    return false;
  }

  Video get video => state.vid;

  void setmedia(VideoItem item) async {
    await state.vid.controller.player.open(Media(item.video));
    await state.vid.controller.player.setAudioTrack(AudioTrack.uri(item.audio));
  }

  void unsetmedia() async {
    await state.vid.controller.player.pause();
  }

  void enterFullscreen() async {
    if (state.vidstate.currentState != null) {
      await state.vidstate.currentState!.enterFullscreen();
    }
  }

  void exitFullscreen() async {
    if (state.vidstate.currentState != null) {
      await state.vidstate.currentState!.exitFullscreen();
    }
  }
}

class VideoUtilsControl {
  Video vid;
  GlobalKey<VideoState> vidstate;
  VideoUtilsControl(
    this.vid,
    this.vidstate,
  );
}

main.dart

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:media_kit/media_kit.dart';
import 'package:media_kit_video/media_kit_video.dart';
import 'provider.dart';

const vid1 = 'https://rr5---sn-nx5s7n76.googlevideo.com/videoplayback?expire=1716296976&ei=sEhMZo-aHcGxsfIPnOSvoA8&ip=35.81.83.91&id=o-ACGRKsvVKD1GfjFNypVATys6x3c-pGBvp0gS9YjOJiO1&itag=137&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=R5&mm=31%2C29&mn=sn-nx5s7n76%2Csn-nx57ynsk&ms=au%2Crdu&mv=u&mvi=5&pl=24&vprv=1&svpuc=1&mime=video%2Fmp4&rqh=1&gir=yes&clen=33011013&dur=87.099&lmt=1700269380092228&mt=1716274956&fvip=2&keepalive=yes&c=IOS&txp=6219224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRQIhANhpJVaE2QseWZlq29icPXD87gYceVYYS30g0cuudc_BAiByr84Ei7fNlzLS6vZ5ocKbFilpbLhGyohde9itgXTANw%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl&lsig=AHWaYeowRAIgO47m2DRu2QuC5MguL0nKV3wGFKtuKjU0tAlcsc2feLICIG3QW3-1nqj7hCjK9-mrTzLXLcNi0S62WxDOdceeoihz';
const vid2 = 'https://rr2---sn-nx57ynsz.googlevideo.com/videoplayback?expire=1716296978&ei=sUhMZrLPOv66sfIP97qqmA8&ip=35.81.83.91&id=o-AJL54W3GfWDtFGAxoo9J5-a-hwDLnV3s89AQphU6qdIV&itag=299&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=F5&mm=31%2C29&mn=sn-nx57ynsz%2Csn-nx5s7n7d&ms=au%2Crdu&mv=u&mvi=2&pl=24&vprv=1&svpuc=1&mime=video%2Fmp4&rqh=1&gir=yes&clen=19571448&dur=39.883&lmt=1700227591904705&mt=1716274956&fvip=1&keepalive=yes&c=IOS&txp=6219224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRAIgaW7rhmfoBQX7lnCIx1IJkwdUUJ2y7Hiz-KZnDx5sbwMCIGD633MLqneGCUIMKydvjPrVcdymUWAfeVb2BxgnNcqr&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl&lsig=AHWaYeowRQIhAIYKudFfrayKmww5cpfUbpTazjsUy6LrRqClG5Ca0dVlAiAFnvx8Z9cCNjTUPBZmnUYkdvfB31-fGHGok2kZdAoV3g%3D%3D';
const audio1 = 'https://rr5---sn-nx5s7n76.googlevideo.com/videoplayback?expire=1716296976&ei=sEhMZo-aHcGxsfIPnOSvoA8&ip=35.81.83.91&id=o-ACGRKsvVKD1GfjFNypVATys6x3c-pGBvp0gS9YjOJiO1&itag=140&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=R5&mm=31%2C29&mn=sn-nx5s7n76%2Csn-nx57ynsk&ms=au%2Crdu&mv=u&mvi=5&pl=24&vprv=1&svpuc=1&mime=audio%2Fmp4&rqh=1&gir=yes&clen=1411526&dur=87.167&lmt=1700269375586545&mt=1716274956&fvip=2&keepalive=yes&c=IOS&txp=6218224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRQIgDrdlyFKjooMfo4ahvouCuvn0qSd4i3Uo8wQf2MW-oMACIQCNGUywPk8ZA-ZkA7ogwng8DmczDR53nww17dKeRkO5qQ%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl&lsig=AHWaYeowRAIgO47m2DRu2QuC5MguL0nKV3wGFKtuKjU0tAlcsc2feLICIG3QW3-1nqj7hCjK9-mrTzLXLcNi0S62WxDOdceeoihz';
const audio2 = 'https://rr2---sn-nx57ynsz.googlevideo.com/videoplayback?expire=1716296978&ei=sUhMZrLPOv66sfIP97qqmA8&ip=35.81.83.91&id=o-AJL54W3GfWDtFGAxoo9J5-a-hwDLnV3s89AQphU6qdIV&itag=140&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&mh=F5&mm=31%2C29&mn=sn-nx57ynsz%2Csn-nx5s7n7d&ms=au%2Crdu&mv=u&mvi=2&pl=24&vprv=1&svpuc=1&mime=audio%2Fmp4&rqh=1&gir=yes&clen=647356&dur=39.938&lmt=1700227631065984&mt=1716274956&fvip=1&keepalive=yes&c=IOS&txp=6218224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cvprv%2Csvpuc%2Cmime%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRgIhAIkwSARsoILbV1V3MB3vecb9Lkf76NAhD4npl7tNrhN2AiEA1malogxrmV-UwgS_0UcrxRkIMSKQjN-iS6-8ZtKUFQw%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl&lsig=AHWaYeowRQIhAIYKudFfrayKmww5cpfUbpTazjsUy6LrRqClG5Ca0dVlAiAFnvx8Z9cCNjTUPBZmnUYkdvfB31-fGHGok2kZdAoV3g%3D%3D';
void main() {
  MediaKit.ensureInitialized();
  runApp(const ProviderScope(child: MyApp()));
  // runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

// class MyHomePage extends StatefulWidget {
//   const MyHomePage({super.key, required this.title});
//   final String title;

//   @override
//   State<MyHomePage> createState() => _MyHomePageState();
// }

// class _MyHomePageState extends State<MyHomePage> {
//   final player = Player();
//   late final VideoController controller = VideoController(player);
//   @override
//   void initState() {
//     player.open(Media(vid1));
//     player.setAudioTrack(AudioTrack.uri(audio1));
//     // ref.read(videoProvider).vid.controller.player.open(Media(vid1));
//     // ref.read(videoProvider).vid.controller.player.setAudioTrack(AudioTrack.uri(audio1));
//     super.initState();
//   }

//   @override
//   Widget build(BuildContext context) {
//     return Scaffold(
//       appBar: AppBar(
//         backgroundColor: Theme.of(context).colorScheme.inversePrimary,
//         title: Text(widget.title),
//       ),
//       body: Center(
//         child: Column(
//           mainAxisAlignment: MainAxisAlignment.center,
//           children: <Widget>[
//             Video(controller: controller, width: MediaQuery.of(context).size.width, height: 200, fit: BoxFit.fitWidth,),
//             TextButton(onPressed: (){
//               player.open(Media(vid1));
//               player.setAudioTrack(AudioTrack.uri(audio1));
//               // ref.read(videoProvider).vid.controller.player.open(Media(vid1));
//               // ref.read(videoProvider).vid.controller.player.setAudioTrack(AudioTrack.uri(audio1));
//             }, child: Text('Video1')),
//             TextButton(onPressed: (){
//               player.open(Media(vid2));
//               player.setAudioTrack(AudioTrack.uri(audio2));
//               // ref.read(videoProvider).vid.controller.player.open(Media(vid2));
//               // ref.read(videoProvider).vid.controller.player.setAudioTrack(AudioTrack.uri(audio2));
//             }, child: Text('Video2')),
//             TextButton(onPressed: (){
//               player.stop();
//               // ref.read(videoProvider).vid.controller.player.stop();
//             }, child: Text('Stop video'))
//           ],
//         ),
//       )
//     );
//   }
// }

class MyHomePage extends ConsumerStatefulWidget {
  const MyHomePage({super.key, required this.title});
  final String title;

  @override
  ConsumerState<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends ConsumerState<MyHomePage> {
  @override
  void initState() {
    ref.read(videoProvider).vid.controller.player.open(Media(vid1));
    ref.read(videoProvider).vid.controller.player.setAudioTrack(AudioTrack.uri(audio1));
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Video(controller: ref.read(videoProvider).vid.controller, width: MediaQuery.of(context).size.width, height: 200, fit: BoxFit.fitWidth,),
            TextButton(onPressed: (){
              ref.read(videoProvider).vid.controller.player.open(Media(vid1));
              ref.read(videoProvider).vid.controller.player.setAudioTrack(AudioTrack.uri(audio1));
            }, child: Text('Video1')),
            TextButton(onPressed: (){
              ref.read(videoProvider).vid.controller.player.open(Media(vid2));
              ref.read(videoProvider).vid.controller.player.setAudioTrack(AudioTrack.uri(audio2));
            }, child: Text('Video2')),
            TextButton(onPressed: (){
              ref.read(videoProvider).vid.controller.player.stop();
            }, child: Text('Stop video'))
          ],
        ),
      )
    );
  }
}

You can try to switch between these 2 videos, this should be able to replicate the issue. Seems to appear with Provider and no Provider. Edit: I haven't tested on Android and right now I only have a physical IPhone device

abdelaziz-mahdy commented 1 week ago

i cant test your code since i dont have access for your urls, and since the sample example works i guess a different way to handle the player should be better

this part can be changed

  VideoStateNotifier(this.key)
      : super(VideoUtilsControl(
            Video(
              key: key,
              controller: VideoController(Player(configuration: PlayerConfiguration(logLevel: MPVLogLevel.debug))),
              fit: BoxFit.fitWidth,
              onEnterFullscreen: () async {
                await SystemChrome.setPreferredOrientations(
                    [DeviceOrientation.landscapeLeft, DeviceOrientation.landscapeRight]);
              },
              onExitFullscreen: () async {
                await SystemChrome.setPreferredOrientations(
                    [DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]);
                await SystemChrome.setPreferredOrientations(DeviceOrientation.values);
              },
            ),
            key));

also the video widget should be returned as a widget, and the provider just keeps the reference for player and controller if you want

since the widget in your way it will never be disposed, and it may be the cause of this issue

chymchym1905 commented 1 week ago

I tried follow your suggestions and dispose/create a new player everytime i play a video. I can play audio normally this way now, thank you.