使用Google Photos 应用程序,我正在尝试选择一个未缓存在设备上的视频。
我正在使用ACTION_GET_CONTENT意图来启动选项对话框,然后从那里选择 Google Photos 应用程序。
在选择本地视频时,它会以这种形式返回一个 Uri。
内容://媒体/外部/视频/媒体/6708
然后,我查询内容提供程序以检索实际文件位置,然后从那里继续。文件位置如下所示。
/storage/emulated/0/WhatsApp/Media/WhatsApp Video/VID-20131102-WA0000.mp4
现在,当我选择在线视频时,即:我的设备上还没有视频,需要下载才能使用,返回的 Uri 如下所示:
content://com.google.android.apps.photos.content/1/ https://lh6.googleusercontent.com/_RD-QTO_SK5jlaPldTe2n5GANqMc3h-ukcbNoFlF1NLy=s0-d
现在,有了这个,没有记录的 ContentProvider 可以帮助我获得该视频的实际链接。即使我进行查询,除了 DISPLAY_NAME 和 SIZE 列之外,它不会返回任何内容。
DISPLAY_NAME包含 video.mpeg(不同视频的显示名称相同)
SIZE可能会告诉我实际文件的大小。
我检查了各种帖子,并认为我必须通过内容提供程序获取视频的 InputStream,保存文件并使用该文件。但是,选择图像文件可以正常工作,但对于视频则不行。
所以,要将流复制到文件中,我有这段代码。
InputStream inputStream = context.getContentResolver().openInputStream(Uri.parse(path));
最后写入一个临时文件。该文件已创建,但似乎格式不正确。VLC 播放文件,但始终只显示第一帧。
如果我从上面给出的 URI 的最后部分获取 URL,并尝试在浏览器上查看它,它会下载一个 GIF 文件。我猜这就是问题所在。但我不知道如何获得视频的mpeg格式。
有人有过同样的经历吗?