123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- package com.bestv.edu.dlan;
- import android.os.Handler;
- import android.text.TextUtils;
- import com.bestv.edu.App;
- import com.hpplay.sdk.source.api.LelinkPlayerInfo;
- import com.hpplay.sdk.source.api.LelinkSourceSDK;
- import com.hpplay.sdk.source.bean.BrowserConfigBean;
- import com.hpplay.sdk.source.bean.MediaAssetBean;
- import com.hpplay.sdk.source.browse.api.LelinkServiceInfo;
- import java.util.HashMap;
- import java.util.concurrent.ExecutorService;
- /**
- * author : 程中强
- * e-mail : 740479946@qq.com
- * date : 2022/9/1916:56
- * desc :
- * version: 1.0
- */
- public class DLNAControlCenter {
- private volatile static DLNAControlCenter dlnaCenter;
- private ExecutorService executorService;
- private long startMiracastTime;
- private Handler handler;
- private boolean isDlnaMode = false;
- //dlna投屏相关
- private final static int PUSH_SEEK = 3; // 投屏seek
- private final static int PUSH_STATE_LISTENING = 4;//投屏状态监听
- private final static int PUSH_STATE_BACK = 5;//投屏状态返回
- private final static int PUSH_PLAY = 6; // 投屏开始
- public static DLNAControlCenter getInstance() {
- if (null == dlnaCenter) {
- synchronized (DLNAControlCenter.class) {
- if (dlnaCenter == null) {
- dlnaCenter = new DLNAControlCenter();
- }
- }
- }
- return dlnaCenter;
- }
- private DLNAControlCenter() {
- // executorService = Executors.newCachedThreadPool();
- DeviceManager connectManager = DeviceManager.getInstance();
- //sdk初始化
- LelinkSourceSDK.getInstance()
- .setBindSdkListener(connectManager.getBindListener())
- .setBrowseResultListener(connectManager.getBrowseListener())
- .setConnectListener(connectManager.getConnectListener())
- .setPlayListener(CastManager.getInstance().getLelinkPlayerListener())
- //FIXME WARN: 这里替换为您申请的AppID & AppSecret,build.gradle替换为您的应用包名
- // .setSdkInitInfo(AppVarManager.getInstance().getBaseContext(), "17894", "69ce8955094258d339c1b6eadef2ec09")
- .setSdkInitInfo(App.getInstance(), "17894", "69ce8955094258d339c1b6eadef2ec09")
- .bindSdk();
- }
- public synchronized void startLelinkSearch() {
- try {
- BrowserConfigBean configBean = new BrowserConfigBean();
- configBean.useLelink = true;
- configBean.useDlna = true;
- configBean.useBLE = true;
- configBean.useSonic = true;
- LelinkSourceSDK.getInstance().startBrowse(configBean);
- } catch (Throwable throwable) {
- throwable.printStackTrace();
- }
- }
- /**
- * dlna播放
- *
- * @param device
- * @param castUrl
- */
- public synchronized void dlnaPlay(LelinkServiceInfo device, String castUrl, String titleName, double duration) {
- if (device == null || TextUtils.isEmpty(castUrl)) {
- return;
- }
- try {
- LelinkSourceSDK.getInstance().stopPlay();
- startMiracastTime = System.currentTimeMillis();
- LelinkPlayerInfo lelinkPlayerInfo = new LelinkPlayerInfo();
- lelinkPlayerInfo.setUrl(castUrl);
- lelinkPlayerInfo.setType(LelinkSourceSDK.MEDIA_TYPE_VIDEO);
- MediaAssetBean mediaAssetBean = new MediaAssetBean();
- mediaAssetBean.setName(titleName);
- // 非必要参数,部分dlna不返回视频总长度,实现下一集时若需要兼容这种dlna接收端,需设置媒资总长度,单位秒
- mediaAssetBean.setDuration((long) duration);
- lelinkPlayerInfo.setMediaAsset(mediaAssetBean);
- lelinkPlayerInfo.setLelinkServiceInfo(device);
- LelinkSourceSDK.getInstance().startPlayMedia(lelinkPlayerInfo);
- } catch (Throwable throwable) {
- throwable.printStackTrace();
- }
- }
- /**
- * 投屏跳转相应位置
- *
- * @param device
- */
- public synchronized void dlnaSeekToPlayPosition(LelinkServiceInfo device, int progress) {
- try {
- LelinkSourceSDK.getInstance().seekTo(progress);
- } catch (Throwable throwable) {
- throwable.printStackTrace();
- }
- }
- /**
- * dlna暂停
- *
- * @param curTPDevice
- */
- public synchronized void dlnaPause(LelinkServiceInfo curTPDevice) {
- if (curTPDevice == null) return;
- try {
- LelinkSourceSDK.getInstance().pause();
- } catch (Throwable throwable) {
- throwable.printStackTrace();
- }
- }
- /**
- * dlna开始
- */
- public synchronized void dlnaResume() {
- try {
- LelinkSourceSDK.getInstance().resume();
- } catch (Throwable throwable) {
- throwable.printStackTrace();
- }
- }
- /**
- * dlna投屏停止
- *
- * @param curTPDevice
- */
- public synchronized void dlnaStop(LelinkServiceInfo curTPDevice, String titleId) {
- try {
- LelinkSourceSDK.getInstance().stopPlay();
- } catch (Throwable throwable) {
- throwable.printStackTrace();
- }
- // dlnaCenter = null;
- }
- /**
- * dlna设置音量
- */
- public synchronized void dlnaVolume(boolean isAddVolume) {
- try {
- if (isAddVolume) {
- LelinkSourceSDK.getInstance().addVolume();
- } else {
- LelinkSourceSDK.getInstance().subVolume();
- }
- } catch (Throwable throwable) {
- throwable.printStackTrace();
- }
- }
- /**
- * dlan上一次暂停位置上播放
- *
- * @param curTPDevice
- */
- public synchronized void dlnaGoonPlayPosition(LelinkServiceInfo curTPDevice, int progress) {
- if (curTPDevice == null) return;
- try {
- LelinkSourceSDK.getInstance().seekTo(progress);
- } catch (Throwable throwable) {
- throwable.printStackTrace();
- }
- }
- public void setUIListener(IUIUpdateListener mUIListener) {
- DeviceManager.getInstance().setUIListener(mUIListener);
- }
- }
|