Skip to content

Commit d8888b3

Browse files
committed
fix : ijkplayer源码编译
Signed-off-by: JeffMony <[email protected]> #branch=ijkplayer_source
1 parent 59a0678 commit d8888b3

File tree

13 files changed

+582
-104
lines changed

13 files changed

+582
-104
lines changed

app/src/main/res/layout/activity_main.xml

+2-1
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,14 @@
2727
android:layout_marginLeft="10dp"
2828
android:id="@+id/exo_btn"
2929
android:text="exo"
30-
android:checked="true"
30+
android:checked="false"
3131
android:layout_width="wrap_content"
3232
android:layout_height="wrap_content" />
3333
<RadioButton
3434
android:layout_marginLeft="10dp"
3535
android:id="@+id/ijk_btn"
3636
android:text="ijk"
37+
android:checked="true"
3738
android:layout_width="wrap_content"
3839
android:layout_height="wrap_content" />
3940
</LinearLayout>

extra/ijkmedia/ijkplayer/android/ijkplayer_jni.c

+44-79
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include "j4a/class/tv/danmaku/ijk/media/player/misc/IMediaDataSource.h"
3333
#include "j4a/class/tv/danmaku/ijk/media/player/misc/IAndroidIO.h"
3434
#include "ijksdl/ijksdl_log.h"
35+
#include "ijkplayer_jni.h"
3536
#include "../ff_ffplay.h"
3637
#include "ffmpeg_api_jni.h"
3738
#include "ijkplayer_android_def.h"
@@ -381,7 +382,6 @@ IjkMediaPlayer_release(JNIEnv *env, jobject thiz)
381382
ijkmp_dec_ref_p(&mp);
382383
}
383384

384-
static void IjkMediaPlayer_native_setup(JNIEnv *env, jobject thiz, jobject weak_this);
385385
static void
386386
IjkMediaPlayer_reset(JNIEnv *env, jobject thiz)
387387
{
@@ -1127,88 +1127,53 @@ IjkMediaPlayer_setFrameAtTime(JNIEnv *env, jobject thiz, jstring path, jlong sta
11271127
return;
11281128
}
11291129

1130+
int IjkMediaPlayer_OnLoad(JNIEnv *env) {
1131+
pthread_mutex_init(&g_clazz.mutex, NULL );
11301132

1133+
// FindClass returns LocalReference
1134+
IJK_FIND_JAVA_CLASS(env, g_clazz.clazz, JNI_CLASS_IJKPLAYER);
1135+
(*env)->RegisterNatives(env, g_clazz.clazz, g_methods, NELEM(g_methods) );
11311136

1137+
ijkmp_global_init();
1138+
ijkmp_global_set_inject_callback(inject_callback);
11321139

1140+
FFmpegApi_global_init(env);
11331141

1134-
// ----------------------------------------------------------------------------
1135-
1136-
static JNINativeMethod g_methods[] = {
1137-
{
1138-
"_setDataSource",
1139-
"(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)V",
1140-
(void *) IjkMediaPlayer_setDataSourceAndHeaders
1141-
},
1142-
{ "_setDataSourceFd", "(I)V", (void *) IjkMediaPlayer_setDataSourceFd },
1143-
{ "_setDataSource", "(Ltv/danmaku/ijk/media/player/misc/IMediaDataSource;)V", (void *)IjkMediaPlayer_setDataSourceCallback },
1144-
{ "_setAndroidIOCallback", "(Ltv/danmaku/ijk/media/player/misc/IAndroidIO;)V", (void *)IjkMediaPlayer_setAndroidIOCallback },
1145-
1146-
{ "_setVideoSurface", "(Landroid/view/Surface;)V", (void *) IjkMediaPlayer_setVideoSurface },
1147-
{ "_prepareAsync", "()V", (void *) IjkMediaPlayer_prepareAsync },
1148-
{ "_start", "()V", (void *) IjkMediaPlayer_start },
1149-
{ "_stop", "()V", (void *) IjkMediaPlayer_stop },
1150-
{ "seekTo", "(J)V", (void *) IjkMediaPlayer_seekTo },
1151-
{ "_pause", "()V", (void *) IjkMediaPlayer_pause },
1152-
{ "isPlaying", "()Z", (void *) IjkMediaPlayer_isPlaying },
1153-
{ "getCurrentPosition", "()J", (void *) IjkMediaPlayer_getCurrentPosition },
1154-
{ "getDuration", "()J", (void *) IjkMediaPlayer_getDuration },
1155-
{ "_release", "()V", (void *) IjkMediaPlayer_release },
1156-
{ "_reset", "()V", (void *) IjkMediaPlayer_reset },
1157-
{ "setVolume", "(FF)V", (void *) IjkMediaPlayer_setVolume },
1158-
{ "getAudioSessionId", "()I", (void *) IjkMediaPlayer_getAudioSessionId },
1159-
{ "native_init", "()V", (void *) IjkMediaPlayer_native_init },
1160-
{ "native_setup", "(Ljava/lang/Object;)V", (void *) IjkMediaPlayer_native_setup },
1161-
{ "native_finalize", "()V", (void *) IjkMediaPlayer_native_finalize },
1162-
1163-
{ "_setOption", "(ILjava/lang/String;Ljava/lang/String;)V", (void *) IjkMediaPlayer_setOption },
1164-
{ "_setOption", "(ILjava/lang/String;J)V", (void *) IjkMediaPlayer_setOptionLong },
1165-
1166-
{ "_getColorFormatName", "(I)Ljava/lang/String;", (void *) IjkMediaPlayer_getColorFormatName },
1167-
{ "_getVideoCodecInfo", "()Ljava/lang/String;", (void *) IjkMediaPlayer_getVideoCodecInfo },
1168-
{ "_getAudioCodecInfo", "()Ljava/lang/String;", (void *) IjkMediaPlayer_getAudioCodecInfo },
1169-
{ "_getMediaMeta", "()Landroid/os/Bundle;", (void *) IjkMediaPlayer_getMediaMeta },
1170-
{ "_setLoopCount", "(I)V", (void *) IjkMediaPlayer_setLoopCount },
1171-
{ "_getLoopCount", "()I", (void *) IjkMediaPlayer_getLoopCount },
1172-
{ "_getPropertyFloat", "(IF)F", (void *) ijkMediaPlayer_getPropertyFloat },
1173-
{ "_setPropertyFloat", "(IF)V", (void *) ijkMediaPlayer_setPropertyFloat },
1174-
{ "_getPropertyLong", "(IJ)J", (void *) ijkMediaPlayer_getPropertyLong },
1175-
{ "_setPropertyLong", "(IJ)V", (void *) ijkMediaPlayer_setPropertyLong },
1176-
{ "_setStreamSelected", "(IZ)V", (void *) ijkMediaPlayer_setStreamSelected },
1177-
1178-
{ "native_profileBegin", "(Ljava/lang/String;)V", (void *) IjkMediaPlayer_native_profileBegin },
1179-
{ "native_profileEnd", "()V", (void *) IjkMediaPlayer_native_profileEnd },
1180-
1181-
{ "native_setLogLevel", "(I)V", (void *) IjkMediaPlayer_native_setLogLevel },
1182-
{ "_setFrameAtTime", "(Ljava/lang/String;JJII)V", (void *) IjkMediaPlayer_setFrameAtTime },
1183-
};
1184-
1185-
JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved)
1186-
{
1187-
JNIEnv* env = NULL;
1188-
1189-
g_jvm = vm;
1190-
if ((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1191-
return -1;
1192-
}
1193-
assert(env != NULL);
1194-
1195-
pthread_mutex_init(&g_clazz.mutex, NULL );
1196-
1197-
// FindClass returns LocalReference
1198-
IJK_FIND_JAVA_CLASS(env, g_clazz.clazz, JNI_CLASS_IJKPLAYER);
1199-
(*env)->RegisterNatives(env, g_clazz.clazz, g_methods, NELEM(g_methods) );
1200-
1201-
ijkmp_global_init();
1202-
ijkmp_global_set_inject_callback(inject_callback);
1203-
1204-
FFmpegApi_global_init(env);
1205-
1206-
return JNI_VERSION_1_4;
1142+
return JNI_VERSION_1_4;
12071143
}
12081144

1209-
JNIEXPORT void JNI_OnUnload(JavaVM *jvm, void *reserved)
1210-
{
1211-
ijkmp_global_uninit();
1212-
1213-
pthread_mutex_destroy(&g_clazz.mutex);
1145+
void IjkMediaPlayer_OnUnload() {
1146+
ijkmp_global_uninit();
1147+
pthread_mutex_destroy(&g_clazz.mutex);
12141148
}
1149+
1150+
//JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved)
1151+
//{
1152+
// JNIEnv* env = NULL;
1153+
//
1154+
// g_jvm = vm;
1155+
// if ((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_4) != JNI_OK) {
1156+
// return -1;
1157+
// }
1158+
// assert(env != NULL);
1159+
//
1160+
// pthread_mutex_init(&g_clazz.mutex, NULL );
1161+
//
1162+
// // FindClass returns LocalReference
1163+
// IJK_FIND_JAVA_CLASS(env, g_clazz.clazz, JNI_CLASS_IJKPLAYER);
1164+
// (*env)->RegisterNatives(env, g_clazz.clazz, g_methods, NELEM(g_methods) );
1165+
//
1166+
// ijkmp_global_init();
1167+
// ijkmp_global_set_inject_callback(inject_callback);
1168+
//
1169+
// FFmpegApi_global_init(env);
1170+
//
1171+
// return JNI_VERSION_1_4;
1172+
//}
1173+
//
1174+
//JNIEXPORT void JNI_OnUnload(JavaVM *jvm, void *reserved)
1175+
//{
1176+
// ijkmp_global_uninit();
1177+
//
1178+
// pthread_mutex_destroy(&g_clazz.mutex);
1179+
//}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
//
2+
// Created by jefflee on 2023/6/8.
3+
//
4+
5+
#ifndef PLAYERSDK_EXTRA_IJKMEDIA_IJKPLAYER_ANDROID_IJKPLAYER_JNI_H_
6+
#define PLAYERSDK_EXTRA_IJKMEDIA_IJKPLAYER_ANDROID_IJKPLAYER_JNI_H_
7+
8+
#include <jni.h>
9+
10+
static void
11+
IjkMediaPlayer_setDataSourceAndHeaders(
12+
JNIEnv *env, jobject thiz, jstring path,
13+
jobjectArray keys, jobjectArray values);
14+
15+
static void
16+
IjkMediaPlayer_setDataSourceFd(JNIEnv *env, jobject thiz, jint fd);
17+
18+
static void
19+
IjkMediaPlayer_setDataSourceCallback(JNIEnv *env, jobject thiz, jobject callback);
20+
21+
static void
22+
IjkMediaPlayer_setAndroidIOCallback(JNIEnv *env, jobject thiz, jobject callback);
23+
24+
static void
25+
IjkMediaPlayer_setVideoSurface(JNIEnv *env, jobject thiz, jobject jsurface);
26+
27+
static void
28+
IjkMediaPlayer_prepareAsync(JNIEnv *env, jobject thiz);
29+
30+
static void
31+
IjkMediaPlayer_start(JNIEnv *env, jobject thiz);
32+
33+
static void
34+
IjkMediaPlayer_stop(JNIEnv *env, jobject thiz);
35+
36+
static void
37+
IjkMediaPlayer_pause(JNIEnv *env, jobject thiz);
38+
39+
static void
40+
IjkMediaPlayer_seekTo(JNIEnv *env, jobject thiz, jlong msec);
41+
42+
static jboolean
43+
IjkMediaPlayer_isPlaying(JNIEnv *env, jobject thiz);
44+
static jlong
45+
IjkMediaPlayer_getCurrentPosition(JNIEnv *env, jobject thiz);
46+
47+
static jlong
48+
IjkMediaPlayer_getDuration(JNIEnv *env, jobject thiz);
49+
50+
static void
51+
IjkMediaPlayer_release(JNIEnv *env, jobject thiz);
52+
53+
static void
54+
IjkMediaPlayer_reset(JNIEnv *env, jobject thiz);
55+
56+
static void
57+
IjkMediaPlayer_setLoopCount(JNIEnv *env, jobject thiz, jint loop_count);
58+
59+
static jint
60+
IjkMediaPlayer_getLoopCount(JNIEnv *env, jobject thiz);
61+
62+
static jfloat
63+
ijkMediaPlayer_getPropertyFloat(JNIEnv *env, jobject thiz, jint id, jfloat default_value);
64+
65+
static void
66+
ijkMediaPlayer_setPropertyFloat(JNIEnv *env, jobject thiz, jint id, jfloat value);
67+
68+
static jlong
69+
ijkMediaPlayer_getPropertyLong(JNIEnv *env, jobject thiz, jint id, jlong default_value);
70+
71+
static void
72+
ijkMediaPlayer_setPropertyLong(JNIEnv *env, jobject thiz, jint id, jlong value);
73+
74+
static void
75+
ijkMediaPlayer_setStreamSelected(JNIEnv *env, jobject thiz, jint stream, jboolean selected);
76+
77+
static void
78+
IjkMediaPlayer_setVolume(JNIEnv *env, jobject thiz, jfloat leftVolume, jfloat rightVolume);
79+
80+
static jint
81+
IjkMediaPlayer_getAudioSessionId(JNIEnv *env, jobject thiz);
82+
83+
static void
84+
IjkMediaPlayer_setOption(JNIEnv *env, jobject thiz, jint category, jobject name, jobject value);
85+
86+
static void
87+
IjkMediaPlayer_setOptionLong(JNIEnv *env, jobject thiz, jint category, jobject name, jlong value);
88+
89+
static jstring
90+
IjkMediaPlayer_getColorFormatName(JNIEnv *env, jclass clazz, jint mediaCodecColorFormat);
91+
92+
static jstring
93+
IjkMediaPlayer_getVideoCodecInfo(JNIEnv *env, jobject thiz);
94+
95+
static jstring
96+
IjkMediaPlayer_getAudioCodecInfo(JNIEnv *env, jobject thiz);
97+
98+
static jobject
99+
IjkMediaPlayer_getMediaMeta(JNIEnv *env, jobject thiz);
100+
101+
static void
102+
IjkMediaPlayer_native_init(JNIEnv *env);
103+
104+
static void
105+
IjkMediaPlayer_native_setup(JNIEnv *env, jobject thiz, jobject weak_this);
106+
107+
static void
108+
IjkMediaPlayer_native_finalize(JNIEnv *env, jobject thiz, jobject name, jobject value);
109+
110+
static void
111+
IjkMediaPlayer_native_profileBegin(JNIEnv *env, jclass clazz, jstring libName);
112+
113+
static void
114+
IjkMediaPlayer_native_profileEnd(JNIEnv *env, jclass clazz);
115+
116+
static void
117+
IjkMediaPlayer_native_setLogLevel(JNIEnv *env, jclass clazz, jint level);
118+
119+
static void
120+
IjkMediaPlayer_setFrameAtTime(JNIEnv *env, jobject thiz, jstring path, jlong start_time, jlong end_time, jint num, jint definition);
121+
122+
int IjkMediaPlayer_OnLoad(JNIEnv *env);
123+
124+
void IjkMediaPlayer_OnUnload();
125+
126+
// ----------------------------------------------------------------------------
127+
static JNINativeMethod g_methods[] = {
128+
{ "_setDataSource", "(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)V", (void *) IjkMediaPlayer_setDataSourceAndHeaders },
129+
{ "_setDataSourceFd", "(I)V", (void *) IjkMediaPlayer_setDataSourceFd },
130+
{ "_setDataSource", "(Ltv/danmaku/ijk/media/player/misc/IMediaDataSource;)V", (void *) IjkMediaPlayer_setDataSourceCallback },
131+
{ "_setAndroidIOCallback", "(Ltv/danmaku/ijk/media/player/misc/IAndroidIO;)V", (void *) IjkMediaPlayer_setAndroidIOCallback },
132+
{ "_setVideoSurface", "(Landroid/view/Surface;)V", (void *) IjkMediaPlayer_setVideoSurface },
133+
{ "_prepareAsync", "()V", (void *) IjkMediaPlayer_prepareAsync },
134+
{ "_start", "()V", (void *) IjkMediaPlayer_start },
135+
{ "_stop", "()V", (void *) IjkMediaPlayer_stop },
136+
{ "seekTo", "(J)V", (void *) IjkMediaPlayer_seekTo },
137+
{ "_pause", "()V", (void *) IjkMediaPlayer_pause },
138+
{ "isPlaying", "()Z", (void *) IjkMediaPlayer_isPlaying },
139+
{ "getCurrentPosition", "()J", (void *) IjkMediaPlayer_getCurrentPosition },
140+
{ "getDuration", "()J", (void *) IjkMediaPlayer_getDuration },
141+
{ "_release", "()V", (void *) IjkMediaPlayer_release },
142+
{ "_reset", "()V", (void *) IjkMediaPlayer_reset },
143+
{ "setVolume", "(FF)V", (void *) IjkMediaPlayer_setVolume },
144+
{ "getAudioSessionId", "()I", (void *) IjkMediaPlayer_getAudioSessionId },
145+
{ "native_init", "()V", (void *) IjkMediaPlayer_native_init },
146+
{ "native_setup", "(Ljava/lang/Object;)V", (void *) IjkMediaPlayer_native_setup },
147+
{ "native_finalize", "()V", (void *) IjkMediaPlayer_native_finalize },
148+
{ "_setOption", "(ILjava/lang/String;Ljava/lang/String;)V", (void *) IjkMediaPlayer_setOption },
149+
{ "_setOption", "(ILjava/lang/String;J)V", (void *) IjkMediaPlayer_setOptionLong },
150+
{ "_getColorFormatName", "(I)Ljava/lang/String;", (void *) IjkMediaPlayer_getColorFormatName },
151+
{ "_getVideoCodecInfo", "()Ljava/lang/String;", (void *) IjkMediaPlayer_getVideoCodecInfo },
152+
{ "_getAudioCodecInfo", "()Ljava/lang/String;", (void *) IjkMediaPlayer_getAudioCodecInfo },
153+
{ "_getMediaMeta", "()Landroid/os/Bundle;", (void *) IjkMediaPlayer_getMediaMeta },
154+
{ "_setLoopCount", "(I)V", (void *) IjkMediaPlayer_setLoopCount },
155+
{ "_getLoopCount", "()I", (void *) IjkMediaPlayer_getLoopCount },
156+
{ "_getPropertyFloat", "(IF)F", (void *) ijkMediaPlayer_getPropertyFloat },
157+
{ "_setPropertyFloat", "(IF)V", (void *) ijkMediaPlayer_setPropertyFloat },
158+
{ "_getPropertyLong", "(IJ)J", (void *) ijkMediaPlayer_getPropertyLong },
159+
{ "_setPropertyLong", "(IJ)V", (void *) ijkMediaPlayer_setPropertyLong },
160+
{ "_setStreamSelected", "(IZ)V", (void *) ijkMediaPlayer_setStreamSelected },
161+
{ "native_profileBegin", "(Ljava/lang/String;)V", (void *) IjkMediaPlayer_native_profileBegin },
162+
{ "native_profileEnd", "()V", (void *) IjkMediaPlayer_native_profileEnd },
163+
{ "native_setLogLevel", "(I)V", (void *) IjkMediaPlayer_native_setLogLevel },
164+
{ "_setFrameAtTime", "(Ljava/lang/String;JJII)V", (void *) IjkMediaPlayer_setFrameAtTime },
165+
};
166+
#endif //PLAYERSDK_EXTRA_IJKMEDIA_IJKPLAYER_ANDROID_IJKPLAYER_JNI_H_

extra/ijkmedia/ijksdl/android/ijksdl_android_jni.c

+26-17
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
*/
2424

2525
#include "ijksdl_android_jni.h"
26-
2726
#include <unistd.h>
2827
#include "j4a/class/android/os/Build.h"
2928
#include "ijksdl_inc_internal_android.h"
@@ -195,23 +194,33 @@ int SDL_Android_GetApiLevel()
195194
#endif
196195
}
197196

197+
int SDL_OnLoad(JavaVM *vm, JNIEnv *env) {
198+
int retval = J4A_LoadAll__catchAll(env);
199+
JNI_CHECK_RET(retval == 0, env, NULL, NULL, -1);
200+
g_jvm = vm;
201+
return JNI_VERSION_1_4;
202+
}
198203

199-
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)
200-
{
201-
int retval;
202-
JNIEnv* env = NULL;
203-
204-
g_jvm = vm;
205-
if ((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_4) != JNI_OK) {
206-
return -1;
207-
}
208-
209-
retval = J4A_LoadAll__catchAll(env);
210-
JNI_CHECK_RET(retval == 0, env, NULL, NULL, -1);
204+
void SDL_OnUnload() {
211205

212-
return JNI_VERSION_1_4;
213206
}
214207

215-
JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *jvm, void *reserved)
216-
{
217-
}
208+
//JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)
209+
//{
210+
// int retval;
211+
// JNIEnv* env = NULL;
212+
//
213+
// g_jvm = vm;
214+
// if ((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_4) != JNI_OK) {
215+
// return -1;
216+
// }
217+
//
218+
// retval = J4A_LoadAll__catchAll(env);
219+
// JNI_CHECK_RET(retval == 0, env, NULL, NULL, -1);
220+
//
221+
// return JNI_VERSION_1_4;
222+
//}
223+
//
224+
//JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *jvm, void *reserved)
225+
//{
226+
//}

0 commit comments

Comments
 (0)