如何在 Android 中获取视频的位置数据?

Posted

技术标签:

【中文标题】如何在 Android 中获取视频的位置数据?【英文标题】:How can I get the location data of a video in Android? 【发布时间】:2015-03-29 18:11:27 【问题描述】:

我正在尝试获取存储在我的应用用户手机上的视频文件的元数据。我可以得到文件名、id、拍摄日期等等。但是,纬度和经度数据始终返回为 0.0。我一直在说这个:

developer.android.com/reference/android/provider/MediaStore.Video.VideoColumns.html

是的,我已经在我的设置中启用了使用位置。对于可以正常工作的图像,我有一个与此非常相似的功能。

public void getLocalVideoFiles(Context context) 
    ContentResolver videoResolver = context.getContentResolver();
    Uri videoUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
    String test = getRealPathFromURI(context, videoUri);
    Cursor videoCursor = videoResolver.query(videoUri, null, null, null, null);

    if(videoCursor!=null && videoCursor.moveToFirst())
        //get columns
        int latColumn = videoCursor.getColumnIndex
                (MediaStore.Video.Media.LATITUDE);
        int lonColumn = videoCursor.getColumnIndex
                (MediaStore.Video.Media.LONGITUDE);

        do 
            String thisLat = Double.toString(videoCursor.getDouble(latColumn));
            String thisLon = Double.toString(videoCursor.getDouble(lonColumn));

            Log.d("video Latitude",thisLat);
            Log.d("video Longitude",thisLon);
        
        while (videoCursor.moveToNext());
    
    return localClips;

此处描述的方法:Geotagging a captured video 产生类似的结果(METADATA_KEY_LOCATION 列中的空值)。

所以,我的问题是: 内置的 Android 视频工具在创建视频时会记录位置数据吗?似乎答案是否定的,但我不明白如果是这种情况,为什么会有位置数据列。如果不是这种情况,我如何访问视频位置数据?我需要已经拍摄的视频文件的位置。

提前致谢!

【问题讨论】:

几个后续问题: 1.你确定你对数据库的查询是正确的吗? (你得到一个实际的光标吗?你能从中得到其他值吗?)。 2、你确定你查询的视频确实有信息吗?您是否尝试查询您知道具有该元数据的视频? 是的。我从示例代码中删除了额外的查询,以使问题更清晰。但是,这种方法确实成功地返回了文件名和创建时间戳。 lat,lon 列只有 0,0。 【参考方案1】:

我刚刚测试了你的假设,即谷歌在录制视频时不会保留位置数据,这是不正确的。

例如: 使用我的 nexus 5 和 5.1 版,我能够在我刚刚拍摄的视频上获得地理标签。您可以自己尝试,如果您的手机已root,只需使用一些SQLITE viewer 浏览MediaStore 外部数据库(com.android.providers.media)

但假设 google 不保留 GeoTag。他们保留这样一个专栏的原因有很多:

支持其他想要保留地理标记的视频库

允许正在实施录像机的用户以一种方式保存当前位置(使用 FusedLocation 或类似的东西)。一种方法就是更新数据库中的相关行,例如:

getContentResolver().update(MediaStore.Video.Media.EXTERNAL_CONTENT_URI.buildUpon().appendPath("2152").build(), cv, null, null);

支持以前支持标记的版本

【讨论】:

是的。我正要回来写这个。我今天在朋友的三星(使用相同版本的Android)上对其进行了测试,并且位置数据在那里。问题是我最初只在我的 HTC 上测试,它没有数据,正如我在原始问题中描述的那样。所以,这似乎是关于供应商,而不是味道(这也很神秘。) 因为有超过 18,796 种不同的设备使用 android 系统运行,我猜你会发现一些(或很多)神秘的东西(-:. 希望你愿意考虑接受我的问题。

以上是关于如何在 Android 中获取视频的位置数据?的主要内容,如果未能解决你的问题,请参考以下文章

Android:如何获取应用程序私有文件的视频缩略图?

Android:如何获取经度和纬度的当前位置?

如何创建从Android视频文件路径视频缩略图

如何在android中获取ListView反向位置?

如何在 Android WebView 中播放 YouTube 视频?

如何在android webview中获取完成youtube视频的事件