微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Flutter中播放Firebase存储中的.m3u8视频

如何解决在Flutter中播放Firebase存储中的.m3u8视频

我将.m3u8主文件及其零件存储在Firebase Storage的文件夹中。如何在Flutter应用中播放此视频?

用例: 我有一个类似TikTok的UI,其中每个视频都是Firestore中的一个文档。在每个文档中,我都有指向存储在Firebase Storage中的master.m3u8文件链接

我尝试了这个.m3u8链接https://bitdash-a.akamaihd.net/content/sintel/hls/playlist.m3u8 并且可以与video_player配合使用。

到我的master.m3u8文件的示例链接https://firebasestorage.googleapis.com/v0/b/example.appspot.com/o/videos%2F10-31%2F1604100430027grBzLN0d9BQk0QtoTf9TWNe2ps02%2Fmaster.m3u8?alt=media&token=

视频文件

.m3u8 playlist files

编辑:

我尝试将here所述的chewie与video_player软件包一起使用。它给我以下错误

E/ExoPlayerImplInternal(32708): Source error.
E/ExoPlayerImplInternal(32708): com.google.android.exoplayer2.upstream.HttpDataSource$InvalidResponseCodeException: Response code: 403
E/ExoPlayerImplInternal(32708):     at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.open(DefaultHttpDataSource.java:300)
E/ExoPlayerImplInternal(32708):     at com.google.android.exoplayer2.upstream.StatsDataSource.open(StatsDataSource.java:83)
E/ExoPlayerImplInternal(32708):     at com.google.android.exoplayer2.upstream.DataSourceInputStream.checkOpened(DataSourceInputStream.java:102)
E/ExoPlayerImplInternal(32708):     at com.google.android.exoplayer2.upstream.DataSourceInputStream.open(DataSourceInputStream.java:65)
E/ExoPlayerImplInternal(32708):     at com.google.android.exoplayer2.upstream.ParsingLoadable.load(ParsingLoadable.java:156)
E/ExoPlayerImplInternal(32708):     at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:381)
E/ExoPlayerImplInternal(32708):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/ExoPlayerImplInternal(32708):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/ExoPlayerImplInternal(32708):     at java.lang.Thread.run(Thread.java:919)

.m3u8文件内容

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=2410843,RESOLUTION=1080x1920,CODECS="avc1.42c02a,mp4a.40.2"
1604145635522grBzLN0d9BQk0QtoTf9TWNe2ps02%2F?alt=media

#EXT-X-STREAM-INF:BANDWIDTH=612343,mp4a.40.2"
1604145635522grBzLN0d9BQk0QtoTf9TWNe2ps02%2F1_playlistvariant.m3u8?alt=media

其中1604145635522grBzLN0d9BQk0QtoTf9TWNe2ps02是存储0_playlistvariant.m3u81_playlistvariant.m3u8文件文件名称。我需要更改这些行吗?

我正在按照this指南在Flutter中创建视频共享应用。

任何帮助或指导将不胜感激。

谢谢。

解决方法

通过更改Firebase Storage的安全规则以允许读写的方式解决了问题。我可以通过flutter中的video_player包播放带有指向master.m3u8文件的URL的视频。

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read; allow write;
    }
  }
}

尽管这是部分解决方案,因为任何人都可以访问数据库。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。