

flutter系列之:在flutter中使用媒体播放器
source link: http://www.flydean.com/27-flutter-ui-play-video/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

现在的app功能越来越强大,除了基本的图文之外,还需要各种各样的其他的功能,比如视频,和直播。
直播可能会比较复杂,因为涉及到了拉流和推流,需要服务器端的支持,但是视频播放就比较简单了,那么如何在flutter中使用媒体播放器呢?
一起来看看吧。
使用前的准备工作
flutter本身是不支持媒体播放功能的,为了实现这个功能,我们需要使用额外的第三方插件叫做video_player。
首先我们需要向flutter应用中添加video_player。添加起来也非常简单,只需要执行下面的命令即可:
flutter pub add video_player
该命令会向pubspec.xml中添加如下的内容:
dependencies:
flutter:
sdk: flutter
video_player: ^2.4.7
添加好依赖包之后,我们还需要为应用添加相应的权限,你确保能够使用影音播放的权限。
如果是在android中,需要向AndroidManifest.xml文件中添加类似下面的内容:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application ...>
</application>
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
在IOS中则需要在Info.plist中添加下面的内容:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
在flutter中使用video_player
video_player中和video播放相关的类叫做VideoPlayerController,在IOS中底层使用的是AVPlayer,在Android中底层使用的是ExoPlayer。
VideoPlayerController有好几种构造方法,我们一起来看看。
VideoPlayerController.asset
asset方法表示video是从应用程序的asset中获取的。
VideoPlayerController.network
network方法表示video是从网络中获取的。
VideoPlayerController.file
file方法表示video是通过’file://${file.path}’ 这样的格式来获取的。
还有一个只用在andorid中的方法,表示从contentUri中加载video:
VideoPlayerController.contentUri
为了简单起见,这里我们选择网易上面的一个科教视频,作为要播放的video。
那么我们可以通过 VideoPlayerController.network方法来构建这个controller:
videoPlayerController = VideoPlayerController.network(
'https://flv.bn.netease.com/1c04bfd72901f0661b486465e09cfdc01754c20db0686786f4e20a5f7d271ba0de6c1177a0da1c4c2d7c367e20ee16d4a90ac7ff4ea664820ba1b401f3e53f135f72cdff855e78ca5fb7849fb6ff7ccb9de1613ad3bfc59db83493b5f18a0a27f15048df6585361cd67c3b37551e10981c40dcdfdb77b7e6.mp4',
);
在使用video之前,还需要进行初始操作,初始化是调用它的initialize方法,这个方法的作用是打开给定的数据源,并加载它的元数据。
因为initialize方法是一个耗时的操作,所以这个方法返回类型是Future:
Future<void> initialize() async {
我们可以这样使用:
late Future<void> playerFuture;
playerFuture = videoPlayerController.initialize();
有了播放器的Future,我们可以配合flutter中的FutureBuilder一起使用:
body: FutureBuilder(
future: playerFuture,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return AspectRatio(
aspectRatio: videoPlayerController.value.aspectRatio,
child: VideoPlayer(videoPlayerController),
);
} else {
return const Center(
child: CircularProgressIndicator(),
);
}
},
),
在FutureBuilder中,我们通过判断connectionState来判断视频是否加载完毕,如果没有加载完毕,则使用CircularProgressIndicator表示正在加载中。
如果加载完毕之后,就直接展示VideoPlayer组件即可。
因为不同的video有不同的纵横比,为了在flutter界面上完美的展示加载的video,我们将VideoPlayer封装在一个AspectRatio组件中。
最后我们还要添加一个控制装置,用来控制video的暂停和播放:
floatingActionButton: FloatingActionButton(
onPressed: () {
setState(() {
if (videoPlayerController.value.isPlaying) {
videoPlayerController.pause();
} else {
videoPlayerController.play();
}
});
},
child: Icon(
videoPlayerController.value.isPlaying ? Icons.pause : Icons.play_arrow,
),
)
这里通过videoPlayerController.value.isPlaying来判断视频是否在播放状态,同时在onPressed方法中调用了setState来调用videoPlayerController.pause或者videoPlayerController.play方法。
这样一个可以播放外部视频的app就做好了,运行之后它的界面是这样的:

大家可以在这个播放器的基础上进行扩张,一个属于你自己的视频APP就完成了。
Recommend
-
113
虾米音乐“穷X”事件程序员致歉:以后老实写代码 2017年11月20日 13:59 15937 次阅读 稿源:
-
111
将近1个月没露面的王尼玛和《暴走大事件》终于满血复活,重新上线。此前11月29日王尼玛发出微博后,大事件粉丝们就已经奔走相告、不能自已了。
-
72
1月24日,乐视网开市起复牌即一字跌停,躺在跌停价13.8元/股。截至发稿,挂在跌停板上的卖单超过726万手,且还在不断增加中。不过,让人颇感意外的是,当天仍有人在“接飞刀”。开盘不到10分钟,顶着重大利空复牌的乐视网,竟然还出现了超过1万手买单,成交金额超千...
-
56
古天乐将在B站直播玩《贪玩蓝月》的消息引得上百万网友于昨天前往直播间观看,但是在等待了近3个小时后,古天乐才现身说了一句话,这让网友们感觉受到了官方欺骗,B站也针对此事发布了违规处理公告。日前,《贪玩蓝月》官方称古天乐将于1月31日上午十点在B站直播玩...
-
94
60年的约定或许就要成空。2月2日10点30分,ACFUN(下称“A站”)的网页显示为无法打开,app上一片空白。其实,这次A站药丸的消息,在两天前就被传出来了。只是这一回,A站不是遭受“不可描述的混沌入侵”,也不是“猴子(A站员工昵称)又用服务器下片了”。这个已经陪伴...
-
63
金鸡辞旧春风劲,玉犬迎新好运多。来自央视春晚官方的消息,2018年春节联欢晚会筹备已进入倒计时阶段,节目打磨日臻完善,排练合成逐步成熟,演出阵容也逐渐浮出水面。今天,央视春晚官方公布了备受关注的主持人阵容,延续“北京主会场+各地分会场”的直播模式,主会...
-
77
刚刚,Bianews向某直播平台确认,知名网络主播MC天佑已被有关部门要求全网禁播。有关部门联合多部门,在昨晚(2月11日)连夜召集各头部直播平台在京开会,要求各平台对多位主播禁播,其中包括MC天佑在内。据悉还有斗鱼主播五五开。据悉MC天佑等被禁播的主播,将不...
-
85
2月12日消息,在几天前A站ACFUN曾经由于部分原因突然无法访问,而且官方微博也发出了想要再活五百年的文字,不少网友猜测这个视频弹幕网站可能由于经营不利正式“凉了”。然而在今天下午A站却回复了访问,视频也可以正常播放,难道说事情有了转机?
-
100
近日,不少网友发现自己在B站的用户名、密码可以直接在快视频上登录,也就是说,B站数据库疑似泄漏。据悉,去年11月,360进军短视频领域,推出了一款名为“快视频”的App发布,主打1-3分钟的超短视频。
-
101
360又摊上事了,而且这次惹到了可能是中国互联网上最不好惹的一群人。总结了各方说法,目前事态大概如下:大量B站用户发现自己在B站上传的视频被“搬运”到了360旗下的视频网站“快视频”,包括复制了部分用户的用户名、个人简介、头像等,以及部分视频的播放量、发布...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK