美文网首页Flutter Developer
Flutter - 在浏览器中实现实现视频播放器

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

作者: 开心人开发世界 | 来源:发表于2019-12-01 14:41 被阅读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

    相关文章

      网友评论

        本文标题:Flutter - 在浏览器中实现实现视频播放器

        本文链接:https://www.haomeiwen.com/subject/qfvzwctx.html