[FIXED] So legen Sie ein Limit für das Laden beim Abspielen von Videos fest. Ich verwende das Better Player Flutter-Plugin

Ausgabe

Wenn ich ein Video abspiele, lädt es das gesamte Video in den ersten 5 Minuten von selbst. Das verbraucht viele meiner Daten. Ich möchte Videos während der Wiedergabe oder nur für die nächsten fünf Minuten laden. Welche Funktionalität sollte ich dafür verwenden, damit meine Arbeit einfach wird?

  class VideoView extends GetView<VideoController> {
  VideoController videoController = Get.put(VideoController());
  late BetterPlayerController? _betterPlayerController;
  @override
  Widget build(BuildContext context) {
    Wakelock.enable();
    return Scaffold(
      backgroundColor: Colors.black,
      body: Container(
        height: MediaQuery.of(context).size.height,
        width: MediaQuery.of(context).size.width,
        child: AspectRatio(
          aspectRatio: 16 / 9,
          child: BetterPlayer.network(
            videoController.args[0],
            betterPlayerConfiguration: BetterPlayerConfiguration(
                aspectRatio: 16 / 9,
                controlsConfiguration:
                    BetterPlayerControlsConfiguration(enableFullscreen: false)),
          ),
        ),
      ),
    );
  }

  @override
  void onClose() {
    videoController.dispose();
    Wakelock.disable();
  }
}

Nur 2 min Videowiedergabe und 25 min geladen.

Lösung

Also bekam ich die Antwort, nachdem ich viele Dokumentationen gelesen hatte. Mir war es sehr wichtig, den Datenverbrauch der Nutzer zu reduzieren. Die meisten Benutzer/Studenten sahen sich Videos mehr als 6 Stunden am Tag an. Wenn ein einstündiges Video mehr als 400 MB-500 MB verbraucht, ist das überhaupt nicht gut. Der Benutzer hatte eine begrenzte Datenmenge von ~1,5 GB pro Tag.

Das Problem war nur mit dem Puffer, der ohne Begrenzung lief. `

    import 'package:better_player/better_player.dart';
    import 'package:flutter/material.dart';
    import 'package:get/get.dart';
    import 'package:wakelock/wakelock.dart';
    
    class VideoView extends StatefulWidget {
      @override
      _VideoView createState() => _VideoView();
    }
    
    class _VideoView extends State<VideoView> {
      late BetterPlayerController _betterPlayerController;
    
      @override
      void initState() {
        BetterPlayerConfiguration betterPlayerConfiguration =
            BetterPlayerConfiguration(
                aspectRatio: 16 / 9,
                autoDispose: true,
                autoDetectFullscreenAspectRatio: true,
                fullScreenByDefault: true,
                fullScreenAspectRatio: 16 / 9,//AR dual time but it's okay.
                controlsConfiguration: BetterPlayerControlsConfiguration(
                    enablePip: false,
                    enableFullscreen: true,
                    enableSubtitles: false,
                    loadingColor: Colors.deepOrange,
                    progressBarBufferedColor: Colors.red, //very useful
                    progressBarHandleColor: Colors.blue,
                    progressBarBackgroundColor: Colors.white));
        BetterPlayerDataSource dataSource = BetterPlayerDataSource(
          BetterPlayerDataSourceType.network,
          Get.arguments[2], <== deault quality url
          videoFormat: BetterPlayerVideoFormat.other, //don't forget it if not hsl
          resolutions: {
            "LOW": Get.arguments[3],      // url1
            "MEDIUM": Get.arguments[2],   // url2
            "HD": Get.arguments[1],       // url3
            "Full HD": Get.arguments[0],  // url4 
          },
     // Here is the problem and I resolve it in this way
          bufferingConfiguration: BetterPlayerBufferingConfiguration(
            minBufferMs: 5000,
            maxBufferMs: 131072,
            bufferForPlaybackMs: 2500,
            bufferForPlaybackAfterRebufferMs: 5000,
          ),
       // cacheConfiguration is very useful 
          cacheConfiguration: BetterPlayerCacheConfiguration(
              useCache: true,
              maxCacheSize: 10 * 1024 * 1024,
              maxCacheFileSize: 10 * 1024 * 1024,
              preCacheSize: 3 * 1024 * 1024),
        );
    
        _betterPlayerController = BetterPlayerController(betterPlayerConfiguration,
            betterPlayerDataSource: dataSource);
        super.initState();
      }
    
      @override
      Widget build(BuildContext context) {
        Wakelock.enable();
        return SafeArea(
          child: Scaffold(
            backgroundColor: Colors.black,
            body: Container(
              height: MediaQuery.of(context).size.height,
              width: MediaQuery.of(context).size.width,
              child: AspectRatio(
                aspectRatio: 16 / 9, // AR for self satisfaction
                child: BetterPlayer(
                  controller: _betterPlayerController,
                ),
              ),
            ),
          ),
        );
      }
    
      void onClose() {
        _betterPlayerController.dispose(); // necessary
        Wakelock.disable();
      }
    }
`


Beantwortet von –
Pawan Kumar


Antwort geprüft von –
Jay B. (FixError Admin)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like