当前位置: 首页 > 知识库问答 >
问题:

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

彭洲
2023-03-14

在android中,有一个名为Exoplayer的库,它与从给定URL流媒体视频有关。

根据这一点,firebase不支持视频流,尽管您可以将uri从url传递到videoview(它实际上会流)。

问题:

共有1个答案

巢烨
2023-03-14

是的,它可以从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 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);




            }
        });
 类似资料:
  • 我将mp4视频转码成若干帧速率,如5FPS、10FPS。。30FPS,并使用MP4Box将其分段,以便在DASH IF播放器中播放。 FFMPEG命令生成具有相同分辨率的多帧视频: ffmpegfball.mp4-f mp4-vcodec libx264-配置文件: v高-vf刻度=1280:-1-b: v1000k-minate1000k-maxate1000k-bufsize1000k-nal

  • 我正在开发一个有视频流功能的应用程序。我正在使用firebase数据库和firebase存储。我试图找到一些关于firebase存储如何处理视频文件的文档,但真的找不到太多。

  • 问题内容: 当我尝试从Rails调用存储过程时,出现以下异常: Rails Wiki中 有一个页面讨论用于解决此问题的MySQL适配器的修补程序,但是它已过时,似乎不再起作用。 配置代码正确地启用了存储过程,但是在存储过程调用之后连接仍然不同步并且新方法不再起作用,仍然存在问题。 关于如何使它工作的任何建议? 这是我正在使用的代码: 无论是否返回任何结果,它都会引发相同的异常。 问题答案: 将程序

  • 我正在发送视频帧的形式的JPEG图像到我的服务器上的RMTP流。在服务器端,我希望将流(ip+端口)连接到ffmpeg,这样它就可以从流中获取图像,并从中创建视频流。 实际上,我的服务器正在监听一个IP和端口来接收帧。这部分完成了。我遇到的问题是如何使用FFMPEG将这些帧转换成视频流。谁能告诉我如何做到这一点吗?我知道是我应该使用的,但我在Google上没有找到它的语法和文档。

  • 问题内容: 我正在从另一个来源接收ZipInputStream,并且需要将第一项的InputStream提供给另一个来源。 我希望能够在不将临时文件保存在设备上的情况下执行此操作,但是,我知道获取单个条目的InputStream的唯一方法是通过ZipFile.getInputStream(entry),并且因为我有一个ZipInputStream而不是ZipFile , 这是不可能的。 所以我最好

  • 问题内容: 我需要开发一个可长期离线运行的Web应用程序。为了使它可行,我无法避免将敏感数据(个人数据,而不是您将仅存储散列数据的类型)保存在本地存储中。 我接受不建议这样做,但是我几乎没有选择要执行以下操作来保护数据: 使用斯坦福JavaScript加密库和AES-256将所有内容都加密到本地存储中 用户密码是加密密钥,未存储在设备上 通过ssl从单个受信任的服务器提供所有内容(在线时) 使用o