##### 2.0版本使用说明：
###### 由于作者能力有限，此插件只在少量电视和盒子上进行过测试，若在使用中遇到问题或发现bug，可添加qq：1193890771进行咨询反馈。
```
本项目的源码也开源在码云上，有兴趣有能力的小伙伴可以自取：
安卓插件代码：https://gitee.com/qianj1991/uniapp_dlna_android
IOS插件代码：https://gitee.com/qianj1991/uniapp_dlna_ios
```

```
本插件通过DLNA协议实现了简易版的投屏功能，支持安卓和IOS，功能很简单，
相对于上个版本
1、修改了扫描接口回调结果，设备返回信息增加了设备唯一标识；
2、播放方法参数修改，使用设备唯一标识来指定设备；
3、增加了一些控制类接口；
目前共有以下几个接口：
扫 描 设 备:lyzmlDLNA.startSearch(callback);
投      屏:lyzmlDLNA.playVideo({udn:"",mediaURL:""},callback); 
暂 停 投 屏:lyzmlDLNA.pauseVideo(); 
继 续 投 屏:lyzmlDLNA.resumeVideo(second); 
结 束 投 屏:lyzmlDLNA.stopVideo();
设 置 监 听:lyzmlDLNA.setPlayMonitor(callback);
获取扫描结果:lyzmlDLNA.getSearchResult(callback);
获取本机 IP:lyzmlDLNA.getIpAddress(callback);
获取当前音量:lyzmlDLNA.getVolume();
设 置 音 量:lyzmlDLNA.setVolume(volume); 
获取当前播放进度:lyzmlDLNA.getPositionInfo();
获取视频总时长:lyzmlDLNA.getMediaDuration();
快进快退:lyzmlDLNA.seek(second);
获取状态:lyzmlDLNA.getTransportState();
```

```
1、在需要的页面上获取插件 const lyzmlDLNA = uni.requireNativePlugin('lyzml-DLNA');
```

``` 
2、开启扫描 
lyzmlDLNA.startSearch(resp=>{
	if(resp.code == 0){
		this.searchingText = "搜索中...";
	}else if(resp.code == 1){
	    //返回扫描的结果，eg: [{ip:"192.168.0.108",name:"xiaomiTV",udn:"uuid:748065fdaa8cbfd53939c2de4e3fcb3865f08dea7d7b227df3fe1a8354c4ee4b"}]
		this.tvList = resp.result;
	}else if(resp.code == 2){
		this.searchingText = "搜索完成";
	}
});

注：该方法相对于1.0版本修改了返回参数格式，{code:0,result:[]};
code:0表示开始搜索，1表示扫描到可用设备并返回，2扫描结束，扫描一段时间（5s）自动结束。
扫描到新的设备都会触发此回调，可能会多次回调，返回的结果是所有扫描到的设备列表；
由于同一台设备上可能存在多个接收端，此版本增加了udn返回参数，以区别不同的接收端。
（1.0版本使用的是ip）
```

```
3、投屏接口,通过udn来指定投屏设备，将音视频的url投屏到设备上进行播放
lyzmlDLNA.playVideo({
  udn:"dsdsdfss111",
  mediaURL:url
},(resp)=>{
  //这里有个回调，可以不用 
  //返回信息{code:0,desc:"发送指令成功（并不代表投屏成功）"} 
  //code非0时为失败，desc返回失败原因 
  if(resp && 0!=resp.code){
    uni.showToast({
        icon: "none",
        title: "若投屏失败，请尝试重新扫描"
    });
  } 
});
```

```
4、继 续 投 屏:lyzmlDLNA.resumeVideo(second); 
参数为秒，暂停时可记录已播放的进度，pauseVideo()后的继续播放
```

```
5、设置监听，由于投屏发射端和接收端不能做到同步，发出的指令都是异步返回的。
lyzmlDLNA.setPlayMonitor((resp) => {
    switch (resp.code) {
        case 1:  //onGetTransportState，获取传输状态回调，
				         //参考项目中共有STOPPED、PLAYING、TRANSITIONING、PAUSED_PLAYBACK、PAUSED_RECORDING、RECORDING、NO_MEDIA_PRESENT、ERR
								 //目前测试只发现以下3种状态，其他的不知道啥场景会触发
            let status = resp.result;
            this.currPlayState = status;
            if ("PLAYING" == status) {
                this.isPlaying = true;
            } else if ("PAUSED_PLAYBACK" == status || "STOPPED" == status) {
                this.isPlaying = false;
            }
            break;
        case 2: //onGetMediaDuration,获取视频时长回调
            this.durationSecond = resp.result;
            this.durationStr = ut.turnSSToHHMISS(this.durationSecond);
            break;
        case 3: //onPlay,开始播放回调
            this.isPlaying = true;
            break;
        case 4: //onPause,暂停播放回调
            this.isPlaying = false;
            break;
        case 5: //onStop,结束播放回调
            this.isPlaying = false;
            break;
				case 6: //onVolumeChanged,音量变化回调
						this.currVolume = resp.result;
						break;
        case 7: //onProgressUpdated,播放进度回调 
            this.currTimeSecond = resp.result;
            this.currTimeStr = ut.turnSSToHHMISS(this.currTimeSecond);
            break;
        case 8: //onSeekComplete,快进快退回调
            this.getTransportState();
            break;
        case 9: //onError,调用发生错误时的回调，可以打印出来看看，调试的时候可以看看，有时候莫名奇妙会不停回调错误
            break;
        default:
            break;
    }
});
```

```
5、可以主动调用接口获取扫描到的结果，这个接口就算是停止扫描后也可以获取到之前扫描的结果，返回的结果和startSearch的回调结果一致：
lyzmlDLNA.getSearchResult((devList)=>{
//返回扫描的结果，eg: [{ip:"192.168.0.108",name:"xiaomiTV","udn":"uuid:748065fdaa8cbfd53939c2de4e3fcb3865f08dea7d7b227df3fe1a8354c4ee4b"}]
});
```

```
6、获取本机IP:lyzmlDLNA.getIpAddress((ip)=>{
console.log("====getIPAddress====",ip);
});
```


##### 1.0版本使用说明：

```
本插件通过DLNA协议实现了简易版的投屏功能，支持安卓和IOS，功能很简单，目前只有以下几个接口：
扫 描 设 备:lyzmlDLNA.startSearch(callback);
停 止 扫 描:lyzmlDLNA.stopSearch();
获取扫描结果:lyzmlDLNA.getSearchResult(callback);
投      屏:lyzmlDLNA.playVideo({ip:"",mediaURL:""},callback); 
结 束 投 屏:lyzmlDLNA.stopVideo();
获取本机 IP:lyzmlDLNA.getIpAddress(callback);
```

```
1、在需要的页面上获取插件 const lyzmlDLNA = uni.requireNativePlugin('lyzml-DLNA');
```
```
2、开启扫描 lyzmlDLNA.startSearch((devList)=>{
			   //返回扫描的结果，eg: [{ip:"192.168.0.108",name:"xiaomiTV"}]
		  });
   扫描到新的设备都会触发此回调，可能会多次回调，注意返回的结果是否重复；
```
```   
3、停止扫描接口：lyzmlDLNA.stopSearch(); 可不调用，会自动停止
```
```
4、可以主动调用接口获取扫描到的结果，这个接口就算是停止扫描后也可以获取到之前扫描的结果，返回的结果和startSearch的回调结果一致：
lyzmlDLNA.getSearchResult((devList)=>{
   //返回扫描的结果，eg: [{ip:"192.168.0.108",name:"xiaomiTV"}]
});
```
```
5、投屏接口,通过IP来指定投屏设备，将音视频的url投屏到设备上进行播放，ip为扫描返回结果中的IP
lyzmlDLNA.playVideo({
	ip:“192.168.0.108”,
	mediaURL:url
},(resp)=>{
	//这里有个回调，可以不用 //返回信息{code:"0",desc:"播放成功"} //code非0时为失败，desc返回失败原因 }
});
```
```
6、结束投屏:lyzmlDLNA.stopVideo();
```
```
7、获取本机IP:lyzmlDLNA.getIpAddress((ip)=>{
				console.log("====getIPAddress====",ip);
			});
```

```
参考资料（感谢github的开源项目）：
https://github.com/ClaudeLi/DLNA_UPnP
https://github.com/zhangwenxue/CyberGarage4Android
https://gitee.com/feiser/M3U8Loader.git
```


