在 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 存储中的位图图像