关于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
原创粉丝点击