flutter 系列之: 在 flutter 中使用媒体播放器
简介
现在的 app 功能越来越强大,除了基本的图文之外,还需要各种各样的其他的功能,比如视频,和直播。
直播可能会比较复杂,因为涉及到了拉流和推流,需要服务器端的支持,但是视频播放就比较简单了,那么如何在 flutter 中使用媒体播放器呢?
一起来看看吧。
使用前的准备工作
flutter 本身是不支持媒体播放功能的,为了实现这个功能,我们需要使用额外的第三方插件叫做 video_player。
首先我们需要向 flutter 应用中添加 video_player。添加起来也非常简单,只需要执行下面的命令即可:
该命令会向 pubspec.xml 中添加如下的内容:
添加好依赖包之后,我们还需要为应用添加相应的权限,你确保能够使用影音播放的权限。
如果是在 android 中,需要向 AndroidManifest.xml 文件中添加类似下面的内容:
在 IOS 中则需要在 Info.plist 中添加下面的内容:
在 flutter 中使用 video_player
video_player 中和 video 播放相关的类叫做 VideoPlayerController,在 IOS 中底层使用的是 AVPlayer,在 Android 中底层使用的是 ExoPlayer。
VideoPlayerController 有好几种构造方法,我们一起来看看。
asset 方法表示 video 是从应用程序的 asset 中获取的。
network 方法表示 video 是从网络中获取的。
file 方法表示 video 是通过'file://${file.path}' 这样的格式来获取的。
还有一个只用在 andorid 中的方法,表示从 contentUri 中加载 video:
为了简单起见,这里我们选择网易上面的一个科教视频,作为要播放的 video。
那么我们可以通过 VideoPlayerController.network 方法来构建这个 controller:
在使用 video 之前,还需要进行初始操作,初始化是调用它的 initialize 方法,这个方法的作用是打开给定的数据源,并加载它的元数据。
因为 initialize 方法是一个耗时的操作,所以这个方法返回类型是 Future:
我们可以这样使用:
有了播放器的 Future,我们可以配合 flutter 中的 FutureBuilder 一起使用:
在 FutureBuilder 中,我们通过判断 connectionState 来判断视频是否加载完毕,如果没有加载完毕,则使用 CircularProgressIndicator 表示正在加载中。
如果加载完毕之后,就直接展示 VideoPlayer 组件即可。
因为不同的 video 有不同的纵横比,为了在 flutter 界面上完美的展示加载的 video,我们将 VideoPlayer 封装在一个 AspectRatio 组件中。
最后我们还要添加一个控制装置,用来控制 video 的暂停和播放:
这里通过 videoPlayerController.value.isPlaying 来判断视频是否在播放状态,同时在 onPressed 方法中调用了 setState 来调用 videoPlayerController.pause 或者 videoPlayerController.play 方法。
总结
这样一个可以播放外部视频的 app 就做好了,运行之后它的界面是这样的:
大家可以在这个播放器的基础上进行扩张,一个属于你自己的视频 APP 就完成了。
版权声明: 本文为 InfoQ 作者【程序那些事】的原创文章。
原文链接:【http://xie.infoq.cn/article/7f123b43ffaa9a717daad7942】。文章转载请联系作者。
评论