1
zhanghua
2024-09-26 c775c6953d9759e70f08acbfa8f6d7490aaae3d1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package com.netsdk.module;
 
import com.netsdk.lib.NetSDKLib;
import com.netsdk.lib.enumeration.EM_AUDIO_DATA_TYPE;
import com.netsdk.lib.enumeration.EM_REAL_DATA_TYPE;
import com.netsdk.lib.enumeration.ENUMERROR;
import com.sun.jna.Native;
 
import java.awt.Panel;
 
/**
 * @author 47081
 * @version 1.0
 * @description 播放模块,播放、预览相关接口封装
 * @date 2021/3/2
 */
public class PlayModule extends BaseModule {
  /**
   * 实时预览,只可用于swing界面
   *
   * @param loginHandler 登录句柄
   * @param channelID 通道号
   * @param panel 播放窗口
   * @param rType 码流类型
   * @return
   */
  public long realPlay(long loginHandler, int channelID, Panel panel, int rType) {
    NetSDKLib.LLong realplay =
        getNetsdkApi()
            .CLIENT_RealPlayEx(
                new NetSDKLib.LLong(loginHandler),
                channelID,
                Native.getComponentPointer(panel),
                rType);
    if (realplay.longValue() == 0) {
      System.out.println(ENUMERROR.getErrorMessage());
    }
    return realplay.longValue();
  }
 
  /**
   * 获取指定类型的码流数据
   *
   * @param loginHandler 登录句柄
   * @param channelID 通道号
   * @param dataType 码流类型
   * @param audioType 音频格式
   * @param callback 码流回调,回调函数请使用单例模式
   * @param panel 播放窗口,swing应用可用,一般传入null
   * @param file 转码后的保存的文件
   * @param waitTIme 超时时间
   * @return
   */
  public long realPlayByDataType(
      long loginHandler,
      int channelID,
      EM_REAL_DATA_TYPE dataType,
      EM_AUDIO_DATA_TYPE audioType,
      NetSDKLib.fRealDataCallBackEx2 callback,
      Panel panel,
      String file,
      int waitTIme) {
    NetSDKLib.NET_IN_REALPLAY_BY_DATA_TYPE inParam = new NetSDKLib.NET_IN_REALPLAY_BY_DATA_TYPE();
    inParam.rType = 0;
    inParam.nChannelID = channelID;
    inParam.emDataType = dataType.getType();
    inParam.emAudioType = audioType.ordinal();
    inParam.cbRealDataEx = callback;
    if (panel != null) {
      inParam.hWnd = Native.getComponentPointer(panel);
    }
    if (file != null && !file.trim().isEmpty()) {
      inParam.szSaveFileName = file;
    }
    NetSDKLib.NET_OUT_REALPLAY_BY_DATA_TYPE outParam =
        new NetSDKLib.NET_OUT_REALPLAY_BY_DATA_TYPE();
    NetSDKLib.LLong realplay =
        getNetsdkApi()
            .CLIENT_RealPlayByDataType(
                new NetSDKLib.LLong(loginHandler), inParam, outParam, waitTIme);
    if (realplay.longValue() == 0) {
      System.out.println(ENUMERROR.getErrorMessage());
    }
    return realplay.longValue();
  }
 
  /**
   * 停止转码
   *
   * @param realPlayHandler
   * @return
   */
  public boolean stopRealPlayByDataType(long realPlayHandler) {
    return getNetsdkApi().CLIENT_StopRealPlayEx(new NetSDKLib.LLong(realPlayHandler));
  }
}