17 个解决方案
#1
没人顶几贴?
#2
占个位置,坐等高人解答
#3
nobody reply post?
#4
JAVA实现
/**
* Create a video thumbnail for a video. May return null if the video is
* corrupt.
*
* @param filePath
*/
public static Bitmap createVideoThumbnail(String filePath) {
Bitmap bitmap = null;
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try {
retriever.setMode(MediaMetadataRetriever.MODE_CAPTURE_FRAME_ONLY);
retriever.setDataSource(filePath);
bitmap = retriever.captureFrame();
} catch (IllegalArgumentException ex) {
// Assume this is a corrupt video file
} catch (RuntimeException ex) {
// Assume this is a corrupt video file.
} finally {
try {
retriever.release();
} catch (RuntimeException ex) {
// Ignore failures while cleaning up.
}
}
return bitmap;
}
/**
* Create a video thumbnail for a video. May return null if the video is
* corrupt.
*
* @param filePath
*/
public static Bitmap createVideoThumbnail(String filePath) {
Bitmap bitmap = null;
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try {
retriever.setMode(MediaMetadataRetriever.MODE_CAPTURE_FRAME_ONLY);
retriever.setDataSource(filePath);
bitmap = retriever.captureFrame();
} catch (IllegalArgumentException ex) {
// Assume this is a corrupt video file
} catch (RuntimeException ex) {
// Assume this is a corrupt video file.
} finally {
try {
retriever.release();
} catch (RuntimeException ex) {
// Ignore failures while cleaning up.
}
}
return bitmap;
}
#5
这个方法我在网上找到过,可captureFrame()这个方法不知道是得到第一针的图片还是当前一针的图片?,我想根据指定的某个时间点上面的视频截图。
#6
不一定是第一帧,看了下opencore里的代码,应该是按照某种算法选取了一帧。具体应该是在编码的时候决定的(C++不熟,看起来很费劲,呵呵)。记得以前源码里有直接截取第一秒的,后来的版本这个实现都被去掉了。
#7
我的那个视频是在surfaceView 里面播放的,所以我希望不用在video里面去得到图片,想在surface里面去得到一张图片,又可以不是thumbnail 了。
#8
没看到好的解决方案
#9
看android自带Camera源码
#10
看了他上面用的是captureframe截取片头的。
#11
不一定是第一帧,看了下opencore里的代码,应该是按照某种算法选取了一帧。具体应该是在编码的时候决定的(C++不熟,看起来很费劲,呵呵)。记得以前源码里有直接截取第一秒的,后来的版本这个实现都被去掉了。
#12
说一样的话,有没有截取的是当前播放的帧图片
#13
似乎默认没有,需要自己去实现!
#14
再次来到这,跟踪研究ThumbnailUtils里面的createVideoThumbnail方法。
不论它用的什么算法取得哪一帧,只要找到在哪是实现的,改称我们想要的就ok阿!
不论它用的什么算法取得哪一帧,只要找到在哪是实现的,改称我们想要的就ok阿!
#15
回调用OPENCORE去取一个关键帧出来,代码产考/external/opencore/engines/adapters/player/framemetadatautility/src/pv_frame_metadata_utility.cpp
#16
Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(VIDEO_FILE_PATH+files.getName(), Video.Thumbnails.MINI_KIND);
#17
虽然结贴了. 还是想知道楼主最后解决了吗?
#1
没人顶几贴?
#2
占个位置,坐等高人解答
#3
nobody reply post?
#4
JAVA实现
/**
* Create a video thumbnail for a video. May return null if the video is
* corrupt.
*
* @param filePath
*/
public static Bitmap createVideoThumbnail(String filePath) {
Bitmap bitmap = null;
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try {
retriever.setMode(MediaMetadataRetriever.MODE_CAPTURE_FRAME_ONLY);
retriever.setDataSource(filePath);
bitmap = retriever.captureFrame();
} catch (IllegalArgumentException ex) {
// Assume this is a corrupt video file
} catch (RuntimeException ex) {
// Assume this is a corrupt video file.
} finally {
try {
retriever.release();
} catch (RuntimeException ex) {
// Ignore failures while cleaning up.
}
}
return bitmap;
}
/**
* Create a video thumbnail for a video. May return null if the video is
* corrupt.
*
* @param filePath
*/
public static Bitmap createVideoThumbnail(String filePath) {
Bitmap bitmap = null;
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try {
retriever.setMode(MediaMetadataRetriever.MODE_CAPTURE_FRAME_ONLY);
retriever.setDataSource(filePath);
bitmap = retriever.captureFrame();
} catch (IllegalArgumentException ex) {
// Assume this is a corrupt video file
} catch (RuntimeException ex) {
// Assume this is a corrupt video file.
} finally {
try {
retriever.release();
} catch (RuntimeException ex) {
// Ignore failures while cleaning up.
}
}
return bitmap;
}
#5
这个方法我在网上找到过,可captureFrame()这个方法不知道是得到第一针的图片还是当前一针的图片?,我想根据指定的某个时间点上面的视频截图。
#6
不一定是第一帧,看了下opencore里的代码,应该是按照某种算法选取了一帧。具体应该是在编码的时候决定的(C++不熟,看起来很费劲,呵呵)。记得以前源码里有直接截取第一秒的,后来的版本这个实现都被去掉了。
#7
我的那个视频是在surfaceView 里面播放的,所以我希望不用在video里面去得到图片,想在surface里面去得到一张图片,又可以不是thumbnail 了。
#8
没看到好的解决方案
#9
看android自带Camera源码
#10
看了他上面用的是captureframe截取片头的。
#11
不一定是第一帧,看了下opencore里的代码,应该是按照某种算法选取了一帧。具体应该是在编码的时候决定的(C++不熟,看起来很费劲,呵呵)。记得以前源码里有直接截取第一秒的,后来的版本这个实现都被去掉了。
#12
说一样的话,有没有截取的是当前播放的帧图片
#13
似乎默认没有,需要自己去实现!
#14
再次来到这,跟踪研究ThumbnailUtils里面的createVideoThumbnail方法。
不论它用的什么算法取得哪一帧,只要找到在哪是实现的,改称我们想要的就ok阿!
不论它用的什么算法取得哪一帧,只要找到在哪是实现的,改称我们想要的就ok阿!
#15
回调用OPENCORE去取一个关键帧出来,代码产考/external/opencore/engines/adapters/player/framemetadatautility/src/pv_frame_metadata_utility.cpp
#16
Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(VIDEO_FILE_PATH+files.getName(), Video.Thumbnails.MINI_KIND);
#17
虽然结贴了. 还是想知道楼主最后解决了吗?