关于DLNA开发Cling开源库的使用
来源:互联网 发布:精细建筑模型 知乎 编辑:程序博客网 时间:2024/05/26 05:53
关于DLNA开发Cling开源库的使用
最近公司开发了一个多屏互动的应用,其中牵涉到了DLNA的应用而我有幸加入到了其中的开发之中,在网络上查找关于DLNA开发资料的时候看到网络上关于Cling开源库的使用只有一个叫做Wireme的源代码可以参考使用,但是该部分代码主要是实现了DMS对于其它部分的实现不是很完善。下面我是我为了让大家能更好的实现DLNA其它的部分特别是DMC的部分(主要涉及到控制DMR),将AVTransport部分独立出来写了一个通用的类,其中实现了大部分的DMC操作如暂停,播放,获取DMR播放设备的当前音量,获取DMR设备播放信息啊等等,下面就是我自己写的一个类有比较详细的注释,希望能给使用Cling开源库实现DNLA的朋友有一点点的帮助。
public class CoshipAvtransprot {/*********************************************************** * @param device * @param Uri * @param Title *功能:设置mediarender播放的URI ***********************************************************/public static void mediaRemendersetAVTransportURI(AndroidUpnpService upnpService, @SuppressWarnings("rawtypes") Device device, final String Uri, final String Brows,final String Title, final GetCoshipavtransportstate getavtransport){if(device == null)return;@SuppressWarnings("rawtypes")Service service = device.findService(new UDAServiceId("AVTransport"));try{ActionCallback setAVTransportURIAction = new SetAVTransportURI(service, Uri, Brows) { @Overridepublic void success(@SuppressWarnings("rawtypes") ActionInvocation invocation) {super.success(invocation);System.out.println("设置URL成功"); getavtransport.setavtransportsuccess();}public void failure(@SuppressWarnings("rawtypes") ActionInvocation invocation, UpnpResponse operation, String defaultMsg) {getavtransport.setavtransportfail();System.out.println("设置URI失败"); } }; upnpService.getControlPoint().execute(setAVTransportURIAction);}catch(Exception e){e.printStackTrace();}}/**************************************************************** * @param upnpService * @param device mediarender设备名 * @param getavtransport avtransport事件回调监听函数 * 功能:控制mediarender设备进行播放 */public static void mediaRemenderplay(AndroidUpnpService upnpService, @SuppressWarnings("rawtypes") final Device device, final GetCoshipavtransportstate getavtransport){if(device == null)return;Service<?, ?> service = device.findService(new UDAServiceId("AVTransport"));try{ ActionCallback playAction = new Play(service) { @Override public void success(@SuppressWarnings("rawtypes") ActionInvocation invocation) { super.success(invocation); getavtransport.mediarenderplaysuccess(); System.out.println("播放成功"); } @Override public void failure(@SuppressWarnings("rawtypes") ActionInvocation invocation, UpnpResponse operation, String defaultMsg) { System.out.println("播放失败"); getavtransport.mediarenderplayfail(); } };upnpService.getControlPoint().execute(playAction);}catch(Exception e){e.printStackTrace();}}/***********************************************8 * @param upnpService * @param device * @param getGENASubscriptionStat */public static void MeidaSubscription(AndroidUpnpService upnpService, final Device<?, ?, ?> device, final GetGENASubscriptionStat getGENASubscriptionStat){if(device == null)return;Service<?, ?> service = device.findService(new UDAServiceId("AVTransport"));SubscriptionCallback callback = new SubscriptionCallback(service, 2000) {@Overrideprotected void ended(@SuppressWarnings("rawtypes") GENASubscription arg0, CancelReason arg1,UpnpResponse arg2) {System.out.println("ended");}@Overrideprotected void established(@SuppressWarnings("rawtypes") GENASubscription arg0) {System.out.println("established");}@Overrideprotected void eventReceived(@SuppressWarnings("rawtypes") GENASubscription arg0) {System.out.println("Event: " + arg0.getCurrentSequence().getValue());@SuppressWarnings({ "rawtypes", "unchecked" })Map<String, StateVariableValue> values = arg0.getCurrentValues();StateVariableValue<?> LastChange = values.get("LastChange");String result = "";result = CoshipUtils.parseLastChangeInfo(LastChange.toString());if(result.equals(CoshipUtils.REALPLAYING)){getGENASubscriptionStat.RealPlaying();}else if(result.equals(CoshipUtils.REALSTOPPED)){getGENASubscriptionStat.RealStopped();}else if(result.equals(CoshipUtils.REALSEEKSUCCESS)){getGENASubscriptionStat.RealSeekSuccess();}System.out.println("the current state is="+result);}@Overrideprotected void eventsMissed(@SuppressWarnings("rawtypes") GENASubscription arg0, int arg1) {System.out.println("eventsMissed");}@Overrideprotected void failed(@SuppressWarnings("rawtypes") GENASubscription arg0, UpnpResponse arg1,Exception arg2, String arg3) {System.out.println("failed");} }; upnpService.getControlPoint().execute(callback);}/***************************************************** * @param upnpService * @param device mediarender设备名 * @param volume 设置声音大小 * @param getavtransport avtransport事件回调监听函数 * 功能:设置meidarender设备声音大小 */public static void setvolume(AndroidUpnpService upnpService, @SuppressWarnings("rawtypes") Device device, int volume, final GetCoshipavtransportstate getavtransport){if(device == null)return; Service<?, ?> service = device.findService(new UDAServiceId("RenderingControl")); Action<?> getStatusAction = service.getAction("SetVolume"); System.out.println("VOLUME="+volume); @SuppressWarnings({ "unchecked", "rawtypes" })ActionInvocation<?> getStatusInvocation = new ActionInvocation(getStatusAction); try { ActionCallback setvolume = new SetVolume(getStatusInvocation, volume) {@Overridepublic void failure(@SuppressWarnings("rawtypes") ActionInvocation arg0, UpnpResponse arg1,String arg2) {System.out.println("设置当前音量大小失败");super.failure(arg0, arg1, arg2);getavtransport.mediarendersetvolumefail();}@Overridepublic void success(@SuppressWarnings("rawtypes") ActionInvocation arg0) {System.out.println("设置当前音量大小成功");//获取当前音量状态成功super.success(arg0);getavtransport.mediarendersetvolumesuccess();} }; upnpService.getControlPoint().execute(setvolume); } catch(Exception e) { e.printStackTrace(); }}/************************************************************* * * @param upnpService * @param device mediarender设备名 * @param getavtransport avtransport事件回调监听函数 * 功能:获取mediarender设备是否静音 */public static void getmute(AndroidUpnpService upnpService, @SuppressWarnings("rawtypes") Device device, final GetCoshipavtransportstate getavtransport){if(device == null)return; Service<?, ?> service = device.findService(new UDAServiceId("RenderingControl")); @SuppressWarnings("rawtypes") Action getStatusAction = service.getAction("GetMute"); @SuppressWarnings({ "rawtypes", "unchecked" }) ActionInvocation getStatusInvocation = new ActionInvocation(getStatusAction); try { ActionCallback getmute = new GetMute(getStatusInvocation) {@Overridepublic void failure(@SuppressWarnings("rawtypes") ActionInvocation arg0, UpnpResponse arg1,String arg2) {System.out.println("获取当前音量状态失败");super.failure(arg0, arg1, arg2);}@Overridepublic void success(@SuppressWarnings("rawtypes") ActionInvocation arg0) {System.out.println("获取当前音量状态成功");//获取当前音量状态成功super.success(arg0);@SuppressWarnings("rawtypes")ActionArgumentValue[] action= arg0.getOutput();for(int i = 0; i < action.length; i++){System.out.println(action[i].toString());}} }; upnpService.getControlPoint().execute(getmute); } catch(Exception e) { e.printStackTrace(); }}/************************************************** * @param upnpService * @param device mediarender设备名 * @param mute 是否静音标志 * @param getavtransport avtransport事件回调监听函数 * 功能: 设置mediarender是否静音 */public static void setmute(AndroidUpnpService upnpService,@SuppressWarnings("rawtypes") Device device, int mute, final GetCoshipavtransportstate getavtransport){if(device == null)return;@SuppressWarnings("rawtypes")Service service = device.findService(new UDAServiceId("RenderingControl"));@SuppressWarnings("rawtypes")Action getStatusAction = service.getAction("SetMute");@SuppressWarnings({ "rawtypes", "unchecked" })ActionInvocation getStatusInvocation = new ActionInvocation(getStatusAction); try { ActionCallback setmute = new SetMute(getStatusInvocation, mute) {@Overridepublic void failure(@SuppressWarnings("rawtypes") ActionInvocation arg0, UpnpResponse arg1,String arg2) {System.out.println("设置当前音量状况失败");}@Overridepublic void success(@SuppressWarnings("rawtypes") ActionInvocation arg0) {System.out.println("设置当前音量状况成功");} }; upnpService.getControlPoint().execute(setmute); } catch(Exception e) { e.printStackTrace(); }}/*************************************************** * @param upnpService * @param device mediarender设备名 * @param volume 声音大小 * @param getavtransport avtransport事件回调监听函数 * 功能:获取mediarender设备声音大小 */public static void getvolume(AndroidUpnpService upnpService, @SuppressWarnings("rawtypes") Device device, int volume, final GetCoshipavtransportstate getavtransport){if(device == null)return;@SuppressWarnings("rawtypes")Service service = device.findService(new UDAServiceId("RenderingControl"));@SuppressWarnings("rawtypes")Action getStatusAction = service.getAction("GetVolume");@SuppressWarnings({ "rawtypes", "unchecked" })ActionInvocation getStatusInvocation = new ActionInvocation(getStatusAction); try { ActionCallback getvolume = new GetVolume(getStatusInvocation) {@Overridepublic void failure(@SuppressWarnings("rawtypes") ActionInvocation arg0, UpnpResponse arg1, String arg2) {}@SuppressWarnings("unused")public void received(@SuppressWarnings("rawtypes") ActionInvocation arg0, int arg1) {}}; upnpService.getControlPoint().execute(getvolume); } catch(Exception e) { e.printStackTrace(); }} /************************************************888 * @param upnpService * @param device mediarender设备名 * @param getavtransport avtransport事件回调监听函数 * 功能:设置mediarender暂停播放 */public static void mediaRenderpause(AndroidUpnpService upnpService, @SuppressWarnings("rawtypes") Device device, final GetCoshipavtransportstate getavtransport){if(device == null)return;@SuppressWarnings("rawtypes")Service service = device.findService(new UDAServiceId("AVTransport"));try{ ActionCallback pauseAction = new Pause(service) { @Override public void success(@SuppressWarnings("rawtypes") ActionInvocation invocation) { super.success(invocation); getavtransport.mediarenderpausesuccess(); } @Override public void failure(@SuppressWarnings("rawtypes") ActionInvocation invocation, UpnpResponse operation, String defaultMsg) { getavtransport.mediarenderpausefail(); } }; upnpService.getControlPoint().execute(pauseAction);}catch(Exception e){e.printStackTrace();}}/******************************************************* * @param upnpService * @param device mediarender设备名 * @param time seektime时间 * @param getavtransport avtransport事件回调监听函数 * 功能:设置mediarender进行seek播放 */public static void mediaRenderSeek(AndroidUpnpService upnpService, @SuppressWarnings("rawtypes") Device device, String time, final GetCoshipavtransportstate getavtransport){if(device == null)return;@SuppressWarnings("rawtypes")Service service = device.findService(new UDAServiceId("AVTransport"));try{ActionCallback seekAction = new Seek(service, time) {@Overridepublic void failure(@SuppressWarnings("rawtypes") ActionInvocation arg0, UpnpResponse arg1, String arg2) {getavtransport.mediarenderseekfail();}@Overridepublic void success(@SuppressWarnings("rawtypes") ActionInvocation invocation) {super.success(invocation);getavtransport.mediarenderseeksuccess();}};upnpService.getControlPoint().execute(seekAction);}catch(Exception e){e.printStackTrace();}}/************************************************************ * @param device * 功能:停止播放当前音乐或者视频内容 ***********************************************************/public static void mediaRemenderstop(AndroidUpnpService upnpService, @SuppressWarnings("rawtypes") final Device device, final GetCoshipavtransportstate getavtransport){if(device == null)return;@SuppressWarnings("rawtypes")Service service = device.findService(new UDAServiceId("AVTransport"));try{ActionCallback stopAction = new Stop(service){@Overridepublic void failure(@SuppressWarnings("rawtypes") ActionInvocation arg0, UpnpResponse arg1,String arg2) {getavtransport.mediarenderstopfail();}@Overridepublic void success(@SuppressWarnings("rawtypes") ActionInvocation invocation) {super.success(invocation);getavtransport.mediarenderstopsuccess();}};upnpService.getControlPoint().execute(stopAction);}catch(Exception e){e.printStackTrace();}}/********************************************************************8 * @param upnpService * @param device mediarender设备名 * @param getmediarenderinfo 获取mediainfo回调监听函数 * 功能:获取mediarender的媒体信息 */public static void GetMediaInfo(AndroidUpnpService upnpService, @SuppressWarnings("rawtypes") Device device, final Getmediarenderinfo getmediarenderinfo){if(device == null)return;@SuppressWarnings("rawtypes")Service service = device.findService(new UDAServiceId("AVTransport"));try{ActionCallback getmediainfo = new GetMediaInfo(service) {@Overridepublic void failure(@SuppressWarnings("rawtypes") ActionInvocation arg0, UpnpResponse arg1, String arg2) {getmediarenderinfo.getmediarendermediainfofail();}@Overridepublic void received(@SuppressWarnings("rawtypes") ActionInvocation invocation, MediaInfo mediaInfo) {getmediarenderinfo.getmediarendermediainfosuccess(mediaInfo);}};upnpService.getControlPoint().execute(getmediainfo);}catch(Exception e){e.printStackTrace();}}/*********************************************************************** * @param upnpService * @param device mediarender设备名 * @param getmediarenderinfo 获取mediainfo回调监听函数 * 功能:获取mediarender的播放位置信息 */public static void GetPositionInfo(AndroidUpnpService upnpService, @SuppressWarnings("rawtypes") Device device, final Getmediarenderinfo getmediarenderinfo){if(device == null)return;@SuppressWarnings("rawtypes")Service service = device.findService(new UDAServiceId("AVTransport"));try{ActionCallback getpositionInfo = new GetPositionInfo(service) {@Overridepublic void failure(@SuppressWarnings("rawtypes") ActionInvocation arg0, UpnpResponse arg1, String arg2) {System.out.println("GetPositionInfo failure");getmediarenderinfo.getmediarenderposinfofail();}@Overridepublic void received(@SuppressWarnings("rawtypes") ActionInvocation invocation, PositionInfo positionInfo) {getmediarenderinfo.getmediarenderposinfosuccess(positionInfo);}};upnpService.getControlPoint().execute(getpositionInfo);}catch(Exception e){e.printStackTrace();}}/********************************************* * @param upnpService upnp服务 * @param device 当前和客户端连接的DMR设备 * 功能:获取DMR当前的状态 *********************************************/public static void GetDmrTransportInfo(AndroidUpnpService upnpService, @SuppressWarnings("rawtypes") Device device){if(device == null)return;@SuppressWarnings("rawtypes")Service service = device.findService(new UDAServiceId("AVTransport"));ActionCallback getTransportInfo = new GetTransportInfo(service){@Overridepublic void received(@SuppressWarnings("rawtypes") ActionInvocation invocation,TransportInfo transportInfo) {System.out.println("transportInfo="+transportInfo.getCurrentTransportState());transportInfo.getCurrentTransportState();}@Overridepublic void failure(@SuppressWarnings("rawtypes") ActionInvocation invocation,UpnpResponse operation, String defaultMsg) {}};upnpService.getControlPoint().execute(getTransportInfo);}}
1 0
- 关于DLNA开发Cling开源库的使用
- cling开发DLNA找不到class的问题!
- cling开发DLNA找不到class的问题!
- Android基于Cling开发DLNA应用
- Android基于Cling开发DLNA应用
- Android基于Cling开发DLNA应用
- Android基于Cling开发DLNA应用
- Android基于Cling开发DLNA应用
- Android基于Cling开发DLNA应用
- 关于dlna开发使用的若干故障排除
- 关于DLNA的一些问题
- Cling项目中最新2.0版本的使用
- Cling
- 基于Platinum库的DLNA开发
- IOS DLNA PlatinumKit库的使用
- 使用Platium库开发dlna投屏功能
- 使用Platium库开发dlna投屏功能
- 使用Platium库开发dlna投屏功能
- 5.qemu-kvm 网络配置
- 进度有点慢
- 金山毒霸2002界面
- Qt学习之路(3):Hello, world!(续)
- 在源码中编译自己的 Android project
- 关于DLNA开发Cling开源库的使用
- Qt学习之路(4):初探信号槽
- 事务是什么,以及事务四个特性
- HDU 1052(贪心)
- Qt学习之路(5):组件布局
- 程序员必须知道的10大基础实用算法及其讲解(Javascript代码实现)
- 快速排序-c++(分别用数组和容器实现)
- 黑马程序员--进制转换
- Qt学习之路(6): API文档的使用