Ver código fonte

Update a example for error url crash.

Caijinglong 6 anos atrás
pai
commit
1f4f11ec2b

+ 2 - 0
example/lib/page/developing/develop_index.dart

@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
 
 import 'develop_prepare_page.dart';
 import 'live_interruption_page.dart';
+import 'src_error_page.dart';
 
 class DevelopingIndexPage extends StatefulWidget {
   @override
@@ -19,6 +20,7 @@ class DevelopingIndexPageState extends State<DevelopingIndexPage> {
         children: <Widget>[
           buildButton("developing preare page", ForPreparePage()),
           buildButton("直播中断", LiveInterruptionPage()),
+          buildButton("视频源错误", SreErrorPage()),
         ],
       ),
     );

+ 83 - 0
example/lib/page/developing/src_error_page.dart

@@ -0,0 +1,83 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_ijkplayer/flutter_ijkplayer.dart';
+
+class VideoWidget extends StatefulWidget {
+  final String url;
+  VideoWidget(this.url);
+  @override
+  _VideoWidgetState createState() => _VideoWidgetState();
+}
+
+class _VideoWidgetState extends State<VideoWidget> with WidgetsBindingObserver {
+  IjkMediaController controller;
+  @override
+  void initState() {
+    super.initState();
+    controller = IjkMediaController();
+    controller.setNetworkDataSource(widget.url, autoPlay: true);
+    Stream<IjkStatus> ijkStatusStream = controller.ijkStatusStream;
+    ijkStatusStream.listen((status) {
+      if (status == IjkStatus.complete) {
+        controller?.play();
+      }
+    });
+//    SystemChannels.lifecycle.setMessageHandler((msg) {});
+  }
+
+  @override
+  void didChangeAppLifecycleState(AppLifecycleState state) {
+    if (state == AppLifecycleState.resumed) {
+      controller?.play();
+    } else if (state == AppLifecycleState.paused) {
+      controller?.pause();
+    }
+  }
+
+  @override
+  void deactivate() {
+    super.deactivate();
+    controller?.pause();
+  }
+
+  @override
+  void reassemble() {
+    super.reassemble();
+    controller?.play();
+  }
+
+  @override
+  void dispose() {
+    super.dispose();
+    controller?.dispose();
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return IjkPlayer(
+      mediaController: controller,
+      controllerWidgetBuilder: (mController) => new Container(),
+    );
+  }
+}
+
+class SreErrorPage extends StatefulWidget {
+  @override
+  _SreErrorPageState createState() => _SreErrorPageState();
+}
+
+class _SreErrorPageState extends State<SreErrorPage> {
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      appBar: AppBar(),
+      body: Container(
+        child: PageView.builder(
+          itemBuilder: (BuildContext context, int index) {
+            // return VideoWidget("http://114.55.36.48/1204/27/index$index.m3u8");
+            return VideoWidget("http://itv.100.ahct.lv1.vcache.cn/100/ott_baseline_kalaok/hd/151/CP0541903573/playlist.m3u8");
+          },
+        ),
+      ),
+    );
+  }
+}