在Android 4及以上版本中,是否可以从URL显示视频缩略图?

12

以下两种方法在模拟器(2.3.3)上都可以正常运行,但在真机(Nexus S with 4.1.2)上缩略图没有显示图片。我还会尝试在一个 Android 4 模拟器 上运行它。如果我为 ImageView 设置了默认的 android:src,那么它就不再显示了。这让我觉得它被替换了,但是这个 ImageView 是空的。

public class MainActivity extends Activity {

    ImageView img;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        img = (ImageView)findViewById(R.id.img_thumbnail);
        new MyAsync().execute("http://commonsware.com/misc/test.mp4");
    }

    //This version is still not working, but it's more readable (edited: Selvin).
    public class MyAsync extends AsyncTask<String, Void, Bitmap>{

        @Override
        protected Bitmap doInBackground(String... objectURL) {
            //return ThumbnailUtils.createVideoThumbnail(objectURL[0], Thumbnails.MINI_KIND);
            return ThumbnailUtils.extractThumbnail(ThumbnailUtils.createVideoThumbnail(objectURL[0], Thumbnails.MINI_KIND), 100, 100);
        }

        @Override
        protected void onPostExecute(Bitmap result){
             img.setImageBitmap(result);
        }
    }
}

我知道之前有一个类似的问题被提出过,从远程视频URL在Android设备上显示视频缩略图,但是我已经尝试过了,结果相同。

为什么这在设备上不起作用,如何让它起作用?


2
定义不起作用...有任何logcat日志吗? - Selvin
所以在提取后,bmThumbnail为空?尝试在AsyncTask中调用extract... - Selvin
@AlexAndro 请检查您的互联网连接。 - Dipak Keshariya
@Selvin 嗯...现在我明白为什么ImageView是空的了。不管怎样,我觉得奇怪的是一个在2.3上能够正常工作的问题,在4上却不能。我认为被迫下载视频是荒谬的。虽然这只是一个测试视频,但想象一下下载更大的文件......你能告诉我你在哪里找到那些细节,证明filePath指的是本地文件吗? - AlexAndro
在安卓5上也不起作用,应该怎么办? - Criss
显示剩余5条评论
3个回答

2

1
我已经尝试了你的库,它可以正常工作。使用描述中的示例代码,Bitmap b = mmr.getFrameAtTime(2000000, FFmpegMediaMetadataRetriever.OPTION_CLOSEST); 是有效的!无论如何,byte [] artwork = mmr.getEmbeddedPicture(); 返回的是 null - AlexAndro
太卡了,我还在寻找一种可行的方法来获取本地文件的缩略图,即文件路径或URI。 - Lion789
这个库的大小几乎达到了25MB! - Amir Hossein Ghasemi
@AmirHosseinGhasemi,是的。这是因为AAR必须包含每个ABI的单独二进制文件,因为它使用NDK。解决方法是使用提供的Gradle flavors或预构建的AAR,并为每个架构构建单独的APK。 - William Seemann

0
在2.3版本中,当尝试从缓存文件夹中的文件制作缩略图时,遇到了相同的问题。设置权限标志解决了这个问题:
videoFile.setReadable(true, false);

3
2.3 版本运行正常,问题出在 4+ 版本的在线视频上。 - AlexAndro

0

这在Android和Java以及据我所知的任何其他语言中都是不可能的,除非下载整个视频(如果我错了请纠正我)。YouTube和任何其他大型视频服务提供简单的API获取视频缩略图是有充分理由的。因此,如果存放视频的服务器不支持此类API调用,你就运气不佳。


实际上我的视频存储在亚马逊上。他们提供了这样一种API。使用上述方法,我成功地在Android 2.3模拟器上使用递归线程生成了500多个缩略图,大约用了2个小时的时间。那些视频占用了超过32GB的空间,所以...我不知道模拟器背后的工作原理,但如果它下载了视频,我想我会观察到这样一个内存占用空间。也许这是一些临时性的东西,我不知道该说什么,但它肯定在2.3上运行,并且在Android 4+上无法运行。 - AlexAndro
@AlexAndro 我只能说之前的解决方案之所以有效可能是由于一个错误,它至少没有遵循文档。 - Warpzit
谢谢回复,但我认为这不是一个错误,因为存在类ThumbnailUtils.createVideoThumbnail,文档明确说明它可以“为视频创建缩略图”。当然,它没有提到存储,当你看到Path时,通常会想到本地存储。可能是4.0+版本的一个错误,因为什么都没有发生(没有警告、没有错误、没有异常等)。 - AlexAndro
好的,我需要找到本地视频的源文件(文件路径或URI),以便能够将其发送到我的服务器,我该如何做呢? - Lion789
@Lion789,你的服务器需要有原始视频才能生成缩略图。 - Warpzit
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接