Android Exoplayer:是否可以使用exoplayer从Firebase存储流式传输视频? [英] Android Exoplayer: Is it possible to use exoplayer to stream video from firebase storage?

查看:162
本文介绍了Android Exoplayer:是否可以使用exoplayer从Firebase存储流式传输视频?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在android中,有一个名为 Exoplayer 的库,该库与流处理来自给定URL的视频有关.

In android there is a library called Exoplayer that has to do with streaming a video from a given url.

现在,根据 Firebase不支持视频流,即使您可以将uri从网址传递到视频视图(它实际上也会流式传输).

Now according to this firebase doesn't support video streaming, eventhough you can pass a uri from the url to the videoview (and it will actually stream).

问题:

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

Can exoplayer be used to stream a video from firebase storage?

为什么即使使用videoview,firebase也无法进行流传输?

Why firebase states streaming is not possible eventhough it can be done with a videoview?

推荐答案

是可以从Firebase流式传输视频.

yes its possible to stream videos from firebase.

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

first create an exoplayer in your xml file

<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,因为稍后我会通过编程方式将高度设置为

i have set the height as 0 cuz im gonna fix the height programmatically later

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

then declare simple SimpleExoPlayer in your activity as player.

 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);




            }
        });

这篇关于Android Exoplayer:是否可以使用exoplayer从Firebase存储流式传输视频?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆