【发布时间】:2021-05-25 23:28:00
【问题描述】:
我正在尝试直接从 firebase 云流式传输视频,并且我设法在控制台中打印了视频 URL,但是当我尝试将值分配给 videoplayercontroller 时,我得到的只是空白屏幕。下面是代码:
class VideoApp extends StatefulWidget {
@override
_VideoAppState createState() => _VideoAppState();
}
class _VideoAppState extends State<VideoApp> {
VideoPlayerController _controller;
Future<void> _initializeVideoPlayerFuture;
String newURL;
Future<String> getVideos() async {
final videos = await FirebaseFirestore.instance.collection('videos').get();
for (var video in videos.docs) {
final newUrl = video.get('url');
final name = video.get('name');
print(name);
newURL =await newUrl;
}
print(newURL);
return newURL;
}
@override
void initState() {
getVideos();
try {
_controller = VideoPlayerController.network('https://www.youtube.com/watch?v=wUjPXXTeTFo'
);
_initializeVideoPlayerFuture = _controller.initialize();
_controller.setLooping(true);
_controller.setVolume(1);
super.initState();
} catch (e) {
print(e);
}
}
@override
void dispose() {
super.dispose();
_controller.dispose();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Video Demo',
home: Scaffold(
appBar: AppBar(
title: Text("Video Demo"),
),
body: FutureBuilder(
future: _initializeVideoPlayerFuture,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return Center(
child: AspectRatio(
aspectRatio: _controller.value.aspectRatio,
child: VideoPlayer(_controller),
),
);
} else {
return Center(
child: CircularProgressIndicator(),
);
}
},
),
floatingActionButton: FloatingActionButton(
onPressed: () {
setState(() {
if (_controller.value.isPlaying) {
_controller.pause();
} else {
_controller.play();
}
});
},
child: Icon(
_controller.value.isPlaying ? Icons.pause : Icons.play_arrow),
),
));
}
}
【问题讨论】:
标签: flutter android-studio google-cloud-firestore firebase-authentication