android 获取当前视频视图的屏幕截图

2023-12-31

我看到了很多关于此的老问题,也许现在有一些解决方案。 我想截取视频视图当前帧的屏幕截图。 Videoview 使用 rtsp 流显示实时视频。

我尝试拍摄位图,但它总是黑色

public static Bitmap loadBitmapFromView(View v) {
    Bitmap b = Bitmap.createBitmap(v.getLayoutParams().width , v.getLayoutParams().height, Bitmap.Config.ARGB_8888);                
    Canvas c = new Canvas(b);
    v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height);
    v.draw(c);
    return b;
}

EDIT : MediaMetadataRetriever不适用于流 url,但可能适用于视频文件。 在此使用 liblink https://github.com/wseemann/FFmpegMediaMetadataRetriever(它是一个包装MediaMetadataRetriever使rtsp协议输入)我可以保存一帧视频,但在实时视频视图方面存在 10 秒的延迟,因为它必须与流媒体服务器创建新的连接。

我没有测试ThumbnailUtils,但在 Api 中我读到输入只是文件路径


使用TextureView代替VideoView。 TextureView 有 getBitmap() 方法。这里是TextureView作为videoView的用法

public class TextureVideoActivity extends Activity implements TextureView.SurfaceTextureListener {

private static final String FILE_NAME = "myVideo.mp4";
private static final String TAG = TextureVideoActivity.class.getName();

private MediaPlayer mMediaPlayer;
private TextureView mPreview;

@Override
public void onCreate(Bundle icicle) {

    super.onCreate(icicle);
    setContentView(R.layout.activity_texture_video);

    mPreview = (TextureView) findViewById(R.id.textureView);
    mPreview.setSurfaceTextureListener(this);

}

public Bitmap getBitmap(){
   return  mPreview.getBitmap();
}

public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) {
    Surface surface = new Surface(surfaceTexture);

    try {
        mMediaPlayer = new MediaPlayer();
        mMediaPlayer
                .setDataSource(this, Uri.parse(FILE_NAME));
        mMediaPlayer.setSurface(surface);
        mMediaPlayer.setLooping(true);

        // don't forget to call MediaPlayer.prepareAsync() method when you use constructor for
        // creating MediaPlayer
        mMediaPlayer.prepareAsync();
        // Play video when the media source is ready for playback.
        mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mediaPlayer) {
                mediaPlayer.start();
            }
        });

    } catch (IllegalArgumentException e) {
        Log.d(TAG, e.getMessage());
    } catch (SecurityException e) {
        Log.d(TAG, e.getMessage());
    } catch (IllegalStateException e) {
        Log.d(TAG, e.getMessage());
    } catch (IOException e) {
        Log.d(TAG, e.getMessage());
    }
}

@Override
protected void onDestroy() {
    super.onDestroy();
    if (mMediaPlayer != null) {
        // Make sure we stop video and release resources when activity is destroyed.
        mMediaPlayer.stop();
        mMediaPlayer.release();
        mMediaPlayer = null;
    }
}

@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int i, int i2) {

}

@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
    return false;
}

@Override
public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {

}
}

在TextureView上播放视频 https://stackoverflow.com/questions/10736517/playing-video-on-textureview

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android 获取当前视频视图的屏幕截图 的相关文章

  • 结果显示图像上有衬里

    我正在使用 opencv 和 android ndk 下面是我的 jni 代码 void Vignete Mat img1 Mat img2 Mat out resize img1 img1 img2 size img1 convertTo
  • Android mediacontroller 播放暂停控件无法正确刷新

    我在我的活动中使用了 MediaController 它工作正常 但是当我第一次播放视频时 应该有 b 可见的暂停按钮 但相反 有播放 当我按下该按钮时 视频会正确暂停 状态保持不变 之后它工作正常 视频完成时也会发生同样的事情 这是一个错
  • 找不到导航对象。您的组件是否位于导航器屏幕内?

    在我下面的代码中 当我使用 useNavigation 时 它会给出像我的问题一样的错误 如何使用useNavigation 请任何人都可以解决此错误 错误 找不到导航对象 您的组件是否位于导航器屏幕内 我从这里跟踪了代码https rnf
  • 如何在 Jersey RESTful Web 服务中放置 cookie?

    我想通过 Jersey API 将 cookie 从 PUT webservice result 放置到 POST webservice 这是我的代码 WebResource service1 client resource http te
  • .NET 中的 Class.forName() 等效项?

    动态获取对象类型然后创建它的新实例的 C 方法是什么 例如 如何在 C 中实现以下 Java 代码的结果 MyClass x MyClass Class forName classes MyChildClass newInstance Lo
  • 有没有办法使用 SauceLabs 的 RemoteWebDriver 禁用 CORS 检查

    问题说明了一切 我正在尝试在 SauceLabs 上执行一些硒测试 该测试加载一个发出跨域请求的网页 我在想是否有一种方法可以通过代码以独立于平台的方式禁用 CORS 使用时Chrome驱动程序 Chrome组合禁用cors questio
  • android 中的 lang.NumberFormatException

    我有以下代码 除了在后台线程中从数据库读取一些值并使用这些值之外什么也不做 我使用 jar 绘制折线图 对于我用于每个数组值的折线图 问题是第三个我传递给绘制 LineChart 的构造函数的参数是 float float viteza S
  • HTC One M8 - 使用第二个后置摄像头

    我有一台 HTC One M8 设备 它有 2 个后置摄像头和一个额外的前置摄像头 我的问题是尝试访问第二个后置摄像头 我已经成功制作了一个应用程序 它同时运行 2 个摄像头 1 个前置摄像头和 1 个后置摄像头 但问题是我无法访问第二个后
  • 参数列表中的“...”是什么意思? doInBackground(字符串...参数)

    我不明白那个语法 尝试用谷歌搜索各种单词加上 是没有用的 它被称为varargs http java sun com j2se 1 5 0 docs guide language varargs html 这个事实应该产生更好的谷歌结果 h
  • 为 Android 编译时显示 FFMPEG 错误

    我正在尝试将 ffmpeg 添加到我的 android 项目中 我使用的是 ubuntu 14 04 操作系统 我正在关注此链接 Link https software intel com en us android blogs 2013
  • JNA Windows 服务启动类型

    我一直在使用 JNA 并且能够使用下面的代码返回 Windows 服务的状态 即启动或停止 但我不确定如何返回服务的启动类型 我确信 JNA 之外还有其他方法 但如果可能的话我想继续使用 JNA import com sun jna imp
  • 多次调用 startService 时实际会发生什么

    我正在打电话startService 多次对同一服务有不同的意图 很明显 任何时候都只存在一个服务实例startCommand 被称为每个startService 我的问题是 调用时有性能影响吗startService 多次 意图会按照调用
  • 随机关闭应用程序 - InputManagerService:收到 RemoteException 发送 setActive(false) 通知

    我有一个非常简单的Android应用程序 类似于手指画应用程序 我是 用手指在屏幕上画一些线条 我的问题是 应用程序随机关闭自己 让我回到 安卓主屏幕 我在 LogCat 上能看到的唯一日志就是这一行 Warning Tag InputMa
  • 在 Android 模拟器中更改屏幕亮度

    Android模拟器可以测试屏幕亮度变化吗 我尝试过各种示例 它们都使用以下代码片段 WindowManager LayoutParams lp window getAttributes lp screenBrightness some f
  • 如何将 onClick 侦听器附加到应用程序小部件上的列表视图项

    我喜欢向列表视图的每个项目添加一个 onClick 侦听器 但我尝试过的方法都不起作用 这是我的 RemoteViewsFactory public class MyRemoteViewsFactory implements RemoteV
  • android.media.Ringtone.play() 在播放 28 次后停止工作

    我有一个打开了几个小时的应用程序 并使用后台服务并附加了前台通知 每隔一段时间就会使用以下方式播放声音 try Ringtone r RingtoneManager getRingtone context uri r play catch
  • 如何指示 yum 安装特定版本的 OpenJDK

    我尝试安装openjdk in the redhat服务器 如何安装指定版本 我要安装的版本是 11 0 4 使用以下命令安装的版本是11 0 6 yum install java 11 openjdk devel 曾与 yum showd
  • 为什么永久代空间不断增长?

    我读过几篇文章 我理解以下内容 如果我错了 请纠正我和 或编辑问题 java堆是这样分段的 年轻代 创建的对象放在这里 这部分被频繁且廉价地垃圾收集 老一代 在年轻代的垃圾收集中幸存下来的对象会移到此处 该区域的垃圾收集频率较低 并且使用对
  • Google Analytics 数据中出现未知的应用版本

    我有一个Android应用程序发布到Google Play商店 它的apk文件也被我不认识的人发布到一些中国商店 今天我注意到Google Analytics数据中一个非常奇怪的情况 我从未发布过1 6 3版本 但我注意到它在那里 有37个
  • 在为 OSMDroid 实现片段时,maps.y.p.onResume(未知来源)处出现 NulPointerException

    我目前正在尝试将我的 OSMDroid 地图活动转移到片段中 似乎一切都已正确设置 但我收到了这个奇怪的 NullPointerException 我不确定能否解决 02 20 23 59 36 140 E AndroidRuntime 9

随机推荐

  • dlopen() 是否设置 errno?

    一切都在标题中 手册页没有说明任何内容 一些谷歌报告有些人在 dlopen 之后检查 errno 但只有很少的人并且结果各不相同 该函数确实返回一个成功 不成功值 但是应该如何找出失败的原因 So does dlopen 设置错误号 那么不
  • 如何使用 Netbeans 7.2 和 Maven 设置系统属性?

    我正在 NetBeans 7 2 中运行单元测试 使用 Maven 如何设置系统属性 我尝试使用以下方法添加属性 项目属性 gt 运行 gt JVM 参数 但这没有什么区别 我认为这可能与 JUnit 在不同的 JVM 中运行或其他什么有关
  • 在linux中,如何通过GNU ARM汇编进行系统调用

    到目前为止 我只知道如何通过 gnu arm 汇编退出程序 exit 0 mov r0 0 return code mov r7 1 supervisor service number svc call supervisor service
  • 使用 linq 和 NHibernate 3.0 进行分组

    据我所知 group by 只在 NHibernate 3 0 中添加 但即使使用版本 3 我也无法让 group by 工作 我尝试执行以下查询 Session Query GroupBy gbftr gt gbftr Tag Order
  • gevent (py)wsgi 优雅关闭

    我知道 通过搜索和检查 gevent 的源代码 优雅地关闭基于 gevent WSGI 的服务器的唯一方法是 server gevent wsgi WSGIServer 80 someWSGIApp def shutdown print S
  • JPA为什么使用createNamedQuery

    我正在将 DAO 层从使用 Hibernate API 更改为使用纯 JPA API 实现 看起来推荐的方法是使用实 体管理器中的 createNamedQuery 命名查询存储在模型 实体类的注释中 这对我来说没有意义 为什么要在模型对象
  • 使用 Testcontainers 时如何设置 Postgresql 的端口?

    有时我需要安装一个端口PostgreSQL 我在容器中运行它进行测试 但测试容器开发者命令Testcontainers删除了这个功能 但在某个地方有一个解决方案 通过设置 但我找不到它 谁有关于如何做到这一点的任何想法或信息 public
  • 如何在 MockMvc 中比较两个 jsonPath 值

    我正在使用 MockMvc 为我的 Spring 应用程序编写测试 假设我的 json 结果将具有以下格式 available true location ID 1 path local1 ID 2 path local2 ID 3 pat
  • 在Python中读取SUB之外的行[重复]

    这个问题在这里已经有答案了 新手问题 在 Python 2 7 2 中 我在读取文本文件时遇到问题 这些文件似乎意外包含一些控制字符 具体来说 循环 for line in f 一旦遇到包含以下内容的行就会停止 没有任何警告或错误SUB字符
  • XMLParser 和 SimpleXML 哪个更快

    你们觉得怎么样 我目前在整个项目中使用 SimpleXML 其平均内存使用量为 250KB 每次执行处理时间为 500 微秒 我只是打算切换到 XMLParser 非常感谢您的建议 编辑 实际微时间是 0 000578 微秒 我只是对毫和微
  • ZeroMQ (clrzmq4) 轮询问题

    我想要完成的是实现从两个套接字之一读取消息 无论消息首先到达何处 据我了解轮询 zmq poll 是正确的做法 如指南中的 mspoller http zguide zeromq org cs mspoller 在这里我将提供小的伪代码片段
  • Android datarouter logcat错误消息

    所以我的 logcat 被这个 datarouter 错误发送了垃圾邮件 任何人都可以帮助我解决这个问题并告诉我为什么会发生这种情况 哦 我尝试过重新启动手机和 eclipse 编辑 这似乎主要发生在我的 Mac 工作计算机上 以下是每 3
  • iOS 6 方向问题

    我有一个应用程序 通常是一个纵向应用程序 只显示一个 UIViewController 的横向视图 在新的 iOS 6 发布之前它都可以正常工作 我真的不明白方向在 iOS 6 中是如何工作的 所以我写了一个测试应用程序 这是我所做的 设置
  • 硒测试无法与任何元素相互作用

    所以我知道当我将 Django 设置中的 DEBUG 设置为 False 时 Selenium 无法访问静态文件 导致如下所示 但是 当我运行 Selenium 测试时 无论它们都能够与 DOM 交互并从下拉列表中选择项目 我目前拥有的测试
  • PPL - 如何配置本机线程数?

    我正在尝试使用 PPL 来管理本机线程的数量Scheduler类 这是我的代码 for int i 0 i lt 2000 i configure concurrency count 16 to 32 concurrency Schedul
  • 从 jruby-complete 消耗宝石

    我可以让我的jruby complete消耗传递给它的罐子中的宝石 但我想使用中央宝石库 这就是我现在可以做的 java jar jruby complete 1 6 5 jar S gem list LOCAL GEMS rake 0 8
  • 如何使用 Greasemonkey 代码替换 Head 脚本

    我想将 script js 替换为 demo js 有人请帮助我 尽早运行您的脚本 run at document start 添加事件监听器beforescriptexecute并检查脚本源 当您检测到所需的脚本时 调用preventDe
  • legend.only=T 时的图例属性(栅格包)

    仅绘制图例时 raster对象 颜色条 require raster r raster r 1 plot r legend F plot r zlim c 10 10 legend only T 如何控制图例轴标签大小 刻度长度和其他图例属
  • 带有拼写修复1扩展的SQLite与第二个查询时实体框架核心崩溃一起使用

    相关剥离项目 https github com djon2003 mediarecognizer spellfix1 https github com djon2003 mediarecognizer spellfix1 导入部分已被删除
  • android 获取当前视频视图的屏幕截图

    我看到了很多关于此的老问题 也许现在有一些解决方案 我想截取视频视图当前帧的屏幕截图 Videoview 使用 rtsp 流显示实时视频 我尝试拍摄位图 但它总是黑色 public static Bitmap loadBitmapFromV