- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试通过 NDK 渲染视频,以添加一些 sdk 不支持的功能。我正在使用 FFmpeg 解码视频并可以通过 ndk 进行编译,并使用 this作为起点。我已经修改了那个例子,而不是使用 glDrawTexiOES 来绘制纹理,我设置了一些顶点并在其上渲染纹理(opengl es 渲染四边形的方式)。
下面是我正在做的渲染,但是创建 glTexImage2D 很慢。我想知道是否有任何方法可以加快速度,或者给出加速的外观,例如尝试在背景中设置一些纹理并渲染预设置纹理。或者是否有任何其他方法可以更快地将视频帧绘制到 android 屏幕上?目前我只能获得大约 12fps。
glClear(GL_COLOR_BUFFER_BIT);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glBindTexture(GL_TEXTURE_2D, textureConverted);
//this is slow
glTexImage2D(GL_TEXTURE_2D, /* target */
0, /* level */
GL_RGBA, /* internal format */
textureWidth, /* width */
textureHeight, /* height */
0, /* border */
GL_RGBA, /* format */
GL_UNSIGNED_BYTE,/* type */
pFrameConverted->data[0]);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_BYTE, indices);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
编辑我更改了我的代码以仅初始化 gltextImage2D 一次,并使用 glSubTexImage2D 对其进行了修改,它对帧率没有太大的改进。
然后我修改了代码以修改 NDK 上的原生位图对象。通过这种方法,我有一个运行处理下一帧并在 native 端填充位图对象的后台线程。我认为这有潜力,但我需要提高将 AVFrame 对象从 FFmpeg 转换为 native 位图的速度。下面是我目前用来转换的,一种蛮力方法。有什么方法可以提高这种转换的速度或优化这种转换?
static void fill_bitmap(AndroidBitmapInfo* info, void *pixels, AVFrame *pFrame)
{
uint8_t *frameLine;
int yy;
for (yy = 0; yy < info->height; yy++) {
uint8_t* line = (uint8_t*)pixels;
frameLine = (uint8_t *)pFrame->data[0] + (yy * pFrame->linesize[0]);
int xx;
for (xx = 0; xx < info->width; xx++) {
int out_offset = xx * 4;
int in_offset = xx * 3;
line[out_offset] = frameLine[in_offset];
line[out_offset+1] = frameLine[in_offset+1];
line[out_offset+2] = frameLine[in_offset+2];
line[out_offset+3] = 0;
}
pixels = (char*)pixels + info->stride;
}
}
最佳答案
是的,纹理(以及缓冲区、着色器和帧缓冲区)创建速度很慢。
这就是为什么你应该只创建一次纹理。创建完成后,可以调用glSubTexImage2D修改其数据。 .
为了更快地上传纹理数据 - 创建两个纹理。当您使用一个显示时,将纹理数据从 ffmpeg 上传到第二个。当您显示第二个时,将数据上传到第一个。并从头开始重复。
我觉得还是不会很快。您可以尝试使用允许从 NDK 访问位图对象像素的 jnigraphics 库。之后 - 您只需在 Java 端的屏幕上显示此位图。
关于android ffmpeg opengl es 渲染电影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8867616/
问题是什么? 我在 Pythonanywhere.com 上运行 This error can be due to the fact that ImageMagick is not installed
我目前正在设计一个电影数据库。我目前有一个包含电影标题、长度等的电影表。然后我有一个类型转换。我在这些之间有一个与 filmid 和 actorid 之间的联结表。这将包含在影片中扮演角色的所有 Ac
所以,我有一个包含 3 个表和相关列的数据库: 标签:TID、标签名称 电影:MID、movie_title tags_to_movies:电影 ID、标签 ID 如何选择至少具有我想要的标签的电影。
我的程序在 GNUPlot 中生成了 100 个图。我想将它们连接成一部短片,其中每个情节约为 0.1 秒。我怎样才能最有效地做到这一点? 我能想到的效率最低的方法是拍摄每个情节的屏幕截图,以某种方式
我正在使用 ffmpeg 剪切视频文件: ffmpeg - -ss 00:00:00 -t 00:00:30 不包括 *.avi 格式的不同文件格式是可以的。对于 avi 电影,ffmpeg 显示视
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
是否有任何方法可以模拟视频应用程序,以便我们仍然保持对设备(iPad/iPhone)的控制,但通过电缆将视频发送到电视?我研究了屏幕镜像,但它对于视频来说太慢了,而且无论如何,Apple 不再允许屏幕
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
我正在开发 Windows 服务,我的 Windows 服务使用“ffmpeg”,同时我正在开发用于测试代码的桌面应用程序。 我想在我的视频中导入水印。我可以用我的桌面应用程序做到这一点。但是当我运行
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我正在编写一个Mac应用程序,可以将不同来源的视频下载到本地硬盘。到目前为止效果很好,但我想允许用户在下载这些视频时播放这些视频。浏览 QTKit 的文档,我找不到任何方法可以让我将电影数据分段提供给
我已经尝试通过另一个用户的建议,使用嵌入 Flash 的 swfobject 方法。然而,我一定没有那么聪明。 下面是我想出的怪物,但没有电影播放,当我控制+单击(Mac)时,我什至无法将它区分为 F
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。它不符合 Stack Overflow guidelines 。它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题
我注意到 GIF 并不是真正兼容所有浏览器,所以我一直在使用电影。直到现在一直在寻找。我有一个带有用 css 编写的背景图片的网站。我觉得这行不通,但我尝试像链接图像一样链接电影,但它甚至没有出现。下
有人知道是否有可能(在 PHP 中)从服务器上的 quicktime 电影中获取帧/缩略图吗? 类似于通常的 GD 缩略图生成,但用于 .mov 文件。 注意:我使用的是 dreamhost,所以我只
我需要根据一系列生成的图像制作一部电影。 (我正在根据物理建模程序的输出创建图像。) 我在 QtKitCreateMovie 中找到了 Apple 的示例,并将其用作起点。我没有从应用程序包中加载 j
我想创建具有 2 个 View 的非常简单的应用程序:-> 列出一些标签-> 带电影的单 View 每个标签都连接到一个 flash 电影。这部电影将在我自己的网络服务器上。我想在我的应用程序中与一些
将 JSON 传入和传出 Flash 电影的最佳方式是什么? 目前在 javascript 和 Flash 之间进行通信: 我正在使用“flashvars”在最初加载时将数据传递给 Flash 电影
我正在开发一个 chromecast 发送器应用程序,我希望在其中启动 Netflix 并播放请求的电影。但是,我只能设法启动 Netflix 应用程序,但它不会加载视频,因为我不确定需要随请求发送哪
因此,当我尝试访问我的应用程序上的电影页面时出现以下错误: ActionController::ParameterMissing (param is missing or the value is e
我是一名优秀的程序员,十分优秀!