[chatGPT] 如何通过JNI在Android上显示实时视频流

目录

  • 背景
    • 正文
        • layout xml
        • java
        • C++
        • java
      • 总结一:
    • 追问:
        • C++
        • C++
      • 总结二:
      • 答疑解惑
        • C++
    • 画蛇添足 视频不显示黑屏
  • 最后感叹科技的更新速度,真的程序员都可能会被替代,下一个时代最大的问题应该是劳动力过剩,导致社会性结构改变,一部分人会被社会性抛弃。

背景

相机拍摄的画面通过local socket 获取,所以C++的代码可以轻易的获取到每一帧视频数据,需要通过JNI 让 Android显示出来,方法有两种,一种是在Android内创建回调函数使用Bitmap 和ImageView 进行赋值显示,另一种也就是ChatGPT完成的,Android将surface 传递到JNI层内,C++来完成赋值和渲染,后者效率更高。
本文通过和ChatGPT的对话来描述代码的实现过程。

正文

礼貌性问候一下。
在这里插入图片描述
开始吧:
在这里插入图片描述

MediaPlayer mediaPlayer = new MediaPlayer();
SurfaceView surfaceView = findViewById(R.id.surface_view);
SurfaceHolder surfaceHolder = surfaceView.getHolder();mediaPlayer.setDataSource("http://your_video_stream.mp4");
mediaPlayer.setDisplay(surfaceHolder);
mediaPlayer.prepare();
mediaPlayer.start();

在这里插入图片描述
在这里插入图片描述

layout xml

<SurfaceViewandroid:id="@+id/surface_view"android:layout_width="match_parent"android:layout_height="match_parent" />

java

SurfaceView surfaceView = findViewById(R.id.surface_view);
SurfaceHolder surfaceHolder = surfaceView.getHolder();

C++

#include <jni.h>
#include <android/native_window_jni.h>
#include <android/native_window.h>
#include <unistd.h>// ...extern "C"
JNIEXPORT void JNICALL
Java_com_example_NativeVideoPlayer_playVideo(JNIEnv *env, jobject instance, jobject surface) {ANativeWindow *window = ANativeWindow_fromSurface(env, surface);ANativeWindow_setBuffersGeometry(window, 720, 480, WINDOW_FORMAT_RGBA_8888);while (true) {// Capture and decode the video stream// ...// Render the decoded video frame to the surface// ...// Sleep for a short period of timeusleep(16000);}ANativeWindow_release(window);
}

java

public class NativeVideoPlayer {static {System.loadLibrary("native-video-player");}public native void playVideo(SurfaceHolder surfaceHolder);
}// ...NativeVideoPlayer player = new NativeVideoPlayer();
player.playVideo(surfaceHolder);

总结一:

整体思路是创建一个surface 然后将surface 的 surface holder 传递到 JNI。
但是没有写如何赋值给surface holder 那我们继续问。

追问:

在这里插入图片描述

C++

jobject surface = env->GetObjectField(surfaceHolder, surfaceFieldID);
// ...
ANativeWindow *nativeWindow = ANativeWindow_fromSurface(env, surface);
//...
ANativeWindow_setBuffersGeometry(nativeWindow, width, height, format);
//...
ANativeWindow_Buffer buffer;
if (ANativeWindow_lock(nativeWindow, &buffer, NULL) == 0) {// Assign video stream buffer to the ANativeWindow// ...ANativeWindow_unlockAndPost(nativeWindow);
}

在这里插入图片描述

C++

if (ANativeWindow_lock(nativeWindow, &buffer, NULL) == 0) {// Assign video stream buffer to the ANativeWindowuint8_t *dst = static_cast<uint8_t *>(buffer.bits);memcpy(dst, yuvBuffer, buffer.stride * buffer.height);ANativeWindow_unlockAndPost(nativeWindow);
}

总结二:

到这里基本的代码已经全部写出来了,只需要每次把图像数据写入 到 window 的buffer 中就好。
但是难免有什么不理解或者不对的地方,那我们就继续让它答疑解惑吧。

答疑解惑

首先有一个问题,就是我没有从surfaceHolder找到surface。

C++

jclass surfaceHolderClass = env->GetObjectClass(surfaceHolder);
jfieldID surfaceFieldID = env->GetFieldID(surfaceHolderClass, "mSurface", "Landroid/view/Surface;");jobject surface = env->GetObjectField(surfaceHolder, surfaceFieldID);

在这里插入图片描述

在这里插入图片描述
然后我就去找新的接口,发现一个getSurface的接口。我自己做了下面的调整:

jmethodID getSurfaceMethodID = env->GetMethodID(surface_hoder_class, "getSurface", "()Landroid/view/Surface;");
jobject surface = env->CallObjectMethod(surface_holder, getSurfaceMethodID);
if(surface == nullptr){}

然后反问它
在这里插入图片描述
剩下的就是学习和真的答疑解惑了:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
到这里应该就结束了
.

画蛇添足 视频不显示黑屏

我其实画蛇添足还出了一个问题,ChatGPT 没帮我解决我自己找到的,后来我告诉机器人,下次遇到这样的事情,可以提醒一下其他人,看吧:
在这里插入图片描述
因为用到OpenGL 所以要加载一些依赖项。
在这里插入图片描述

最后感叹科技的更新速度,真的程序员都可能会被替代,下一个时代最大的问题应该是劳动力过剩,导致社会性结构改变,一部分人会被社会性抛弃。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/1128.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Chat gpt提高Android开发效率

简介 在过去几周里&#xff0c;我进行了一项令人大开眼界的实验&#xff0c;将 Chat-GPT&#xff08;我使用的是 Bing Chat&#xff0c;它在后台使用了 GPT-4&#xff0c;并且可以免费使用&#xff09;融入到我的日常 Android 开发工作流程中&#xff0c;以探索它是否能够提高…

ChatGPT解答:安卓APP耗电量测试方案和源码,用Android代码实现

ChatGPT解答&#xff1a;安卓APP耗电量测试方案和源码&#xff0c;用Android代码实现 安卓APP耗电量测试方案和源码&#xff0c;用Android代码实现 作为一名AI助手&#xff0c;我不会编写代码&#xff0c;但我可以为您提供一些关于安卓APP耗电量测试方案和源码的信息和建议。 …

chatgpt赋能python:Python如何打包安卓程序?

Python如何打包安卓程序&#xff1f; Python 是一种高级编程语言&#xff0c;具有简单易学、代码简洁、易于阅读等特点&#xff0c;因此在开发中广受欢迎。而随着移动设备的普及&#xff0c;Python 开发者们也开始着手开发安卓应用程序。那么&#xff0c;在 Python 中如何打包…

通过ChatGPT跟MetaHuman对话,Android/iOS兼容

一、申请ChatGPT的API-KEY 1.通过 openAI官网申请API-KEY 2.参考使用腾讯云函数一分钟搭建 OpenAI 免翻墙代理搭建openAI免翻墙代理 3.通过Postman测试一下openAI函数是否可被调用,传入BearerToken和Body参数,ChatGPT即可返回应答数据 二、启用必要的插件 1.启用文字转语…

试看ChatGPT如何带你通关蔚来Android车载面试

近期ChatGPT&#xff0c;火了。火到什么程度&#xff1f;根据瑞士银行巨头瑞银集团的一份报告显示&#xff0c;在ChatGPT推出仅2个月后&#xff0c;它在2023年1月末的月活用户已经突破了1亿。 那么ChatGPT是什么&#xff1f; 借用百度介绍下&#xff0c;ChatGPT&#xff0c;美…

【Android-ChatGPT】安装Android Studio遇到Unable to access Android SDK add-on list的错误【亲测解决】

【问题】 安装Android Studio遇到Unable to access Android SDK add-on list的错误。 【解决方案】 这个一般是没有设置代理造成的&#xff0c;点击setup proxy进行代理设置。 点击Android Studio - Preferences&#xff0c;在 Appearance & Behavior的System Settings下…

鸿蒙到底是不是安卓? ChatGPT的回答令人惊讶!

因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享 点击关注#互联网架构师公众号&#xff0c;领取架构师全套资料 都在这里 0、2T架构师学习资料干货分 上一篇&#xff1a;ChatGPT研究框架&#xff08;80页PPT&#xff0c;附下载&#xff09;…

基于.Net开发的ChatGPT客户端,兼容Windows、IOS、安卓、MacOS、Linux

2023年目前要说最热的点&#xff0c;肯定是ChatGPT了。 ChatGPT官方提供的网页版本&#xff0c;还有需要科学上网&#xff0c;很多人都会基于此进行封装。 现在是移动互联网时代&#xff0c;基于手机APP的需求还是很大的。 所以&#xff0c;今天给大家推荐一个ChatGPT客户端…

用ChatGPT提高开发效率(Andoid)

一、前言 我们问了10个问题&#xff0c;开发的、生活中有疑问的&#xff0c;ChartGPT都给了我们答案。这些答案怎么样&#xff0c;请往下看吧。 ChatGPT-1、写一个车牌号的正则表达式ChatGPT-2、写一个中国大陆车牌号的正则表达式ChatGPT-3、用kotlin写一个车牌号的校验函数C…

奇思妙想,用ChatGPT写代码怎么样呢?来看看写一个简单的Android apk

前言 这段时间重大新闻就属ChatGPT了&#xff0c;这到底是个什么呢&#xff1f;官方解释 ChatGPT是美国人工智能研究实验室OpenAI新推出的一种人工智能技术驱动的自然语言处理工具&#xff0c;使用了Transformer神经网络架构&#xff0c;也是GPT-3.5架构&#xff0c;这是一种…

使用 ChatGPT 改善 Android 开发效率的 7 个案例~

翻译 修改自 https://proandroiddev.com/chatgpt-for-android-developers-1c3c1ecc6440&#xff0c;原作者&#xff1a;Rafa Araujo ChatGPT 是由 OpenAI 公司创造的自然语言处理工具&#xff0c;对那些想要提高技能的软件开发人员来说&#xff0c;它绝对是不容错过的重要利器…

十分钟教你搭建类似ChatGPT的安卓应用程序

大家好&#xff0c;我是易安&#xff01; Chat GPT 是当今著名的人工智能工具&#xff0c;就像聊天机器人一样。Chat GPT会回答发送给它的所有查询。今天&#xff0c;我将通过集成 OpenAI API (ChatGPT)构建一个简单的类似 ChatGPT 的 android 应用程序&#xff0c;我们可以在其…

一款好用的ChatGPT工具,安卓app

要找到一款真正好用的chatgpt工具是不容易的&#xff0c;要么注册付费很麻烦&#xff0c;要么很快就不能用了&#xff0c;要么还不是真正的chatgpt。 这款解决以上所有问题。 你似乎来到了没有知识存在的荒原 - 知乎知乎&#xff0c;中文互联网高质量的问答社区和创作者聚集的…

ChatGPT能帮Android开发者干些啥?

ChatGPT能帮Android开发者干些啥&#xff1f; ChatGPT 是 OpenAI 创建的一种自然语言工具&#xff0c;本文将展示一些使用 ChatGPT 帮助软件开发的实际示例。凭借其易用性和自定义功能&#xff0c;ChatGPT 可以为提高软件工程师的绩效做出贡献。 访问 ChatGPT 转到https://ch…

Android Studio类ChatGpt的免费AI编程助手

ChatGpt大火&#xff0c;带动了AI工具的发展&#xff0c;介绍两款免费的AI编程助手&#xff0c;一款用于输入关键字自动输出代码&#xff0c;一款则是自动补全提示&#xff0e; 可支持大部分代码编辑器&#xff0c;这里主要介绍Android Studio上安装使用&#xff0e; Bito 支…

ChatGpt与AndroidStudio合体变身教程,从此ChatGPT成为你的私人助理

chatGpt火了这么长时间了&#xff0c;大家肯定都有所了解&#xff0c;今天我就给大家分享一下&#xff0c;如何让chatgpt与AndroidStudio成功合体&#xff0c;变身成为我们的私人助理&#xff01;&#xff08;记得给鄙人点点关注哦&#xff09; 合体进行中 合体步骤下载插件重…

使用 ChatGPT 改善 Android 开发效率的 7 个案例

ChatGPT 是由 OpenAI 公司创造的自然语言处理工具&#xff0c;对那些想要提高技能的软件开发人员来说&#xff0c;它绝对是不容错过的重要利器。 本文将展示使用 ChatGPT 来促进 Android 软件开发的 7 个案例&#xff0c;你会发现凭借其易用性和定制功能&#xff0c;ChatGPT 能…

Android Studio 插件 ChatGPT

一、为什么要在AS里使用ChatGPT 在AS里使用ChatGPT可以辅助生成一些重复性、解析类的代码&#xff0c;还有一些功能性问题查找&#xff0c;具体需要个人探索。官网使用经常性出现断连&#xff0c;需要刷新浏览器&#xff0c;而且经常历史列表丢失&#xff08;个人是这样的&…

【ChatGPT初体验与Android的集成使用】

ChatGPT初体验与Android的集成使用 前言创建自己的API KEYAndroid端的集成代码总结 前言 ChatGPT凭借着强大的AI功能火的一塌糊涂&#xff0c;由于其官网在国内不能访问&#xff0c;很多小伙伴不能很友好的体验及使用&#xff0c;现在就来分享一下其简单的集成使用&#xff0c…

OpenAI的ChatGPT简介,以及DALLE和cursor

目录 写在前面GPT-4GPT-3DALL-EGPT的插件API调用cursor 概述注册邮箱验证短信验证 探索ChatGPT集成了GPT的IDE&#xff0c;CURSOR集成了GPT的期刊查询网站参考材料 写在前面 关于注册账号&#xff0c;如果原来就有gmail或者个人版outlook邮箱&#xff0c;就可以很快完成注册&a…