原 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
原始数据
按行查看
历史
原 android dlna投屏,README.md · Royal520/VideoDlnaScreen - Gitee.com相关推荐
- Android dlna 投屏
android dlna 投屏demo github地址 https://github.com/liulei9385/CyberLink4Android
- android 投屏开发框架,Android DLNA投屏-基于CyberGarage开发投屏功能
在上一篇博客<Android DLNA投屏-基本原理>中,讲到了DLNA的一些基本原理.了解这些基本原理,对开发是很有帮助的.但仅仅依据原理去进行Android DLNA开发,是比较困难的 ...
- Android DLNA投屏-基本原理
转 https://www.jianshu.com/p/19934892a235 1. DLNA简介 DLNA(Digital Living Network Alliance),即数字家庭网络联盟. ...
- mx播放器有没有投屏功能_芝杜DLNA投屏功能
DLNA投屏是一个非常高效实用的功能,也是众多高端家用播放器必备功能之一. 简而言之,便是把手机或平板电脑(同时支持苹果与安卓)中的界面,比如在线视频.音乐软件,直接通过播放器投射在电视机大屏幕上. ...
- dlna投屏显示服务器没互动,投屏时,提示没搜索到电视
原标题:投屏时,提示没搜索到电视 投屏,搜索不到电视设备解决方案 把手机视频投屏电视看,想必很多人都用过,作为忠实的爱好着.每天回家看剧,必投屏.但是仍然有很多人不会投屏,经常遇到的问题就是手机APP ...
- android 投屏 app 三星,[图]为何Windows 10的Android应用投屏功能仅限于三星手机?
原标题:[图]为何Windows 10的Android应用投屏功能仅限于三星手机? 在 Windows 10 May 2020(20H1/Version 2004)功能更新中,微软引入了名为" ...
- Android PC投屏简单尝试—最终章2
源码地址:https://github.com/deepsadness/AppRemote 上一章中,我们简单实现了PC的投屏功能. 但是还是存在这一些缺陷. 屏幕的尺寸数据是写死的 不能通过PC来对 ...
- Android PC投屏简单尝试—最终章1
回顾之前的几遍文章,我们分别通过RMTP协议和简单的Socket 发送Bitmap图片的Base64编码来完成投屏. 回想这系列文章的想法来源-Vysor,它通过 USB来进行连接的.又看到了 scr ...
- Android PC投屏简单尝试(录屏直播)2—硬解章(MediaCodec+RMTP)
代码地址 :https://github.com/deepsadness/MediaProjectionDemo 想法来源 上一边文章的最后说使用录制的Api进行录屏直播.本来这边文章是预计在5月份完 ...
最新文章
- linux定时执行python脚本_linux定时执行python脚本的方法以及失败不执行的处理方法...
- LeanCloud数据更新不同步问题
- Spring之Bean的配置(二)
- vue --- 使用vue-router获取带参数的路由
- mysql 取左_MySQL select语句从字符串左侧获取5个字符
- 石头剪刀布 -2013编程之美全国测试赛 每日一练
- 【Java】浅谈Java的GUI开发
- SSL请求trustStore的两种注册方式
- flink 本地_Flink 01 | 十分钟搭建第一个Flink应用和本地集群
- 小农民在深山树林里发现古墓_“快来!快来!这边有一个洞!”秦岭多古墓,难不成还真碰到了?...
- STEP 7 V5.5 版本特性
- Android安全-应用沙盒简述
- sha1校验工具 linux,Linux怎么校验SHA1和MD5
- solve函数c语言_c语言:回溯解数独程序
- 实现用户注册功能的代码
- php计算一年多少周,同时计算出这一周的开始时间和结束时间(可选返回时间戳或日期)
- java 字段排序_Java多字段排序之冒泡
- Qt读写JSON,以及使用QTreeView展示和编辑JSON数据
- 计算机键盘上的星号代表,电脑上星号怎么打(键盘p打出来是星号)
- 展现工匠精神的德国“开放数据”国家行动计划