kautsaralbana

base player

Sep 21st, 2025
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 3.20 KB | Source Code | 0 0
  1. import 'dart:developer';
  2.  
  3. import 'package:bccm_player/bccm_player.dart';
  4. import 'package:flutter/material.dart';
  5. import 'package:flutter_hooks/flutter_hooks.dart';
  6. import 'package:klik_film/applications/others/klik_film_extension.dart';
  7. import 'package:klik_film/data/sources/catalog/catalog_source_provider.dart';
  8.  
  9. class MainPlayerPage extends StatefulHookWidget {
  10.   final VideoDetailDataModel data;
  11.   const MainPlayerPage({required this.data, super.key});
  12.  
  13.   @override
  14.   State<MainPlayerPage> createState() => _MainPlayerPageState();
  15. }
  16.  
  17. class _MainPlayerPageState extends State<MainPlayerPage> {
  18.   VideoDetailDataModel get data => widget.data;
  19.   final viewController = BccmPlayerViewController(
  20.     playerController: BccmPlayerController.primary,
  21.     config: BccmPlayerViewConfig(
  22.       pipOnLeave: true,
  23.       // controlsConfig: BccmPlayerControlsConfig(customBuilder: (_) => SizedBox.shrink()),
  24.     ),
  25.   );
  26.   BccmPlayerController get playerController => viewController.playerController;
  27.  
  28.   @override
  29.   void initState() {
  30.     setOrientation(0);
  31.     playerController.replaceCurrentMediaItem(MediaItem(
  32.       url: '${data.detail?.video.files?.online.hd?.file}',
  33.       mimeType: 'application/vnd.apple.mpegurl',
  34.       drmConfiguration: DrmConfiguration(
  35.         licenseServerUrl: 'https://drm-fairplay-licensing.axprod.net/AcquireLicense',
  36.         drmType: DrmType.fairplay,
  37.         fpsCertificateUrl: 'https://klikfilm.com/v2/desktop/drm/fairplay.cer',
  38.         licenseRequestHeaders: {
  39.           'X-AxDRM-Message': '${data.detail?.video.files?.online.hd?.token}',
  40.         },
  41.       ),
  42.     ));
  43.     playerController.initialize().then((_) async {
  44.       playerController.addListener(playerListener);
  45.       // await playerController.setupSubtitles([
  46.       //   SubtitleNetwork(
  47.       //     'https://t.cdn.klikfilm.net/subtitle/flat_girls_id_rev.srt',
  48.       //     selected: true,
  49.       //     metadata: SubtitleMetadata(code: 'ID', title: 'Bahasa Indonesia'),
  50.       //     type: SubtitleType.srt,
  51.       //   ),
  52.       // ]);
  53.       await playerController.setMixWithOthers(false);
  54.     });
  55.     super.initState();
  56.   }
  57.  
  58.   void playerListener() {
  59.     final playbackState = playerController.value.playbackState;
  60.     log('[playerListener] playbackState($playbackState)');
  61.   }
  62.  
  63.   @override
  64.   void dispose() {
  65.     playerController.removeListener(playerListener);
  66.     setOrientation(1);
  67.     if (playerController.isPrimary) {
  68.       playerController.stop(reset: true);
  69.     } else {
  70.       playerController.dispose();
  71.     }
  72.     super.dispose();
  73.   }
  74.  
  75.   @override
  76.   Widget build(BuildContext context) {
  77.     // final player = useListenable(playerController);
  78.     return PopScope(
  79.       canPop: true,
  80.       onPopInvokedWithResult: (bool didPop, result) async {
  81.         // await sendWatchDuration(forceRefresh: true);
  82.       },
  83.       child: Scaffold(
  84.         backgroundColor: Colors.black,
  85.         body: BccmPlayerView(BccmPlayerController.primary, config: viewController.config),
  86.         // body: playerLoaded.value
  87.         //     ? BccmPlayerView(BccmPlayerController.primary, config: viewController.config)
  88.         //     : Center(child: CircularProgressIndicator(color: KFColor.primary)),
  89.       ),
  90.     );
  91.   }
  92. }
  93.  
Advertisement
Add Comment
Please, Sign In to add comment