【问题标题】:How to stream videos from firebase cloud storage instead of downloading the whole video file [duplicate]如何从firebase云存储流式传输视频而不是下载整个视频文件[重复]
【发布时间】:2021-12-29 23:56:39
【问题描述】:

一直在谷歌搜索以了解这个概念但没有得到明确的答案,我想知道在 firebase 云存储中使用 getdownloadurl() 是否可以让视频一点一点地流式传输,而不是一次下载所有视频文件,我也想知道firebase是否不是最好的选择。 我想要做的是创建一个 android 应用程序,可以在其中流式传输其他用户上传的视频,但我不希望在请求后下载一次视频我需要一点一点下载视频并改变质量在网络连接上观看视频,而不是一次下载所有视频,这真的很慢。

【问题讨论】:

  • Google 云存储不支持任何 A/V 流式传输或转码协议。它只支持完整的顺序对象下载。虽然您当然可以通过 HTTP 下载“流式传输”视频,但它的播放速度仅与可以下载原始对象的速度一样快,从对象的开头开始,您将无法在媒体中向前或向后滑动超出已经转移的范围。

标签: android video google-cloud-storage firebase-storage


【解决方案1】:

你能在 Android 中使用原生的 VideoView 对象吗?此示例有一个静态 URL,就像您从 Firebase 获得的一样:https://www.geeksforgeeks.org/how-to-play-video-from-url-in-android/

显然,您需要先获取“下载 URL”,然后将其用作您的来源。

import android.net.Uri;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.VideoView;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    // Your Video URL
    String videoUrl = "https://media.geeksforgeeks.org/wp-content/uploads/20201217192146/Screenrecorder-2020-12-17-19-17-36-828.mp4?_=1";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // finding videoview by its id
        VideoView videoView = findViewById(R.id.videoView);

        // Uri object to refer the
        // resource from the videoUrl
        Uri uri = Uri.parse(videoUrl);
        
        // sets the resource from the
        // videoUrl to the videoView
        videoView.setVideoURI(uri);
        
        // creating object of
        // media controller class
        MediaController mediaController = new MediaController(this);
        
        // sets the anchor view
        // anchor view for the videoView
        mediaController.setAnchorView(videoView);
        
        // sets the media player to the videoView
        mediaController.setMediaPlayer(videoView);
        
        // sets the media controller to the videoView
        videoView.setMediaController(mediaController);
        
        // starts the video
        videoView.start();
    }
}

【讨论】:

  • 是的,这意味着不是主机(即 Firebase)的工作来决定您是要下载完整文件还是流式传输它。这就是客户的角色。
猜你喜欢
  • 1970-01-01
  • 2018-01-13
  • 2019-11-04
  • 2013-11-08
  • 2020-08-26
  • 1970-01-01
  • 1970-01-01
  • 2019-12-10
  • 1970-01-01
相关资源
最近更新 更多