Android Exoplayer:是否可以使用 exoplayer 从 Firebase 存储流式传输视频?

2023-12-21

在android中有一个库叫做外放播放器这与从给定网址流式传输视频有关。

现在根据this https://stackoverflow.com/questions/42053822/load-video-from-firebase-storage-to-videoviewfirebase 不支持视频流,尽管您可以将 uri 从 url 传递到 videoview(并且它实际上会流式传输)。

问题:

exoplayer 可以用于从 firebase 存储流式传输视频吗?

为什么 Firebase 声明无法进行流式传输,尽管可以通过视频视图完成?


是的,可以从 firebase 流式传输视频。

首先在你的xml文件中创建一个exoplayer

<com.google.android.exoplayer2.ui.PlayerView
        android:id="@+id/video_view"
        android:layout_width="match_parent"
        android:layout_height="0sp"
        android:layout_marginStart="20dp"
        android:layout_marginTop="20dp"
        android:layout_marginEnd="20dp"
        android:visibility="gone"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.0" />

我已将高度设置为 0 因为我稍后会以编程方式修复高度

然后在您的活动中声明简单的 SimpleExoPlayer 作为播放器。

 SimpleExoPlayer player;

然后按照以下步骤操作

//declare your PlayerView 

final PlayerView playerView = mview.findViewById(R.id.video_view);

//your database ref

        final StorageReference storageReference =
                FirebaseStorage.getInstance().getReference("/Post_Video/"+ video + ".mp4");


 player = ExoPlayerFactory.newSimpleInstance(MainActivity.this);
        playerView.setPlayer(player);

        playerView.setVisibility(View.VISIBLE);

        playerView.getLayoutParams().height=550;
        playerView.getLayoutParams().width=950;



        storageReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
            @Override
            public void onSuccess(Uri uri) {


                BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter.Builder(MainActivity.this).build();
                TrackSelector trackSelector = new DefaultTrackSelector(new AdaptiveTrackSelection.Factory(bandwidthMeter));
                ExoPlayer exoPlayer = (SimpleExoPlayer) ExoPlayerFactory.newSimpleInstance(MainActivity.this);
                Uri video = Uri.parse(uri.toString());
                DefaultHttpDataSourceFactory dataSourceFactory = new DefaultHttpDataSourceFactory("video");
                ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
                MediaSource mediaSource = new ExtractorMediaSource(video,dataSourceFactory,extractorsFactory,null,null);
                playerView.setPlayer(exoPlayer);
                exoPlayer.prepare(mediaSource);
                exoPlayer.setPlayWhenReady(false);




            }
        });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Exoplayer:是否可以使用 exoplayer 从 Firebase 存储流式传输视频? 的相关文章

随机推荐

  • 了解 VTune 报告

    这是现有线程的后续内容 http stackoverflow com questions 12724887 caching in a high performance financial application 我发现这不是阻碍我的应用程序
  • 使用node js返回所有带有过滤文件的文件

    我想返回文件夹和子文件夹中存在的文件 但需要对扩展名以 html htm 或 aspx 结尾的文件进行过滤 我有一个代码只返回带有扩展名的文件Index html Default htm Index aspx也需要文件的其余部分 但不知道如
  • 如何从 JSPX 输出

    一些 html 标签将给定属性的 任何 值解释为 true gt 选项标签浮现在脑海中 我经常最终做这样的事情
  • 在对象中实现打包/拆包

    我有一个仅包含属性的类 我希望对其进行打包 解包 什么collections abc我应该实现这种行为吗 class Item object def init self name age gender self name name self
  • ObjCMongoDB 坏了?我无法让它工作

    全面披露 我不是一个受过教育的程序员 我的全部编程经验都在 Javascript 和 Objective C 中 所以现在你知道你在处理什么了 小心行事 没有突然的动作 我正在编写一个与 Mac 服务器通信的 iPad 应用程序 我想使用
  • 根据所选的自定义结帐字段值添加自定义电子邮件收件人

    我需要 Woocommerce 根据为 Field Checkout 选择的选项向不同的个人发送自定义电子邮件 从技术上讲 自定义字段是报告他们购买的产品变体的人 但我不确定如何根据购买的产品变体 因此如下 首先 我使用以下代码建立了自定义
  • 从 Gradle 托管设备运行的 Android 模拟器复制数据

    在使用管理的 Android 模拟器上运行 UITests 时Gradle 管理的设备 https developer android com studio test gradle managed devices 如何复制屏幕截图 黄瓜报告
  • 减慢绑定DataGrid的刷新率

    我的 WPF C 应用程序中有一个 DataGrid 它绑定到实体框架集合 每行都有经常更改的绑定列 每秒多次 这会导致该列基本上不可读 因为它经常更改 如何强制 WPF 仅每 0 5 秒或 1 秒显示一个新值 即使该值每 0 1 秒更改一
  • 在 Snow Leopard 中控制 OS X 音量

    这是后续通过 Objective C 控制 Mac OS X 中正在运行的应用程序的音量 https stackoverflow com questions 5109971 controlling volume of running app
  • 使用pyenv安装anaconda,无法配置虚拟环境

    我正在使用 pyenv 来管理 python 安装和虚拟环境 我希望 anaconda 成为这样的安装之一 并且能够使用 anaconda python 创建虚拟环境 使用pyenv install anaconda3 2019 03成功安
  • 如何确定给定类型 (System.Type) 是否继承自特定基类(在 .Net 中)?

    这可能是一个简单的答案 我只是错过了一些东西 但是这里 如果我有一个类型 即 一个实际的 System Type 不是一个实例 我如何判断它继承自另一个特定的基类型 Use the 是子类 http msdn microsoft com e
  • 如何从带有列表的嵌套字典构建多索引 Pandas DataFrame

    我有以下字典 d key1 sub key1 a b c d e key2 sub key2 1 2 3 5 8 9 10 在 的帮助下this https stackoverflow com questions 13575090 cons
  • jQuery - 替换字符串中的所有括号

    我试过这个 mystring mystring replace g replace g replace replace 它适用于所有双引号和单引号 但对于括号 这只替换字符串中的第一个括号 如何使用 JavaScript 替换字符串中的所有
  • 如何正确解析传入的 HTTP 请求

    我使用 WinSck 创建了一个 C 应用程序 它实现了一个小型 仅处理我需要的一些功能 http 服务器 这用于使用 http 请求与外界进行通信 它可以工作 但有时请求无法正确处理 因为解析失败 现在我非常确定请求的格式正确 因为它们是
  • Rails 中无法转储文件错误

    我正在使用 Rails 3 0 3 开发一个应用程序 我在以下代码中收到 无法转储文件 错误 if post update attributes params post redirect to post path post lt ERROR
  • 将 substring() 的 endIndex 减 1 的原因[重复]

    这个问题在这里已经有答案了 可能的重复 为什么 from 索引是包含的 而 end 索引是排除的 https stackoverflow com questions 6339158 why from index is inclusive b
  • v7 中 GroebnerBasis 的奇怪行为

    我在使用时遇到了一些奇怪的行为GroebnerBasis In m1下面 我使用希腊字母作为变量 并在m2 我用了一个拉丁字母 他们俩都没有与之相关的规则 为什么根据我选择的变量 我会得到截然不同的答案 Image 可复制代码 Clear
  • 如何禁用目录浏览?

    我想禁用 galerias 文件夹和所有子目录的目录浏览 索引 galerias 409 Parent Directory i1269372986681 jpg i1269372986682 jpg i1269372988680 jpg 创
  • iOS:MPMusicPlayerControllerPlaybackStateDidChangeNotification 在某些设备上多次调用

    我有一个播放音乐的应用程序 我使用以下代码来监听 MPMusicPlayerController 中的播放状态更改以更新 UI 更准确地说 我在播放和暂停之间切换播放按钮的外观 NSNotificationCenter notificati
  • Android Exoplayer:是否可以使用 exoplayer 从 Firebase 存储流式传输视频?

    在android中有一个库叫做外放播放器这与从给定网址流式传输视频有关 现在根据this https stackoverflow com questions 42053822 load video from firebase storage