保存和播放使用 Firebase 存储下载的视频

Posted

技术标签:

【中文标题】保存和播放使用 Firebase 存储下载的视频【英文标题】:saving and playing videos downloaded with firebase storage 【发布时间】:2020-06-15 06:10:39 【问题描述】:

我的应用可以从 firebase 下载视频内容,将其保存到 Application.dataPath,然后在编辑器中播放。但是,当我将它构建到 ios 时,它找不到该文件。我也尝试过使用应用程序。 persistentData 但它似乎确实存在。 有什么有用的建议吗?

// _____ 原谅我丑陋的代码:/ ______ // ____ 我已经删除了糟糕的 cmets 等,进行了整理,但我认为这让我了解了我正在使用的技巧 ...

    public void FUKN_download_viddy()
    
    FirebaseStorage storage = FirebaseStorage.DefaultInstance;
    StorageReference path_reference = storage.GetReference("videoname.mp4");

    pathToSaveTo =  "file://" +
    Application.dataPath +
    "/Resources/Adam/Year 1 Semester 1/"+
    "videoname.mp4";

    path_reference.GetFileAsync(pathToSaveTo).ContinueWith(task => 
    if (!task.IsFaulted && !task.IsCanceled)
    
    Debug.Log("File downloaded.");
    
    );
    

    // ____________




    // _________

    public void FUKN_play_viddy()
    
    string viddyplayerpath = "Adam/Year 1 Semester 1/" + "videofile";

    var viddyKlip = Resources.Load<VideoClip>(viddyplayerpath);

    VideoPlayer videoPlayer = GetComponent<VideoPlayer>();
    videoPlayer.clip = viddyKlip;    // index offset
    videoPlayer.Play();


    
    // _________


【问题讨论】:

请提供代码示例,以便人们可以使用。 【参考方案1】:

我认为您的问题是Resources.Load 提取了包含在Assets/Resources 目录中的元素,而不是您的文件系统(请参阅the doc page)。

您想使用 VideoPlayer.src,如 here 所述。

例如:

public class TestVideo: MonoBehaviour 
    [SerializeField] private VideoPlayer _videoPlayer;

    public Play() 
        _videoPlayer.src = "file://" + Application.persistentDataPath + "/Resources/Adam/Year 1 Semester 1/" + "videoname.mp4";
        _videoPlayer.Play();
    

请注意,我使用了persistentDataPath,dataPath 在 iOS 和 android 上将是只读的。

希望对你有帮助!

--帕特里克

【讨论】:

谢谢帕特里克,哇哦,你是来自 firebase 教程视频的人!著名的!我一直在研究你的视频,你在这里发表评论..但仍然无法正常工作。我希望我的用户能够将非常短的视频剪辑下载到他们的 iOS 或 Android 设备上。他们不需要上传任何东西。 (这些将由我通过控制台上传)如果他们愿意,他们将能够删除视频。当您说 persistentDataPath 和 dataPath 在 iOS 和 Android 上是只读的时,这是否意味着我无法从 firebase 下载并将它们保存到设备..? 我的代码在 Unity 编辑器中工作,但是在构建到 iOS 后,文件似乎没有下载。以下是我怀疑我做错的代码: ` pathToSaveTo = Application.persistentDataPath + "/" + "Y1_002_election.mp4"; FirebaseStorage 存储 = FirebaseStorage.DefaultInstance; StorageReference path_reference = storage.GetReference("Y1_002_election.mp4"); path_reference.GetFileAsync( pathToSaveTo ).ContinueWith(task => if (!task.IsFaulted && !task.IsCanceled) print( "downloaded"); else print "未下载"; ` // _________ if (File.Exists(pathToSaveTo) == true) // 在 iOS 上这似乎总是错误的 ViddyPlayer.url = pathToSaveTo; ViddyPlayer.Play(); display4.text = "播放视频"; else display4.text = " 计算机 sez no"; // 这是显示的 // _________ 帕特里克!感谢您的帮助和耐心!我想通了!!!我制作了一个 youtube 视频,希望对某人有所帮助 :) youtu.be/SbVYYsBs14w

以上是关于保存和播放使用 Firebase 存储下载的视频的主要内容,如果未能解决你的问题,请参考以下文章

使用 Flutter Web 和 Firebase 存储播放视频

减少 Firebase 存储带宽

使用来自 firebase 存储的 react-native-video 播放视频

应用关闭后本地保存的视频不再播放

Android - 将视频/音频文件上传到 Firebase 存储

从 Firebase 存储下载并播放 .mp3 文件到内存