在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(使用前将#替换为@)