【问题标题】:Display a video in a VideoView from Firebase URL in Android在 Android 的 Firebase URL 的 VideoView 中显示视频
【发布时间】: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 来回答不相关的问题,其唯一目的是链接到这个问题吗?

标签: android android-arrayadapter android-videoview


【解决方案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_width="300dp"
    android:layout_height="300dp" />

【讨论】:

  • 我很想知道它是否与RecyclerView 一起工作(没有外部库的帮助),但我很高兴你让ListView 工作。
  • 当您的新优化存储库准备就绪时,不要忘记链接它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多