在 Android 的 Firebase URL 的 VideoView 中显示视频

Posted

技术标签:

【中文标题】在 Android 的 Firebase URL 的 VideoView 中显示视频【英文标题】:Display a video in a VideoView from Firebase URL in Android 【发布时间】:2017-06-09 01:13:51 【问题描述】:

当我运行我的应用程序时,我遇到了这些问题。

黑屏闪烁 2 秒,然后显示我的应用的实际意图。 视频开始播放,当我向上/向下滚动时,VideoView 变为白色并继续播放。无法观看视频,但在后台播放。 播放完成后,几秒钟后,我收到“无法播放此视频”对话框。

这是我的适配器代码的摘录:

public class MessageAdapter extends ArrayAdapter<Message> 
    private static class ViewHolder 
        TextView authorTextView, timeStamp, messageTitle, messageTextView;
        VideoView videoView;
        ImageView photoImageView;
    
    public View getView(int position, View convertView, ViewGroup parent) 
        // Gets the message that we are displaying at a position
        Message message = getItem(position);

        ...

        boolean isPhoto = message.getPhotoUrl() != null;
        boolean isVideo = message.getVideoUrl() != null;

        if (isPhoto) 
            // Photo Present

         else if (isVideo) 
            // Video present
            Log.d(TAG, "Video present !");
            viewHolder.messageTextView.setVisibility(View.GONE);
            viewHolder.photoImageView.setVisibility(View.GONE);
            viewHolder.timeStamp.setVisibility(View.VISIBLE);
            viewHolder.videoView.setVisibility(View.VISIBLE);
            viewHolder.videoView.setVideoPath(message.getVideoUrl());
            viewHolder.videoView.start();
            Log.d(TAG, "Video URL : "+message.getVideoUrl());
         else 
            // Photo and video both absent
        
        return convertView;
    

我在LogCat

显示 Logged 信息后,会出现如下警告,如下所示

D: Video present !
D: Video URL : https://firebasestorage.googleapis.com/v0/b/xxx.appspot.com/o/photos%2Fvideo%3A34334?alt=media&token=05xf6c2f-6abc-4ab9-b696-32153fa3d0aa
W: Couldn't open https://firebasestorage.googleapis.com/v0/b/xxx.appspot.com/o/photos%2Fvideo%3A34334?alt=media&token=05cf6c2f-6abc-4ab9-b696-32153fa3d0aa: java.io.FileNotFoundException: No content provider: https://firebasestorage.googleapis.com/v0/b/xxx.appspot.com/o/photos%2Fvideo%3A34334?alt=media&token=05cx6c2f-6abc-4ab9-b696-32153fa3d0aa
I: proxyName: 0.0.0.0 0
W: finishComposingText on inactive InputConnection
D: getMetadata
I: proxyName: 0.0.0.0 0
W: info/warning (703, 0)
I: proxyName: 0.0.0.0 0
V: Inactivity, disconnecting from the service
I: proxyName: 0.0.0.0 0
I: proxyName: 0.0.0.0 0
E: error (1, -2147483648)

这是我的VideoView 布局:

<VideoView 
    android:id = "@+id/admin_video_view"
    android:layout_width = "300dp"
    android:layout_height = "200dp"
    android:layout_weight = "1"
    android:layout_marginLeft = "10dp"
    android:paddingTop = "5dp"
    android:scaleType = "centerCrop" />

【问题讨论】:

Firebase 在哪里?您是否在其他设备或模拟器中启动过此应用? @CoolMind 这在我的 MainActivity 中。刚刚更新了我的问题。请参见上文。 现在我已经从 Firebase 存储本地下载到我的移动存储。从here 得到提示。现在的问题是,我在哪里设置 MessageAdapter 中的视频路径?或MainActivity ?你能指导我吗? @CoolMind 如果您尝试使用本地资源(如存储在raw 文件夹中的.mp4 电影),效果是否良好? @PC。你能避免写 cmets 来回答不相关的问题,其唯一目的是链接到这个问题吗? 【参考方案1】:

这里的罪魁祸首android.widget.VideoView,它扩展了SurfaceView

This blog 说:

ListView 的一行内使用VideoView 播放视频一开始似乎可行,直到用户尝试滚动列表。作为 一旦列表开始滚动,视频就会变黑(有时显示为白色)。它使 在后台播放,但你看不到它了,因为它 将视频的其余部分呈现为黑盒。

我编写了自己的 VideoView 类,它在 github 存储库的帮助下扩展了 TextureView。虽然它有一些问题,因为它是 3 年前写的,但我设法自己解决了它们。很快我将使用我的自定义 Optimized VideoView github 存储库更新此答案(只需进行少量修改)。在那之前,我提供的链接将对您有所帮助。

使用自定义Optimized VideoView,视频将在ListView 中滚动播放,就像我们的Instagram、Facebook、Twitter 一样。我们可以通过在我们的活动中将setOnTouchListener() 设置为VideoView 来使视频播放/暂停,并且可以按照我们自己的方式进行自定义。

现在,我们在布局中的VideoView 将是:

<your.packagename.VideoView
    android:id="@+id/admin_video_view"
    android:layout_
    android:layout_ />

【讨论】:

我很想知道它是否与RecyclerView 一起工作(没有外部库的帮助),但我很高兴你让ListView 工作。 当您的新优化存储库准备就绪时,不要忘记链接它。

以上是关于在 Android 的 Firebase URL 的 VideoView 中显示视频的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 动态链接 - 从 Play 商店安装应用程序后无法在 android 中获取 Url

在 Firebase Storage Android 中下载 Imageuri 的问题

为啥这不能检索 Firebase 存储上图像的下载 URL?

firebase auth 和 url_launcher 版本冲突

如何在不更改实时数据库中的 downloadUrl 的情况下更新 android 中 Firebase 存储中的位图图像

我可以使用 Firebase 动态链接作为 URL 缩短器吗?