Flutter Developer

Flutter - 在浏览器中实现实现视频播放器

2019-12-01  本文已影响0人  开心人开发世界

为了使用Flutter在iOS或Android上播放视频,大多数人会转向video_player软件包。

不幸的是,Web平台不支持该软件包。我们将探索一种使我们能够通过3个简单步骤播放视频的解决方案:

1.我们需要编辑Web文件夹中的默认index.html模板文件。有了这些修改,我们加载afterglowplayer,并建立一个触发器,在一个 HTML元素,和视频,将作为我们所要播放视频的占位符HTML元素。

这就是我们的index.html的样子:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Web Video Player</title>
    <script src="https://cdn.jsdelivr.net/npm/afterglowplayer@1.x"></script></head>
  <body>
    <script src="main.dart.js" type="application/javascript"></script>
    <a id="triggerVideoPlayer" class="afterglow" href="#videoPlayer"></a>
    <video id="videoPlayer" width="960" height="540" data-skin="dark">
    </video>
  </body>
</html>

2.然后,我们编写一个名为playVideo的Dart函数,该函数将使用Universal_html包与index.html页面进行交互,并传递我们要播放的视频URL:

import 'package:flutter/foundation.dart';
import 'package:universal_html/html.dart' as html;void **playVideo**(String **atUrl**) {
  if(**kIsWeb**) {
    final v = html.window.document.getElementById('**videoPlayer**');
    if(v != null) {
      v.**setInnerHtml**(
        '<source type="video/mp4" src="$**atUrl**">',
        validator: html.NodeValidatorBuilder()
        ..allowElement('source', attributes: ['src', 'type']));
      final a = html.window.document.getElementById( '**triggerVideoPlayer**' );
      if(a != null) {
        a.dispatchEvent(html.MouseEvent('click'));
      }
    }
  } else {
    // we're not on the web platform
    // and should use the [video_player](https://pub.dev/packages/video_player) package
  }
}

该代码引用了videoPlayer元素,如果存在,则设置其内部HTML以容纳我们使用atUrl参数传递的视频URL 。然后,我们获取有关triggerVideoPlayer元素的参考,并触发鼠标单击。

3.视频将作为整个Flutter应用程序顶部的叠加播放。播放器反应灵敏,并提供播放暂停音量滚动全屏控制,并显示播放信息。

playVideo('http://distribution.bbb3d.renderfarming.net/video/mp4/bbb_sunflower_1080p_30fps_normal.mp4');

如果您需要播放纵向视频(或以纵向模式播放视频),则可以在步骤1 中将宽度高度交换,或者通过修改playVideo功能来动态地实现。

Afterglow player可以进一步自定义。仅通过将视频ID作为参数发送到步骤2的位修改方法,它也可以播放YouTubeVimeo视频。

import 'package:flutter/foundation.dart';
import 'package:universal_html/html.dart' as html;void **playHostedVideo**(String **withId,** [bool **isVimeo**=false]) {
  if(**kIsWeb**) {
    final v = html.window.document.getElementById('**videoPlayer**');
    if(v != null) {
      if(isVimeo) {
        v.setAttribute("data-vimeo-id", withId);
      } else {
        v.setAttribute("data-youtube-id", withId);
      }
      final a = html.window.document.getElementById( '**triggerVideoPlayer**' );
      if(a != null) {
        a.dispatchEvent(html.MouseEvent('click'));
      }
    }
  } else {
    // we're not on the web platform
    // and should use the [video_player](https://pub.dev/packages/video_player) package
  }
}

第3步变为:

// for playing YouTube video
playHostedVideo('aqz-KE-bpKQ');
// or for playing Vimeo video
playHostedVideo('1084537', true);

作为底注,可以像这样使用任何HTML / JS视频播放器。在最近的项目中使用了Afterglow之后,我选择了Afterglow,我喜欢它的简单性以及它的轻巧性。

翻译自:https://medium.com/flutter-community/flutter-video-player-3a2f4f8562a3

上一篇下一篇

猜你喜欢

热点阅读