Jelajahi Sumber

add ijkplayer to overlay

cjl_macbook 6 tahun lalu
induk
melakukan
07068ea57e

+ 2 - 1
TODOLIST.md

@@ -69,5 +69,6 @@
   - [ ] 设置选项的使用
   - [x] 切换全屏播放的示例代码
   - [x] 在列表中(ListView)
-  - [ ] 视频竖向分页滑动
+  - [x] 视频竖向分页滑动
+  - [ ] 在悬浮窗中播放
 - [x] iOS 部分视频无法显示图像的问题: 可能很长时间内都无法解决

+ 3 - 0
example/lib/i18n/cn.dart

@@ -59,4 +59,7 @@ class _I18nZh extends I18n {
 
   @override
   String get screenshotTitle => "截取视频画面(开发中)";
+
+  @override
+  String get overlayPageTitle => "悬浮窗中显示";
 }

+ 3 - 0
example/lib/i18n/en.dart

@@ -58,4 +58,7 @@ class _I18nEn extends I18n {
 
   @override
   String get screenshotTitle => "screenshot video frame(experiment)";
+
+  @override
+  String get overlayPageTitle => "In overlay";
 }

+ 2 - 0
example/lib/i18n/i18n.dart

@@ -42,6 +42,8 @@ abstract class I18n {
   String get playFinishToast;
 
   String get screenshotTitle;
+
+  String get overlayPageTitle;
 }
 
 I18n get currentI18n => I18n(window.locale);

+ 78 - 0
example/lib/page/in_overlay_page.dart

@@ -0,0 +1,78 @@
+import 'package:flutter/material.dart';
+import 'package:ijkplayer_example/i18n/i18n.dart';
+import 'package:flutter_ijkplayer/flutter_ijkplayer.dart';
+
+class InOverlayPage extends StatefulWidget {
+  @override
+  _InOverlayPageState createState() => _InOverlayPageState();
+}
+
+class _InOverlayPageState extends State<InOverlayPage> {
+  IjkMediaController controller = IjkMediaController();
+  OverlayEntry entry;
+
+  @override
+  void initState() {
+    super.initState();
+    controller.setDataSource(
+      DataSource.network(
+        "http://img.ksbbs.com/asset/Mon_1703/05cacb4e02f9d9e.mp4",
+      ),
+      autoPlay: true,
+    );
+  }
+
+  @override
+  void deactivate() {
+    super.deactivate();
+    entry?.remove();
+    entry = null;
+  }
+
+  @override
+  void dispose() {
+    controller?.dispose();
+    super.dispose();
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      appBar: AppBar(
+        title: Text(currentI18n.overlayPageTitle),
+      ),
+      body: ListView(
+        children: <Widget>[
+          AspectRatio(
+            child: IjkPlayer(
+              mediaController: controller,
+            ),
+            aspectRatio: 1,
+          ),
+          FlatButton(
+            child: Text("showInOverlay"),
+            onPressed: showInOverlay,
+          ),
+        ],
+      ),
+    );
+  }
+
+  void showInOverlay() {
+    entry = OverlayEntry(builder: (BuildContext context) {
+      return Align(
+        alignment: Alignment.bottomCenter,
+        child: Container(
+          width: 200,
+          child: AspectRatio(
+            aspectRatio: 1,
+            child: IjkPlayer(
+              mediaController: controller,
+            ),
+          ),
+        ),
+      );
+    });
+    Overlay.of(context).insert(entry);
+  }
+}

+ 2 - 0
example/lib/page/index.dart

@@ -5,6 +5,7 @@ import 'package:ijkplayer_example/page/controller_stream_use.dart';
 import 'package:ijkplayer_example/page/dialog_video_page.dart';
 import 'package:ijkplayer_example/page/full_screen.dart';
 import 'package:ijkplayer_example/page/gallery_page.dart';
+import 'package:ijkplayer_example/page/in_overlay_page.dart';
 import 'package:ijkplayer_example/page/network.dart';
 import 'package:ijkplayer_example/page/paging_page.dart';
 import 'package:ijkplayer_example/page/screen_shot_page.dart';
@@ -34,6 +35,7 @@ class _IndexPageState extends State<IndexPage> {
           buildButton(currentI18n.pageViewButton, PagingPickPage()),
           buildButton(currentI18n.useStreamUsage, ControllerStreamUsagePage()),
           buildButton(currentI18n.screenshotTitle, ScreenShotPage()),
+          buildButton(currentI18n.overlayPageTitle, InOverlayPage()),
         ],
       ),
     );