我正在制作视频应用.我正在从服务器链接流式传输视频,我是否可以在不下载视频的情况下从URL生成视频缩略图.
我正在尝试使用Glide逐步浏览视频文件中的帧(而不会遇到关键帧寻求Android遭受的问题).我可以通过以下方式在毕加索做到这一点:
picasso = new Picasso.Builder(MainActivity.this).addRequestHandler(new PicassoVideoFrameRequestHandler()).build();
picasso.load("videoframe://" + Environment.getExternalStorageDirectory().toString() +
"/source.mp4#" + frameNumber)
.placeholder(drawable)
.memoryPolicy(MemoryPolicy.NO_CACHE)
.into(imageView);
Run Code Online (Sandbox Code Playgroud)
(frameNumber只是一个int,每次增加50000微秒).我也有像这样的PicassoVideoFrameRequestHandler:
public class PicassoVideoFrameRequestHandler extends RequestHandler {
public static final String SCHEME = "videoframe";
@Override public boolean canHandleRequest(Request data) {
return SCHEME.equals(data.uri.getScheme());
}
@Override
public Result load(Request data, int networkPolicy) throws IOException {
FFmpegMediaMetadataRetriever mediaMetadataRetriever = new FFmpegMediaMetadataRetriever();
mediaMetadataRetriever.setDataSource(data.uri.getPath());
String offsetString = data.uri.getFragment();
long offset = Long.parseLong(offsetString);
Bitmap bitmap = mediaMetadataRetriever.getFrameAtTime(offset, FFmpegMediaMetadataRetriever.OPTION_CLOSEST);
return new Result(bitmap, Picasso.LoadedFrom.DISK);
}
}
Run Code Online (Sandbox Code Playgroud)
我想改用Glide,因为它可以更好地处理内存.有没有办法在Glide中使用此功能?
或者,实际上,从视频中创建一组帧的任何其他方式,我可以单步执行!
谢谢!
以下两个在仿真器(2.3.3)上工作正常,但在真实设备(带有4.1.2的Nexus S)上没有显示缩略图的图像.我也会尝试运行它Android 4 Emulator.如果我android:src为其设置了默认值ImageView,则不再显示.这让我觉得它被替换了,但是它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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我知道之前已经提出类似的问题, …
我想从我的画廊中选择一个视频.它工作正常.但现在我想显示一个Bitmap,作为缩略图.我厌倦了这段代码,它不起作用,它总是说:NullPointerException
Bitmap bitmap2 = ThumbnailUtils.createVideoThumbnail(uri.getPath, MediaStore.Video.Thumbnails.MICRO_KIND);
Run Code Online (Sandbox Code Playgroud)
这都在onActivityResult中.
如何从视频Uri中获取位图?
谢谢你的帮助
想要tumbnails从任何网站的 url创建。我正在使用以下代码
Bitmap bmThumbnail;
bmThumbnail = ThumbnailUtils.createVideoThumbnail(videoLink,
MediaStore.Video.Thumbnails.MICRO_KIND);
Run Code Online (Sandbox Code Playgroud)
但它不起作用,请提出任何其他方法(如果存在)。
如何创建url视频表单服务器的图像/缩略图
我尝试不工作(不显示缩略图)
String String url = "http://clips.vorwaerts-gmbh.de/VfE_html5.mp4";
Bitmap thumb = ThumbnailUtils.createVideoThumbnail(url,MediaStore.Images.Thumbnails.MINI_KIND);
Glide.with(context).load(thumb).asBitmap()
/*.override(convertDpToPx(100), convertDpToPx(100))*/
.placeholder(R.drawable.camera)
.override(200, 200)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(new BitmapImageViewTarget(img_view) {
protected void setResource(Bitmap resource) {
RoundedBitmapDrawable circularBitmapDrawable =
RoundedBitmapDrawableFactory.create(context.getResources(), resource);
//circularBitmapDrawable.setCircular(true);
img_view.setImageDrawable(circularBitmapDrawable);
}
});
Run Code Online (Sandbox Code Playgroud)
我通过回答1解决它!
但是它在缩略图方面遇到了一些问题,它的变化颜色就是标准.
例