jni string 转换
来源:互联网 发布:在重庆网络教育有哪些 编辑:程序博客网 时间:2024/06/05 09:56
参考:https://github.com/wangzuxing/MyFFmpegH264H265YUVOpenGL/blob/master/MyFFmpegH264H265YUVOpenGL/jni/streamer.cpp
#include <jni.h>
#include <android/log.h>#include <liveMedia.hh>
#include <BasicUsageEnvironment.hh>
#include <GroupsockHelper.hh>
#include <pthread.h>
#include "DynamicRTSPServer.hh"
#include "version.hh"
#include "RTSPStream.h"
#include "H264VideoSource.h"
#include "H264VideoServerMediaSubsession.h"
#ifdef __cplusplus
extern "C" {
#endif
#define LOG_TAG "streamer"
#define LOGW(a ) __android_log_write(ANDROID_LOG_WARN,LOG_TAG,a)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
void play();
void afterPlaying(void* /*clientData*/);
//}
UsageEnvironment* uEnv;
H264VideoStreamFramer* videoSource;
RTPSink* videoSink;
char quit;
char* url;
int port_number;
FILE *file;
char const *inputFilename;
Boolean reuseFirstSource = False;
Boolean reuseFirstSource0 = True;
pthread_mutex_t mutex;
//将const char类型转换成jstring类型
jstring CStr2Jstring0(JNIEnv* env, const char* pat )
{
// 定义java String类 strClass
jclass strClass = (env)->FindClass("java/lang/String;");
// 获取java String类方法String(byte[],String)的构造器,用于将本地byte[]数组转换为一个新String
jmethodID ctorID = (env)->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V");
// 建立byte数组
jbyteArray bytes = (env)->NewByteArray((jsize)strlen(pat));
// 将char* 转换为byte数组
(env)->SetByteArrayRegion(bytes, 0, (jsize)strlen(pat), (jbyte*)pat);
//设置String, 保存语言类型,用于byte数组转换至String时的参数
jstring encoding = (env)->NewStringUTF("GB2312");
//将byte数组转换为java String,并输出
return (jstring)(env)->NewObject(strClass, ctorID, bytes, encoding);
}
char * Jstring2CStr0( JNIEnv * env, jstring jstr )
{
char * rtn = NULL;
jclass clsstring = env->FindClass("java/lang/String");
jstring strencode = env->NewStringUTF("GB2312");
jmethodID mid = env->GetMethodID(clsstring, "getBytes", "(Ljava/lang/String;)[B");
jbyteArray barr= (jbyteArray)env->CallObjectMethod(jstr,mid,strencode);
jsize alen = env->GetArrayLength(barr);
jbyte * ba = env->GetByteArrayElements(barr,JNI_FALSE);
if(alen > 0)
{
rtn = (char*)malloc(alen+1); //new char[alen+1];
memcpy(rtn,ba,alen);
rtn[alen]=0;
}
env->ReleaseByteArrayElements(barr,ba,0);
return rtn;
}
jstring CharTojstring0(JNIEnv* env, char* str)
{
jsize len = strlen(str);
jclass clsstring = env->FindClass("java/lang/String");
jstring strencode = env->NewStringUTF("GB2312");
jmethodID mid = env->GetMethodID(clsstring,"<init>","([BLjava/lang/String;)V");
jbyteArray barr = env-> NewByteArray(len);
env-> SetByteArrayRegion(barr,0,len,(jbyte*)str);
return (jstring)env-> NewObject(clsstring,mid,barr,strencode);
}
void doExecuteVideoViewShow0(JNIEnv * env, jobject obj, jstring sdp) {
// 1.找到java的MainActivity的class
jclass clazz = env->FindClass("com/example/mylive55servermediacodec2/StreamerActivity2");
if (clazz == 0) {
LOGI("can't find clazz");
}
LOGI(" find clazz");
//2 找到class 里面的方法定义
jmethodID methodid = env->GetMethodID(clazz, "PlayRtspStream", "(Ljava/lang/String;)V");
if (methodid == 0) {
LOGI("can't find methodid");
}
LOGI(" find methodid");
//3 .调用方法
env->CallVoidMethod(clazz, methodid, sdp);
}
static void announceStream0(RTSPServer* rtspServer, ServerMediaSession* sms,
char const* streamName, char const* inputFileName)
{
char* url = rtspServer->rtspURL(sms);
char buf[255] = { 0 };
UsageEnvironment& env = rtspServer->envir();
sprintf(buf,
"%s-->stream, from the file-->%s,Play this stream using the URL:%s",
streamName, inputFileName, url);
LOGW(buf);
delete[] url;
}
阅读全文
0 0
- jni string 转换
- JNI和C++中的String相互转换
- JNI和C++中的String相互转换
- java - JNI - 【 java <-> C++ String 的转换 】
- JNI中string和jstring转换
- JNI中string和jstring转换
- 再论JNI中Jstring与C++的String的转换
- JNI中jstring 、const char* 、string相互转换函数
- JNI中String和char之间的相互转换
- JNI中string 、 char* 和 jstring 两种转换
- android jni c++ jstring和string之间的转换
- Android jni/ndk编程二:jni数据类型转换(primitive,String,array)
- jni 转换
- jni中字符转换中文乱码的处理方法 Java String转换成const char*(转摘)
- jni中字符转换中文乱码的处理方法 Java String转换成const char*(转摘)
- java本地方法调用(JNI)的参考代码----实现将String转换成char*,将char*转换成String.
- java jni中跨平台(win32或linux,unix)String与jstring相互转换。
- Android的JNI开发涉及的char和string之间的互相转换
- 创建信号量RACSignal
- python3 二叉树及单链表
- github简单使用教程
- SET NOCOUNT ON 作用
- select服务器
- jni string 转换
- 前端工程师新手必读
- VIM常用命令
- Netty简单示例----客户端与服务器通信
- [golang note] 错误处理
- vi常用命令
- mybatis <trim>标签
- TSLint: Identifier 'errMsg' is never reassigned; use 'const' instead of 'let'. (prefer-const)
- App 被拒后向Apple获取帮助或申诉渠道汇总