【问题标题】:Playing Vimeo videos in Flutter在 Flutter 中播放 Vimeo 视频
【发布时间】:2020-06-12 13:31:55
【问题描述】:

我正在尝试使用 video_player 插件在 Flutter 应用程序中播放 vimeo 视频,但得到没有成功,它抛出了一堆错误。 请帮助我如何在颤振应用程序中实现这一点?使用 webview 或任何插件等?也许一个代码 sn-p 对我有很大的帮助!

这是我的代码 sn-p

import 'package:video_player/video_player.dart';
import 'package:flutter/material.dart';

void main() => runApp(VideoApp());

class VideoApp extends StatefulWidget {
  @override
  _VideoAppState createState() => _VideoAppState();
}

class _VideoAppState extends State<VideoApp> {
  VideoPlayerController _controller;

  @override
  void initState() {
    super.initState();
    _controller = VideoPlayerController.network(
        'https://vimeo.com/{some-video-id}')
      ..initialize().then((_) {
        // Ensure the first frame is shown after the video is initialized, even before the play button has been pressed.
        setState(() {});
      });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Video Demo',
      home: Scaffold(
        body: Center(
          child: _controller.value.initialized
              ? AspectRatio(
                  aspectRatio: _controller.value.aspectRatio,
                  child: VideoPlayer(_controller),
                )
              : Container(),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: () {
            setState(() {
              _controller.value.isPlaying
                  ? _controller.pause()
                  : _controller.play();
            });
          },
          child: Icon(
            _controller.value.isPlaying ? Icons.pause : Icons.play_arrow,
          ),
        ),
      ),
    );
  }

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

调试控制台中的错误 -

E/AccessibilityBridge(28662):VirtualView 节点不能是根节点 节点。 E/ExoPlayerImplInternal(28662):源错误。 E/ExoPlayerImplInternal(28662): com.google.android.exoplayer2.upstream.HttpDataSource$InvalidResponseCodeException: 响应代码:404 E/ExoPlayerImplInternal(28662):在 com.google.android.exoplayer2.upstream.DefaultHttpDataSource.open(DefaultHttpDataSource.java:300) E/ExoPlayerImplInternal(28662):在 com.google.android.exoplayer2.upstream.StatsDataSource.open(StatsDataSource.java:83) E/ExoPlayerImplInternal(28662):在 com.google.android.exoplayer2.source.ExtractorMediaPeriod$ExtractingLoadable.load(ExtractorMediaPeriod.java:885) E/ExoPlayerImplInternal(28662):在 com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:381) E/ExoPlayerImplInternal(28662):在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) E/ExoPlayerImplInternal(28662):在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) E/ExoPlayerImplInternal(28662):在 java.lang.Thread.run(Thread.java:919)

【问题讨论】:

  • 请提供代码示例来解释您尝试做什么。
  • @Abjox 我已经更新了我的问题,请看一下。非常感谢您的帮助!
  • video_player 插件用于直接播放视频文件,这意味着您需要一个指向视频文件本身的直接 URL。您不能只给它某个随机站点的 URL,因为它不知道如何处理它。
  • 感谢您的回复@Abion47 ????????还有其他方法可以实现吗?
  • 我非常需要将 vimeo 集成到我的 Flutter 应用中,请告诉我是否可以实现?

标签: android flutter dart vimeo flutter-web


【解决方案1】:

您不能使用 Vimeo URL https://vimeo.com/{some-video-id}VideoPlayerController 需要可流式视频 URL。

解决方案 1

Vimeo 所需的高级帐户

  1. 转到https://vimeo.com/manage/并选择您要播放的视频
  2. 从左侧面板中选择分发选项卡。
  3. 选择视频文件链接
  4. 选择播放视频..共同支付视频链接(其 mp4 可窃取视频链接)..使用此 URL 获取 VideoPlayerController

解决方案 2

视频链接每 15 分钟过期一次

  1. 调用APIhttps://player.vimeo.com/video/{video_id}/config你会得到JSON响应。
  2. progressive object 你会得到 mp4 video url。

解决方案 3

  1. webivew替换视频控制器给这个url https://vimeo.com/{some-video-id} ..启用 javascript、视频 将在 webview 中播放。

【讨论】:

  • 我创建了一个 vimeo 播放器的测试版本。随意分叉和修改! github.com/ThuAbLKA/flutter-vimeo-player
  • @Rahul Devanavar 我正在使用解决方案 1:PRO 成员可以访问直接视频文件链接。众所周知,Vimeo 不支持也不推荐使用 URL。他们是否会在没有任何事先通知的情况下更改 URL,即使是 PRO 成员?
  • 谢谢您,尝试第二种解决方案,但即使使用私有链接,配置 API 也不响应私有视频,任何解决方法再次感谢
  • 是否有任何选项可以播放私人 Vimeo 视频?
  • 是的,您可以使用配置 api
【解决方案2】:

在 pubspec 上安装 vimeoplayer: ^0.1.8

return Scaffold(
        appBar: AppBar(title: Text('Video EasyRider')),
       body: ListView(children: <Widget>[
          VimeoPlayer(id: '123456789', autoPlay: false),
        ]));
  }

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-12-28
  • 2018-12-09
  • 1970-01-01
  • 2013-05-18
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
  • 2016-03-16
相关资源
最近更新 更多