appinioGmbH / flutter_packages

Dart and Flutter plugins/packages used and maintained by @appinioGmbH
187 stars 214 forks source link

[ BUG ] : Agora chat sdk video url not playing #249

Open heshesh2010 opened 6 months ago

heshesh2010 commented 6 months ago

Hi ,

video works on android , but not working on ios , I have used same network url for both

video url https://a61.chat.agora.io/61383803/1130043/chatfiles/0fc1c4e0-df32-11ee-9b0c-ebc0221ca4c6

flutter doctor :

Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel stable, 3.19.2, on macOS 14.4 23E214 darwin-x64, locale en-EG) [✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0) [✓] Xcode - develop for iOS and macOS (Xcode 15.3) [✓] Chrome - develop for the web [✓] Android Studio (version 2022.3) [✓] VS Code (version 1.87.1) [✓] Connected device (5 available) [✓] Network resources

• No issues found!


`     // full screen video widget
import 'dart:io';

import 'package:appinio_video_player/appinio_video_player.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:get/get.dart';
import 'package:siyaq/utilities/general.dart';

class FullScreenVideoPlayerWidget extends StatefulWidget {
  final String? videoUrl;
  final String? videoLocalPath;
  final Duration? lastPosition;
  final bool? wasPlaying;
  final bool? isSinglePost;
  final double? finalWidth;
  final double? finalHeight;
  final bool isFirstSard;
  final bool isSingleSard;
  final int? homeFeedSardIndex;
  String msgId;
  FullScreenVideoPlayerWidget(
      {this.videoUrl,
      this.videoLocalPath,
      this.lastPosition,
      this.wasPlaying,
      this.isSinglePost,
      this.finalWidth,
      this.finalHeight,
      required this.isFirstSard,
      this.isSingleSard = false,
      this.homeFeedSardIndex,
      required this.msgId});

  @override
  _FullScreenVideoPlayerWidgetState createState() =>
      _FullScreenVideoPlayerWidgetState();
}

class _FullScreenVideoPlayerWidgetState
    extends State<FullScreenVideoPlayerWidget> {
  late CachedVideoPlayerController videoPlayerController;
  late CustomVideoPlayerController _customVideoPlayerController;

  @override
  void initState() {
    var brightness = Brightness.light;
    var color = Colors.black12;

    SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual,
        overlays: [SystemUiOverlay.top]);
    SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
      systemNavigationBarColor: color,
      statusBarColor: color,
      statusBarBrightness: brightness,
      statusBarIconBrightness: brightness,
      systemNavigationBarDividerColor: color,
      systemNavigationBarIconBrightness: brightness,
    ));
    print("video url: ${widget.videoUrl}");
    videoPlayerController = CachedVideoPlayerController.network(
      widget.videoUrl!,
    )..initialize().then((value) => setState(() {}));

    _customVideoPlayerController = CustomVideoPlayerController(
      context: context,
      videoPlayerController: videoPlayerController,
    );

    super.initState();
  }

  @override
  void dispose() {
    super.dispose();
    _customVideoPlayerController.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        backgroundColor: Colors.black,
        body: SafeArea(
          child: Hero(
            tag: widget.msgId,
            child: Stack(
              alignment: Alignment.center,
              children: [
                // check if video is initialized and ready to play before showing it to the user
                videoPlayerController.value.isInitialized
                    ? Container(
                        width: widget.finalWidth,
                        height: widget.finalHeight,
                        child: AspectRatio(
                          aspectRatio: videoPlayerController.value.aspectRatio,
                          child: Container(
                            color: Colors.black,
                            child: Center(
                              child: CustomVideoPlayer(
                                  customVideoPlayerController:
                                      _customVideoPlayerController),
                            ),
                          ),
                        ),
                      )
                    : Container(
                        width: widget.finalWidth,
                        height: widget.finalHeight,
                        child: Center(
                          child: loadingAnimation(),
                        ),
                      ),

                Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: Align(
                    alignment: Alignment.topLeft,
                    child: MaterialButton(
                      padding: const EdgeInsets.all(15),
                      elevation: 0,
                      child: Icon(
                        Icons.arrow_back,
                        color: Colors.white,
                        size: 25,
                      ),
                      color: Colors.black12,
                      minWidth: double.minPositive,
                      height: double.minPositive,
                      shape: RoundedRectangleBorder(
                        borderRadius: BorderRadius.circular(100),
                      ),
                      onPressed: () => Get.back(),
                    ),
                  ),
                ),
              ],
            ),
          ),
        ));
  }
}
`