在 Flutter 中播放 Vimeo 视频
Playing Vimeo videos in Flutter
我正在尝试使用 video_player
插件在 flutter 应用程序中播放 vimeo 视频,但没有成功,这是抛出一堆错误。
请帮助我如何在 flutter 应用程序中实现它?使用 webview 或任何插件等?也许代码片段会对我有很大帮助!
这是我的代码片段
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 node must not be the root
node. E/ExoPlayerImplInternal(28662): Source error.
E/ExoPlayerImplInternal(28662):
com.google.android.exoplayer2.upstream.HttpDataSource$InvalidResponseCodeException:
Response code: 404 E/ExoPlayerImplInternal(28662): at
com.google.android.exoplayer2.upstream.DefaultHttpDataSource.open(DefaultHttpDataSource.java:300)
E/ExoPlayerImplInternal(28662): at
com.google.android.exoplayer2.upstream.StatsDataSource.open(StatsDataSource.java:83)
E/ExoPlayerImplInternal(28662): at
com.google.android.exoplayer2.source.ExtractorMediaPeriod$ExtractingLoadable.load(ExtractorMediaPeriod.java:885)
E/ExoPlayerImplInternal(28662): at
com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:381)
E/ExoPlayerImplInternal(28662): at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/ExoPlayerImplInternal(28662): at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/ExoPlayerImplInternal(28662): at
java.lang.Thread.run(Thread.java:919)
你不能使用 Vimeo URL https://vimeo.com/{some-video-id}。 VideoPlayerController
需要流媒体视频 URL。
Solution 1
需要 Vimeo 高级帐户
- 转到https://vimeo.com/manage/和select您要播放的视频
- select 左侧面板中的分发选项卡。
- select 视频文件 link
select 播放视频.. 共同支付视频 link(它的 mp4 可窃取视频 link)..使用这个 URL VideoPlayerController
.
Solution 2
视频 link 将每 15 分钟过期
- 调用 API https://player.vimeo.com/video/{video_id}/config 您将得到 JSON 响应。
- progressive object 你会得到 mp4 视频 url .
Solution 3
- 将视频控制器替换为
webivew
给这个 url
https://vimeo.com/{some-video-id} ..启用 javascript, 视频
将在 webview 中播放。
安装 vimeoplayer:pubspec 上的 ^0.1.8
return Scaffold(
appBar: AppBar(title: Text('Video EasyRider')),
body: ListView(children: <Widget>[
VimeoPlayer(id: '123456789', autoPlay: false),
]));
}
您可以使用 vimeo_player_flutter 包来实现此目的。它很简单并且支持 Android 和 IOS 平台。它基于webview工作。
请参阅此 link 了解更多详细信息。
我正在尝试使用 video_player
插件在 flutter 应用程序中播放 vimeo 视频,但没有成功,这是抛出一堆错误。
请帮助我如何在 flutter 应用程序中实现它?使用 webview 或任何插件等?也许代码片段会对我有很大帮助!
这是我的代码片段
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 node must not be the root node. E/ExoPlayerImplInternal(28662): Source error. E/ExoPlayerImplInternal(28662): com.google.android.exoplayer2.upstream.HttpDataSource$InvalidResponseCodeException: Response code: 404 E/ExoPlayerImplInternal(28662): at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.open(DefaultHttpDataSource.java:300) E/ExoPlayerImplInternal(28662): at com.google.android.exoplayer2.upstream.StatsDataSource.open(StatsDataSource.java:83) E/ExoPlayerImplInternal(28662): at com.google.android.exoplayer2.source.ExtractorMediaPeriod$ExtractingLoadable.load(ExtractorMediaPeriod.java:885) E/ExoPlayerImplInternal(28662): at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:381) E/ExoPlayerImplInternal(28662): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) E/ExoPlayerImplInternal(28662): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) E/ExoPlayerImplInternal(28662): at java.lang.Thread.run(Thread.java:919)
你不能使用 Vimeo URL https://vimeo.com/{some-video-id}。 VideoPlayerController
需要流媒体视频 URL。
Solution 1
需要 Vimeo 高级帐户
- 转到https://vimeo.com/manage/和select您要播放的视频
- select 左侧面板中的分发选项卡。
- select 视频文件 link
select 播放视频.. 共同支付视频 link(它的 mp4 可窃取视频 link)..使用这个 URL
VideoPlayerController
.
Solution 2
视频 link 将每 15 分钟过期
- 调用 API https://player.vimeo.com/video/{video_id}/config 您将得到 JSON 响应。
- progressive object 你会得到 mp4 视频 url .
Solution 3
- 将视频控制器替换为
webivew
给这个 url https://vimeo.com/{some-video-id} ..启用 javascript, 视频 将在 webview 中播放。
安装 vimeoplayer:pubspec 上的 ^0.1.8
return Scaffold(
appBar: AppBar(title: Text('Video EasyRider')),
body: ListView(children: <Widget>[
VimeoPlayer(id: '123456789', autoPlay: false),
]));
}
您可以使用 vimeo_player_flutter 包来实现此目的。它很简单并且支持 Android 和 IOS 平台。它基于webview工作。
请参阅此 link 了解更多详细信息。