您的位置:首页 > 理论基础 > 计算机网络

如何获取网络视频(或者说后台返回视频URL)第一帧图片以及获取本地视频的第一帧图片

2017-08-01 19:52 459 查看
在项目开发的时候,有可能会有这样的一种需求:有一段视频需要展示给用户,在界面上先展示视频上的某一帧图片,用户点击的时候再去获取视频资源进行播放。这时,服务器会先给我们返回视频的url,这个时候就需要通过视频url去获取第一帧图片进行展示了!具体代码实现如下:

获取网络视频第一帧图片代码:

/**
*  服务器返回url,通过url去获取视频的第一帧
*  Android 原生给我们提供了一个MediaMetadataRetriever类
*  提供了获取url视频第一帧的方法,返回Bitmap对象
*
*  @param videoUrl
*  @return
*/
public static Bitmap getNetVideoBitmap(String videoUrl) {
Bitmap bitmap = null;

MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try {
//根据url获取缩略图
retriever.setDataSource(videoUrl, new HashMap());
//获得第一帧图片
bitmap = retriever.getFrameAtTime();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} finally {
retriever.release();
}
return bitmap;
}


其中函数getFrameAtTime()有其他重载函数,该函数会随机选择一帧抓取,如果想要指定具体时间的缩略图,可以用函数getFrameAtTime(long timeUs), getFrameAtTime(long timeUs, int option),具体如何使用可以查doc。

当用户点击播放过该视频后,这时候一般都会对该视频进行缓存操作,下次用户播放的时候,直接获取本地视频播放即可,不需要再去请求服务器获取资源,这个时候我们就可以获取本地视频的第一帧图片进行展示

获取本地视频第一帧图片代码:

/**
* 获取本地视频的第一帧
*
* @param localPath
* @return
*/
public static Bitmap getLocalVideoBitmap(String localPath) {
Bitmap bitmap = null;
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try {
//根据文件路径获取缩略图
retriever.setDataSource(localPath);
//获得第一帧图片
bitmap = retriever.getFrameAtTime();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} finally {
retriever.release();
}
return bitmap;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: