- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 MediaMetadataRetriever 按视频帧创建缩略图,但我在 Logcat 中收到此消息:
E/MediaMetadataRetrieverJNI(14060): getFrameAtTime: videoFrame is a NULL pointer
这是我的代码:
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try {
Uri videoURI = Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.video_one);
retriever = new MediaMetadataRetriever();
retriever.setDataSource(mContext, videoURI);
Bitmap bitmap = retriever.getFrameAtTime(100000,MediaMetadataRetriever.OPTION_CLOSEST_SYNC );
Drawable drawable = new BitmapDrawable(getResources(), bitmap);
holder.imageView.setImageDrawable(drawable);
holder.progressBar.setVisibility(View.INVISIBLE);
} catch (Exception e) {
e.printStackTrace();
}
然后我试了这个FFmpegMediaMetadataRetriever Library但它在 Logcat 中产生了这个:
01-19 12:38:33.371: D/dalvikvm(20821): Trying to load lib /data/data/wseemann.media.demo/lib/libavutil.so 0x41733c90
01-19 12:38:33.371: D/dalvikvm(20821): Added shared lib /data/data/wseemann.media.demo/lib/libavutil.so 0x41733c90
01-19 12:38:34.121: W/System.err(20821): java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFFF
01-19 12:38:34.121: W/System.err(20821): at wseemann.media.FFmpegMediaMetadataRetriever.setDataSource(Native Method)
01-19 12:38:34.121: W/System.err(20821): at wseemann.media.FFmpegMediaMetadataRetriever.setDataSource(FFmpegMediaMetadataRetriever.java:243)
01-19 12:38:34.121: W/System.err(20821): at wseemann.media.demo.FMMRDemo.onCreate(FMMRDemo.java:50)
01-19 12:38:34.121: W/System.err(20821): at android.app.Activity.performCreate(Activity.java:5188)
01-19 12:38:34.121: W/System.err(20821): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
01-19 12:38:34.121: W/System.err(20821): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
01-19 12:38:34.121: W/System.err(20821): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
01-19 12:38:34.121: W/System.err(20821): at android.app.ActivityThread.access$700(ActivityThread.java:140)
01-19 12:38:34.121: W/System.err(20821): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
01-19 12:38:34.121: W/System.err(20821): at android.os.Handler.dispatchMessage(Handler.java:99)
01-19 12:38:34.121: W/System.err(20821): at android.os.Looper.loop(Looper.java:137)
01-19 12:38:34.121: W/System.err(20821): at android.app.ActivityThread.main(ActivityThread.java:4921)
01-19 12:38:34.121: W/System.err(20821): at java.lang.reflect.Method.invokeNative(Native Method)
01-19 12:38:34.121: W/System.err(20821): at java.lang.reflect.Method.invoke(Method.java:511)
01-19 12:38:34.121: W/System.err(20821): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
01-19 12:38:34.121: W/System.err(20821): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
01-19 12:38:34.121: W/System.err(20821): at dalvik.system.NativeStart.main(Native Method)
这是我的代码:
ImageView imageView= (ImageView) findViewById(R.id.imageView1);
try {
FFmpegMediaMetadataRetriever retriever = new FFmpegMediaMetadataRetriever();
AssetFileDescriptor afd;
afd = getAssets().openFd("video_one.mp4");
retriever.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
Bitmap bitmap = retriever.getFrameAtTime(100000,FFmpegMediaMetadataRetriever.OPTION_CLOSEST_SYNC );
Drawable drawable = new BitmapDrawable(getResources(), bitmap);
imageView.setImageDrawable(drawable);
retriever.release();
} catch (Exception e) {
e.printStackTrace();
}
接下来我尝试使用 SD 卡路径但仍然是相同的 logcat
最佳答案
尝试使用 MediaMetadataRetriever.OPTION_CLOSEST_SYNC
而不是 MediaMetadataRetriever.OPTION_NEXT_SYNC
。
如果这不起作用,那么您应该尝试使用 FFmpegMediaMetadataRetriever库,因为 MediaMetadataRetriever
不兼容所有 API。
编辑:
对 SD 卡文件试试这个:
FFmpegMediaMetadataRetriever retriever = new FFmpegMediaMetadataRetriever();
try {
retriever.setDataSource("mnt/sdcard/video.mp4"); //file's path
Bitmap bitmap = retriever.getFrameAtTime(100000,FFmpegMediaMetadataRetriever.OPTION_CLOSEST_SYNC );
Drawable drawable = new BitmapDrawable(getResources(), bitmap);
i.setImageDrawable(drawable);
} catch (Exception e) {
e.printStackTrace();
}
finally{
retriever.release();
}
关于android - 媒体元数据检索器 JNI (14060) : getFrameAtTime: videoFrame is a NULL pointer(Android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28019511/
我正在使用 native 实现 (org.webrtc:google-webrtc:1.0.24064) 为 Android 开发基于 WebRTC 的应用程序,并且我需要与相机流一起发送一系列位图。
对于一个项目,我需要在非常特定的时间暂停视频。为了准确起见,我使用 VideoFrame 观看视频帧。 demo here 它有效,但我不明白为什么我需要单击两次才能重新播放视频。有什么想法或其他解决
我正在开发一个扩展 Camera2Capturer 的类,以便从相机中获取帧,对其进行修改,然后将其反馈给观察者回调。 我能够获取帧,将其转换为位图,将该位图修改为我想要的,然后使用 OpenGL 将
我正在尝试获取视频的帧,所以我像这样使用 MediaMetadataRetriever.getFrameAtTime(): Uri directorio = Uri.parse("androi
我是 Computer Vison 的中级水平并且相当精通 opencv python 但是来到 c++ 我在从视频提要中选择 ROI 并显示裁剪提要时遇到问题。我的代码如下所示。 #include
问题是 webrtc::VideoFrame 和 webrtc::EncodedImage 有什么区别。问题的目的是我有 webrtc::EncoededImage 并且我需要将它发送给另一个对等方。
我希望你大声而自豪。 我是 PyAV 的新手我正在使用 aiortc对于 WebRTC MediaServer,在 aiortc 中现场 session 我有av.VideoFrame每个视频帧可用的
我正在寻找关于 openni VideoFrame 对象格式的一般描述/规范,我试图将其转换为 opencv Mat。 是否有一些官方网站/文档可用?我在 ros.org 上找到了以下内容其中描述了
我正在使用 MediaMetadataRetriever 按视频帧创建缩略图,但我在 Logcat 中收到此消息: E/MediaMetadataRetrieverJNI(14060): getFra
我是一名优秀的程序员,十分优秀!