原 android dlna投屏,README.md · Royal520/VideoDlnaScreen - Gitee.com

# **视频投屏,支持网络投屏和本地投屏**

## **android Dlna开发**

[GitHub主页](https://github.com/yanbo469/VideoDlnaScreen)

## 集成方式

### 添加依赖

Step 1. Add the JitPack repository to your build file

Add it in your root build.gradle at the end of repositories:

```java

allprojects {

repositories {

...

maven { url 'https://www.jitpack.io' }

maven {url 'http://4thline.org/m2'}

}

}

```

Step 2. Add the dependency

```java

android {

//必须添加,不加会报错

packagingOptions {

exclude 'META-INF/beans.xml'

}

}

dependencies {

compileOnly 'javax.enterprise:cdi-api:2.0'

implementation 'com.github.yanbo469:VideoDlnaScreen:v1.0'

}

```

Step 3. Add the Initialization

```java

public class Application {

@Override

public void onCreate() {

super.onCreate();

//初始化

VApplication.init(this);

}

}

```

Step 4.使用方法

```java

//使用前先注册服务

ClingManager.getInstance().startClingService();

//得到当前搜索到的所有设备

private List clingDevices;

/**

* 基于EventBus,回调会回来的值来显示当前找到的设备

*/

@Subscribe(threadMode = ThreadMode.MAIN)

public void onEventBus(DeviceEvent event) {

clingDevices = DeviceManager.getInstance().getClingDeviceList();

}

@Override

public void onStart() {

super.onStart();

EventBus.getDefault().register(this);

}

@Override

public void onStop() {

super.onStop();

EventBus.getDefault().unregister(this);

}

//选择你要投屏的设备;

DeviceManager.getInstance().setCurrClingDevice(ClingDevice);

//设置网络投屏的信息

RemoteItem itemurl1 = new RemoteItem("一路之下", "425703", "张杰",107362668, "00:04:33", "1280x720", url1);

//添加网络投屏的信息

ClingManager.getInstance().setRemoteItem(itemurl1);

//设置本地投屏的信息

private List objectList;

final DIDLObject object = objectList.get(position);

if (object instanceof Container) {

//得到本地文件夹

Container container = (Container) object;

//点进文件夹刷新数据List objectList

ClingManager.getInstance().searchLocalContent(containerId);

} else if (object instanceof Item) {

//得到本地文件

Item item = (Item) object;

// 设置本地投屏的信息

ClingManager.getInstance().setLocalItem(item);

}

public Item localItem;

public RemoteItem remoteItem;

localItem = ClingManager.getInstance().getLocalItem();

remoteItem = ClingManager.getInstance().getRemoteItem();

/**

* 播放开关

*/

private void play() {

if (ControlManager.getInstance().getState() == ControlManager.CastState.STOPED) {

if (localItem != null) {

newPlayCastLocalContent();

} else {

newPlayCastRemoteContent();

}

} else if (ControlManager.getInstance().getState() == ControlManager.CastState.PAUSED) {

playCast();

} else if (ControlManager.getInstance().getState() == ControlManager.CastState.PLAYING) {

pauseCast();

} else {

Toast.makeText(getBaseContext(), "正在连接设备,稍后操作", Toast.LENGTH_SHORT).show();

}

}

/**

* 本地投屏

*/

private void newPlayCastLocalContent() {

ControlManager.getInstance().setState(ControlManager.CastState.TRANSITIONING);

ControlManager.getInstance().newPlayCast(localItem, new ControlCallback() {

@Override

public void onSuccess() {

ControlManager.getInstance().setState(ControlManager.CastState.PLAYING);

ControlManager.getInstance().initScreenCastCallback();

runOnUiThread(new Runnable() {

@Override

public void run() {

playView.setImageResource(R.mipmap.ic_launcher_round);

}

}

@Override

public void onError(int code, String msg) {

ControlManager.getInstance().setState(ControlManager.CastState.STOPED);

showToast(String.format("New play cast local content failed %s", msg));

});

}

/**

* 网络投屏

*/

private void newPlayCastRemoteContent() {

ControlManager.getInstance().setState(ControlManager.CastState.TRANSITIONING);

ControlManager.getInstance().newPlayCast(remoteItem, new ControlCallback() {

@Override

public void onSuccess() {

ControlManager.getInstance().setState(ControlManager.CastState.PLAYING);

ControlManager.getInstance().initScreenCastCallback();

runOnUiThread(new Runnable() {

@Override

public void run() {

playView.setImageResource(R.mipmap.ic_launcher_round);

}

});

}

@Override

public void onError(int code, String msg) {

ControlManager.getInstance().setState(ControlManager.CastState.STOPED);

showToast(String.format("New play cast remote content failed %s", msg));

}

});

}

/**

* 播放

*/

private void playCast() {

ControlManager.getInstance().playCast(new ControlCallback() {

@Override

public void onSuccess() {

ControlManager.getInstance().setState(ControlManager.CastState.PLAYING);

runOnUiThread(new Runnable() {

@Override

public void run() {

playView.setImageResource(R.mipmap.ic_launcher_round);

}

});

}

@Override

public void onError(int code, String msg) {

showToast(String.format("Play cast failed %s", msg));

}

});

}

/**

* 暂停

*/

private void pauseCast() {

ControlManager.getInstance().pauseCast(new ControlCallback() {

@Override

public void onSuccess() {

ControlManager.getInstance().setState(ControlManager.CastState.PAUSED);

runOnUiThread(new Runnable() {

@Override

public void run() {

playView.setImageResource(R.mipmap.ic_launcher_round);

}

});

}

@Override

public void onError(int code, String msg) {

showToast(String.format("Pause cast failed %s", msg));

}

});

}

/**

* 退出投屏

*/

private void stopCast() {

ControlManager.getInstance().stopCast(new ControlCallback() {

@Override

public void onSuccess() {

ControlManager.getInstance().setState(ControlManager.CastState.STOPED);

runOnUiThread(new Runnable() {

@Override

public void run() {

playView.setImageResource(R.mipmap.ic_launcher_round);

finish();

}

});

}

@Override

public void onError(int code, String msg) {

showToast(String.format("Stop cast failed %s", msg));

}

});

}

/**

* 改变投屏进度

*/

private void seekCast(int progress) {

String target = VMDate.toTimeString(progress);

ControlManager.getInstance().seekCast(target, new ControlCallback() {

@Override

public void onSuccess() {

}

@Override

public void onError(int code, String msg) {

showToast(String.format("Seek cast failed %s", msg));

}

});

}

/**

* 设置音量大小

*/

private void setVolume(int volume) {

currVolume = volume;

ControlManager.getInstance().setVolumeCast(volume, new ControlCallback() {

@Override

public void onSuccess() {

}

@Override

public void onError(int code, String msg) {

showToast(String.format("Set cast volume failed %s", msg));

}

});

}

}

```

## 参考感谢

[Cling DLNA库](https://github.com/4thline/cling)

[DLNA 百科介绍](https://baike.baidu.com/item/DLNA)

[简书-细卷子](https://www.jianshu.com/p/4452182d2b48)

[hubing8658/UPnP-DLNA-Demo](https://github.com/hubing8658/UPnP-DLNA-Demo)

[kevinshine/BeyondUPnP](https://github.com/kevinshine/BeyondUPnP)

一键复制

编辑

Web IDE

原始数据

按行查看

历史

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值