DLNAControlCenter.java 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. package com.bestv.edu.dlan;
  2. import android.os.Handler;
  3. import android.text.TextUtils;
  4. import com.bestv.edu.App;
  5. import com.hpplay.sdk.source.api.LelinkPlayerInfo;
  6. import com.hpplay.sdk.source.api.LelinkSourceSDK;
  7. import com.hpplay.sdk.source.bean.BrowserConfigBean;
  8. import com.hpplay.sdk.source.bean.MediaAssetBean;
  9. import com.hpplay.sdk.source.browse.api.LelinkServiceInfo;
  10. import java.util.HashMap;
  11. import java.util.concurrent.ExecutorService;
  12. /**
  13. * author : 程中强
  14. * e-mail : 740479946@qq.com
  15. * date : 2022/9/1916:56
  16. * desc :
  17. * version: 1.0
  18. */
  19. public class DLNAControlCenter {
  20. private volatile static DLNAControlCenter dlnaCenter;
  21. private ExecutorService executorService;
  22. private long startMiracastTime;
  23. private Handler handler;
  24. private boolean isDlnaMode = false;
  25. //dlna投屏相关
  26. private final static int PUSH_SEEK = 3; // 投屏seek
  27. private final static int PUSH_STATE_LISTENING = 4;//投屏状态监听
  28. private final static int PUSH_STATE_BACK = 5;//投屏状态返回
  29. private final static int PUSH_PLAY = 6; // 投屏开始
  30. public static DLNAControlCenter getInstance() {
  31. if (null == dlnaCenter) {
  32. synchronized (DLNAControlCenter.class) {
  33. if (dlnaCenter == null) {
  34. dlnaCenter = new DLNAControlCenter();
  35. }
  36. }
  37. }
  38. return dlnaCenter;
  39. }
  40. private DLNAControlCenter() {
  41. // executorService = Executors.newCachedThreadPool();
  42. DeviceManager connectManager = DeviceManager.getInstance();
  43. //sdk初始化
  44. LelinkSourceSDK.getInstance()
  45. .setBindSdkListener(connectManager.getBindListener())
  46. .setBrowseResultListener(connectManager.getBrowseListener())
  47. .setConnectListener(connectManager.getConnectListener())
  48. .setPlayListener(CastManager.getInstance().getLelinkPlayerListener())
  49. //FIXME WARN: 这里替换为您申请的AppID & AppSecret,build.gradle替换为您的应用包名
  50. // .setSdkInitInfo(AppVarManager.getInstance().getBaseContext(), "17894", "69ce8955094258d339c1b6eadef2ec09")
  51. .setSdkInitInfo(App.getInstance(), "17894", "69ce8955094258d339c1b6eadef2ec09")
  52. .bindSdk();
  53. }
  54. public synchronized void startLelinkSearch() {
  55. try {
  56. BrowserConfigBean configBean = new BrowserConfigBean();
  57. configBean.useLelink = true;
  58. configBean.useDlna = true;
  59. configBean.useBLE = true;
  60. configBean.useSonic = true;
  61. LelinkSourceSDK.getInstance().startBrowse(configBean);
  62. } catch (Throwable throwable) {
  63. throwable.printStackTrace();
  64. }
  65. }
  66. /**
  67. * dlna播放
  68. *
  69. * @param device
  70. * @param castUrl
  71. */
  72. public synchronized void dlnaPlay(LelinkServiceInfo device, String castUrl, String titleName, double duration) {
  73. if (device == null || TextUtils.isEmpty(castUrl)) {
  74. return;
  75. }
  76. try {
  77. LelinkSourceSDK.getInstance().stopPlay();
  78. startMiracastTime = System.currentTimeMillis();
  79. LelinkPlayerInfo lelinkPlayerInfo = new LelinkPlayerInfo();
  80. lelinkPlayerInfo.setUrl(castUrl);
  81. lelinkPlayerInfo.setType(LelinkSourceSDK.MEDIA_TYPE_VIDEO);
  82. MediaAssetBean mediaAssetBean = new MediaAssetBean();
  83. mediaAssetBean.setName(titleName);
  84. // 非必要参数,部分dlna不返回视频总长度,实现下一集时若需要兼容这种dlna接收端,需设置媒资总长度,单位秒
  85. mediaAssetBean.setDuration((long) duration);
  86. lelinkPlayerInfo.setMediaAsset(mediaAssetBean);
  87. lelinkPlayerInfo.setLelinkServiceInfo(device);
  88. LelinkSourceSDK.getInstance().startPlayMedia(lelinkPlayerInfo);
  89. } catch (Throwable throwable) {
  90. throwable.printStackTrace();
  91. }
  92. }
  93. /**
  94. * 投屏跳转相应位置
  95. *
  96. * @param device
  97. */
  98. public synchronized void dlnaSeekToPlayPosition(LelinkServiceInfo device, int progress) {
  99. try {
  100. LelinkSourceSDK.getInstance().seekTo(progress);
  101. } catch (Throwable throwable) {
  102. throwable.printStackTrace();
  103. }
  104. }
  105. /**
  106. * dlna暂停
  107. *
  108. * @param curTPDevice
  109. */
  110. public synchronized void dlnaPause(LelinkServiceInfo curTPDevice) {
  111. if (curTPDevice == null) return;
  112. try {
  113. LelinkSourceSDK.getInstance().pause();
  114. } catch (Throwable throwable) {
  115. throwable.printStackTrace();
  116. }
  117. }
  118. /**
  119. * dlna开始
  120. */
  121. public synchronized void dlnaResume() {
  122. try {
  123. LelinkSourceSDK.getInstance().resume();
  124. } catch (Throwable throwable) {
  125. throwable.printStackTrace();
  126. }
  127. }
  128. /**
  129. * dlna投屏停止
  130. *
  131. * @param curTPDevice
  132. */
  133. public synchronized void dlnaStop(LelinkServiceInfo curTPDevice, String titleId) {
  134. try {
  135. LelinkSourceSDK.getInstance().stopPlay();
  136. } catch (Throwable throwable) {
  137. throwable.printStackTrace();
  138. }
  139. // dlnaCenter = null;
  140. }
  141. /**
  142. * dlna设置音量
  143. */
  144. public synchronized void dlnaVolume(boolean isAddVolume) {
  145. try {
  146. if (isAddVolume) {
  147. LelinkSourceSDK.getInstance().addVolume();
  148. } else {
  149. LelinkSourceSDK.getInstance().subVolume();
  150. }
  151. } catch (Throwable throwable) {
  152. throwable.printStackTrace();
  153. }
  154. }
  155. /**
  156. * dlan上一次暂停位置上播放
  157. *
  158. * @param curTPDevice
  159. */
  160. public synchronized void dlnaGoonPlayPosition(LelinkServiceInfo curTPDevice, int progress) {
  161. if (curTPDevice == null) return;
  162. try {
  163. LelinkSourceSDK.getInstance().seekTo(progress);
  164. } catch (Throwable throwable) {
  165. throwable.printStackTrace();
  166. }
  167. }
  168. public void setUIListener(IUIUpdateListener mUIListener) {
  169. DeviceManager.getInstance().setUIListener(mUIListener);
  170. }
  171. }