mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2026-06-16 21:15:57 +08:00
封装MediaPlayer JNI接口
This commit is contained in:
@@ -6,16 +6,20 @@ import android.os.Environment;
|
||||
import android.support.v4.app.ActivityCompat;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.zlmediakit.jni.ZLMediaKit;
|
||||
|
||||
public class MainActivity extends AppCompatActivity {
|
||||
public static final String TAG = "ZLMediaKit";
|
||||
private static String[] PERMISSIONS_STORAGE = {
|
||||
"android.permission.READ_EXTERNAL_STORAGE",
|
||||
"android.permission.WRITE_EXTERNAL_STORAGE",
|
||||
"android.permission.INTERNET"};
|
||||
|
||||
private ZLMediaKit.MediaPlayer _player;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
@@ -39,6 +43,31 @@ public class MainActivity extends AppCompatActivity {
|
||||
}else{
|
||||
Toast.makeText(this,"请给予我权限,否则无法启动测试!" ,Toast.LENGTH_LONG).show();
|
||||
}
|
||||
|
||||
_player = new ZLMediaKit.MediaPlayer("rtmp://live.hkstv.hk.lxdns.com/live/hks1", new ZLMediaKit.MediaPlayerCallBack() {
|
||||
@Override
|
||||
public void onPlayResult(int code, String msg) {
|
||||
Log.d(TAG,"onPlayResult:" + code + "," + msg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onShutdown(int code, String msg) {
|
||||
Log.d(TAG,"onShutdown:" + code + "," + msg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onData(ZLMediaKit.MediaFrame frame) {
|
||||
Log.d(TAG,"onData:"
|
||||
+ frame.trackType + ","
|
||||
+ frame.codecId + ","
|
||||
+ frame.dts + ","
|
||||
+ frame.pts + ","
|
||||
+ frame.keyFrame + ","
|
||||
+ frame.prefixSize + ","
|
||||
+ frame.data.length);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,8 +1,93 @@
|
||||
package com.zlmediakit.jni;
|
||||
|
||||
public class ZLMediaKit {
|
||||
static public class MediaFrame{
|
||||
|
||||
/**
|
||||
* 返回解码时间戳,单位毫秒
|
||||
*/
|
||||
public int dts;
|
||||
|
||||
/**
|
||||
* 返回显示时间戳,单位毫秒
|
||||
*/
|
||||
public int pts;
|
||||
|
||||
/**
|
||||
* 前缀长度,譬如264前缀为0x00 00 00 01,那么前缀长度就是4
|
||||
* aac前缀则为7个字节
|
||||
*/
|
||||
public int prefixSize;
|
||||
|
||||
/**
|
||||
* 返回是否为关键帧
|
||||
*/
|
||||
public boolean keyFrame;
|
||||
|
||||
/**
|
||||
* 音视频数据
|
||||
*/
|
||||
public byte[] data;
|
||||
|
||||
/**
|
||||
* 是音频还是视频
|
||||
* typedef enum {
|
||||
* TrackInvalid = -1,
|
||||
* TrackVideo = 0,
|
||||
* TrackAudio,
|
||||
* TrackTitle,
|
||||
* TrackMax = 0x7FFF
|
||||
* } TrackType;
|
||||
*/
|
||||
public int trackType;
|
||||
|
||||
|
||||
/**
|
||||
* 编码类型
|
||||
* typedef enum {
|
||||
* CodecInvalid = -1,
|
||||
* CodecH264 = 0,
|
||||
* CodecH265,
|
||||
* CodecAAC,
|
||||
* CodecMax = 0x7FFF
|
||||
* } CodecId;
|
||||
*/
|
||||
public int codecId;
|
||||
}
|
||||
|
||||
static public interface MediaPlayerCallBack{
|
||||
void onPlayResult(int code,String msg);
|
||||
void onShutdown(int code,String msg);
|
||||
void onData(MediaFrame frame);
|
||||
};
|
||||
|
||||
|
||||
static public class MediaPlayer{
|
||||
private long _ptr;
|
||||
private MediaPlayerCallBack _callback;
|
||||
public MediaPlayer(String url,MediaPlayerCallBack callBack){
|
||||
_callback = callBack;
|
||||
_ptr = createMediaPlayer(url,callBack);
|
||||
}
|
||||
public void release(){
|
||||
if(_ptr != 0){
|
||||
releaseMediaPlayer(_ptr);
|
||||
_ptr = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void finalize() throws Throwable {
|
||||
super.finalize();
|
||||
release();
|
||||
}
|
||||
}
|
||||
|
||||
static public native boolean startDemo(String sd_path);
|
||||
static public native void releaseMediaPlayer(long ptr);
|
||||
static public native long createMediaPlayer(String url,MediaPlayerCallBack callback);
|
||||
|
||||
static {
|
||||
System.loadLibrary("zlmediakit_jni");
|
||||
}
|
||||
static public native boolean startDemo(String sd_path);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user