亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? .#mediarenderer.java.1.4

?? 國(guó)外的j2me播放器軟件
?? 4
字號(hào):
package no.auc.one.portableplayer.communication.mediarenderer;

import java.io.*;
import java.util.*;
import javax.microedition.io.*;
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;
import org.apache.log4j.*;

import no.auc.one.portableplayer.communication.*;
import no.auc.one.portableplayer.utils.*;

// XXX A lot of the functionality of this class is common with MediaServer. Should be 
//     possible to refactor these, and move some of the functionality up to the 
//     super class (UPnPDevice)

/**
 * Functionality for interacting with a UPnP Media Renderer. Currently it 
 * only supports the AV Transport service.
 * 
 * Usage example:
 * MediaRenderer mr = new MediaRenderer();
 * for(Enumerable e = mr.getMediaServers(); e.hasMoreElements(); ) {
 *    // Here you can interact with the specific media renderers discovered.
 * }
 */
public class MediaRenderer extends UPnPDevice implements Cloneable, CancelAction {
    private static Logger LOG = Logger.getLogger("MR");
    
    private static MediaRenderer[] mediaRenderers = null;
    private AVTransportService avTransport = null;
    private RenderingControlService rcontrol = null;
    private UPnPDiscovery discoRenderers = null;
    private boolean isUpdatingList = false;
	
    /**
     * Default constructor.
     */
	public MediaRenderer() {
        super();
	}

    /**
     * Creates a new MediaRenderer based on the parameters.
     *
     * @param dev UPnPDevice to use as the base for this class. Will be 
     *            copied, and no reference stored.
     *
     * @param avt Reference to a AVTransportService instance to be associated 
     *            with this class.
     * @param rcs Reference to a RenderingControlService instance to be associated
     *            with this class.
     */
    public MediaRenderer(UPnPDevice dev, AVTransportService avt, RenderingControlService rcs) {
        super(dev.getFriendlyName(), dev.getURLBase());
        
        this.avTransport = avt;
        this.rcontrol = rcs;
    }

    /**
     * Clone this class instance
     *
     * @return Copy of this device.
     */
    public Object clone() {
        MediaRenderer mr = new MediaRenderer(
            (UPnPDevice)this, 
            (AVTransportService)avTransport.clone(),
            (RenderingControlService)rcontrol.clone());
        return mr;
    }
    
    public void cancel() throws IOException {
        discoRenderers.cancel();
    }

    /**
     * Return the available media renderers found on the local network. Will 
     * update the list of available media renderers if it does not currently 
     * exist.
     *
     * @return Let you enumerate the discovered renderers.
     */
    // TODO Add auto-update for discovery (each hour or similar) see 
    //      MediaServer::getMediaServers for more info
    public Enumeration getMediaRenderers() throws NoSuchElementException,
                                                  IOException
    {
        if (mediaRenderers == null) {
            throw new IllegalStateException(
                "Media Renderers have not been discovered yet. Do updateMediaRendererList first.");
        }

        MediaRenderer[] rendererListClone = null;
        if (mediaRenderers != null) {
            rendererListClone = new MediaRenderer[mediaRenderers.length];
        
            for(int i = 0; i < mediaRenderers.length; i++) {
                rendererListClone[i] = (MediaRenderer)mediaRenderers[i].clone(); 
            }
        }

        return new MediaRendererEnumeration(rendererListClone);
    }
    
    public MediaRenderer getMediaRenderer(int index) throws NoSuchElementException, IOException {
        MediaRenderer mr = null;
        
        if (mediaRenderers == null) {
            throw new IllegalStateException(
                "Media Renderers have not been discovered yet. Do updateMediaRendererList first.");
        }

        if (mediaRenderers != null) {
            mr = (MediaRenderer)mediaRenderers[index].clone();
        }

        return mr;
    }
    
	public void updateMediaRendererList() throws IOException
	{		
        if (isUpdatingList) {
            return;
        } else {
            isUpdatingList = true;
        }

        try {
    		discoRenderers = new UPnPDiscovery(); 
    		String[] rendererLocationUrls = discoRenderers.start(
    			"urn:schemas-upnp-org:device:MediaRenderer:1",
    			5); // max duration set to 5 seconds
            
            if (rendererLocationUrls == null || rendererLocationUrls.length <= 0) {
                LOG.debug("No media renderers discovered.");
                mediaRenderers = null;
                return;
            } else {
                LOG.debug(
                    "Media Renderers discovered: " + rendererLocationUrls.length);
            }
    
            // Need to make the following more robust.
            // First add all available renderers to a vector. Then add all these devices 
            // to the mediaRenderers list
            
            Vector availableRenderers = new Vector();
            SAXParser parser = null;
            
            try {
                SAXParserFactory pfactory = SAXParserFactory.newInstance();
                parser = pfactory.newSAXParser();
            } catch (ParserConfigurationException pce) {
                LOG.fatal("PCE exception in updateMediaRendererList");
                LOG.fatal(pce);
            } catch (SAXException se) {
                LOG.fatal("SAXException in updateMediaRendererList");
                LOG.fatal(se);
            }
    
            if (parser == null) {
                mediaRenderers = null;
                return;
            }
            
    		for(int index = 0; index < rendererLocationUrls.length; index++)
    		{		
    			HttpConnection conn = null;
    			
                try{					
                    LOG.debug(
                        "MR" + index + ": " + rendererLocationUrls[index]);
    
    			    conn = (HttpConnection)Connector.open(
                        rendererLocationUrls[index]);
    				conn.setRequestMethod(HttpConnection.GET);
    				conn.setRequestProperty("Content-Length","0");				
                    MediaRenderer mr = new MediaRenderer();
                    MediaRendererDeviceDescriptionHandler mrddHandler = new 
                        MediaRendererDeviceDescriptionHandler(
                            mr, 
                            rendererLocationUrls[index]);
    
                    parser.parse(conn.openInputStream(), mrddHandler);
                    conn.close();
                    
                    LOG.debug(
                        "MediaRenderer found (" + index + ")" + 
                        " Name: " + mr.friendlyName + 
                        " URLBase: "  + mr.urlBase + 
                        " AVT: " + mr.avTransport.toString() + 
                        " RCS: " + mr.rcontrol.toString());
                    availableRenderers.addElement(mr);
                } catch (SAXException se) {
                    LOG.fatal("SAXExceptio in updateMediaRendererList");
                    LOG.fatal(se);
    			} catch (ConnectionNotFoundException cnfe) { 
                    LOG.fatal("Connection not found.");
                    LOG.fatal(cnfe);
    			} catch (IOException ioe) {
                    LOG.fatal(
                        "Error while getting device description for MR" + index);
                    LOG.fatal(ioe);
                }
    	    }		   
            
            if (availableRenderers == null || availableRenderers.size() <= 0) {
                mediaRenderers = null;
                return;
            }
            
            mediaRenderers = new MediaRenderer[availableRenderers.size()];
            for(int i = 0; i < availableRenderers.size(); i++) {
                mediaRenderers[i] = (MediaRenderer)availableRenderers.elementAt(i);
            }
        } finally {
            discoRenderers = null;
            isUpdatingList = false;
        }
	}
    
    /**
     * Get this device's associated AV Transport Service instance.
     *
     * @return AV Transport Service instance.
     */
    public AVTransportService getAVTransportService() {
        return avTransport;
    }
    
    /**
     * Get this device's associated Rendering Control Service instance.
     *
     * @return Rendering Control instance.
     */
    public RenderingControlService getRenderingControlService() {
        return rcontrol;
    }
    
    /**
     * Used to parse the device description of Media Renderers.
     */
    private class MediaRendererDeviceDescriptionHandler extends DefaultHandler{
    	private MediaRenderer mr;
    	private Vector services = new Vector();
        private Stack tagStack = new Stack();
        private String locationURL;
        
    	public MediaRendererDeviceDescriptionHandler(MediaRenderer mr, String url) {
            this.mr = mr;
            locationURL = url;
        }
        
        public void startElement(
            String uri, 
            String localName, 
            String qName, 
            Attributes attributes) throws SAXException 
        {
        	if(qName.equals("service")) {
                // Should know if the device description contains an URLBase 
                // element or not at this point
                if(mr.urlBase == null || mr.urlBase == "") {
                    // Use locationURL as URLBase
                    mr.urlBase = getHostAndPort(locationURL);
                }
                
                services.addElement(new UPnPService());
            }
            
        	tagStack.push(qName);
        }
        
        public void characters(char[] ch, int start, int length) throws SAXException {
            String chars = new String(ch, start, length).trim();
            
            if(chars.length() > 0) {
                String qName = (String)tagStack.peek();
                            
                if (qName.equals("friendlyName")) {
                    mr.friendlyName = chars;
                } else if (qName.equals("URLBase")) {
                	mr.urlBase = chars;
                } else if (qName.equals("serviceType")) {
                	UPnPService currentService = (UPnPService)services.lastElement();
                	currentService.setServiceType(chars);
                } else if (qName.equals("serviceId")) {
                	UPnPService currentService = (UPnPService)services.lastElement();
                	currentService.setServiceId(chars);
                } else if (qName.equals("controlURL")) {
                	UPnPService currentService = (UPnPService)services.lastElement();
                	currentService.setControlURL(mr.urlBase + chars);
                } else if (qName.equals("SCPDURL")) {
                	UPnPService currentService = (UPnPService)services.lastElement();
                	currentService.setSCPDURL(mr.urlBase + chars);
                } else if (qName.equals("eventSubURL")) {
                	UPnPService currentService = (UPnPService)services.lastElement();
                	currentService.setEventSubURL(mr.urlBase + chars);
                }
            }
        }
        
        public void endElement(String uri, String localName, String qName) throws SAXException {
        	tagStack.pop();    	
        }
        
        public void endDocument() throws SAXException {
    		if (services == null) {
    			return;
    		}
    
        	for (int i=0; i < services.size(); i++){
        		UPnPService currentService = (UPnPService)services.elementAt(i);
        		
        		if (currentService == null) {
                    LOG.debug("Null service detected. Possibly a bug somewhere?");
        			continue;
        		}
                
        		if (currentService.getServiceType().equals(
                        "urn:schemas-upnp-org:service:AVTransport:1")){
                    mr.avTransport = new AVTransportService(currentService);
                } else if (currentService.getServiceType().equals(
                        "urn:schemas-upnp-org:service:RenderingControl:1")){
                    mr.rcontrol = new RenderingControlService(currentService);
                } else {
                    LOG.debug("Unknown service found: " + currentService.getServiceType());
                }
        	}
        }

    	/**
    	 * Analyze the rendererLocationUrls to get only the address and port
    	 * @param url URL to find host and port of.
    	 * @return Returns host and port of an URL
    	 */
    	private String getHostAndPort(String url) {
    		int ss = 0;
    		for (int i = 8; i < url.length(); i++) {			
    		    ss=url.substring(8).indexOf('/');
    		}
            
    		return url.substring(0, ss + 9);
    	}
    }

    /**
     * Used for enumerating available Media Renderers.
     */
    private class MediaRendererEnumeration implements Enumeration {
        private MediaRenderer[] rendererList;
        private int currentIndex;
        
        public MediaRendererEnumeration (
            MediaRenderer[] renderers) 
        {
            rendererList = renderers;
            currentIndex = 0;
        }

        public boolean hasMoreElements() {
            if (rendererList == null || currentIndex > (rendererList.length - 1)) {
                return false;
            } else {
                return true;
            }
        }

        public Object nextElement() {
            if (hasMoreElements()) {
                return rendererList[currentIndex++];
            } else {
                throw new NoSuchElementException("No more Media Renderers available");
            }
        }
    }
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人sese在线| 91精品福利在线一区二区三区 | 国产精品美女久久久久久久久 | 欧美精品三级日韩久久| 国产乱码精品一区二区三区忘忧草| 一区二区三区在线免费视频| www日韩大片| 91麻豆精品国产91久久久更新时间 | 日韩一区二区三区三四区视频在线观看| 国产成人久久精品77777最新版本| 亚洲综合一二区| 国产欧美综合在线| 精品黑人一区二区三区久久| 欧美日韩视频专区在线播放| 成人av电影免费观看| 国产精品综合av一区二区国产馆| 天天综合色天天| 亚洲综合一区二区| 自拍偷拍欧美精品| 国产性做久久久久久| 日韩欧美高清一区| 6080午夜不卡| 欧美欧美欧美欧美| 欧美吞精做爰啪啪高潮| 91亚洲精品久久久蜜桃网站| 国产经典欧美精品| 国产精品一二三在| 国产精品自产自拍| 国产福利精品导航| 国产精品18久久久久久久久久久久 | 91麻豆产精品久久久久久| 国产一区二区中文字幕| 精品综合久久久久久8888| 天天色综合天天| 亚洲成人综合视频| 亚洲成人免费观看| 午夜激情久久久| 日韩精品高清不卡| 首页国产欧美日韩丝袜| 五月激情六月综合| 麻豆一区二区三| 六月丁香婷婷久久| 精油按摩中文字幕久久| 国产一区二区三区| 国产盗摄一区二区| 成人激情av网| 色婷婷综合激情| 欧美亚洲国产一区二区三区| 欧美午夜精品一区二区蜜桃| 欧美日韩高清一区二区| 6080yy午夜一二三区久久| 欧美一区二区久久久| 欧美va日韩va| 国产日韩欧美制服另类| 国产精品蜜臀av| 一区二区三区在线播| 亚洲综合男人的天堂| 午夜精品久久久久久久久久久 | 国产·精品毛片| 91在线观看免费视频| 欧美日韩日本视频| 久久午夜老司机| 亚洲视频一二三区| 五月天激情综合| 国产一区二区三区免费观看 | 欧美大片免费久久精品三p| 亚洲精品一区二区三区在线观看| 国产午夜精品美女毛片视频| 中文字幕一区在线| 午夜激情综合网| 国产精品资源在线看| 91一区在线观看| 欧美一级搡bbbb搡bbbb| 国产日韩欧美精品一区| 夜夜揉揉日日人人青青一国产精品 | 亚洲精品成人悠悠色影视| 手机精品视频在线观看| 国产乱妇无码大片在线观看| 色狠狠综合天天综合综合| 欧美一级搡bbbb搡bbbb| 国产精品久久久久久久久动漫| 亚洲一区二区三区四区在线观看| 久久99热这里只有精品| 91麻豆免费视频| 日韩女优av电影在线观看| 中文字幕一区二区三区精华液| 亚洲国产另类av| 国产成人福利片| 欧美日韩高清在线播放| 国产精品网站在线播放| 欧美bbbbb| 在线日韩国产精品| 国产喷白浆一区二区三区| 午夜欧美大尺度福利影院在线看| 国产91丝袜在线播放0| 欧美剧在线免费观看网站 | 久久99精品国产.久久久久| 99久久精品免费看国产| 日韩欧美国产一区二区在线播放| 亚洲桃色在线一区| 国产成人无遮挡在线视频| 欧美疯狂做受xxxx富婆| 18涩涩午夜精品.www| 国产一区在线精品| 亚洲视频电影在线| 国产91对白在线观看九色| 久久免费视频一区| 国产伦精品一区二区三区视频青涩 | 国产91丝袜在线播放0| 69堂国产成人免费视频| 亚洲综合一区在线| 本田岬高潮一区二区三区| 在线成人小视频| 亚洲欧美一区二区三区极速播放| 国产一区二区三区不卡在线观看| 69久久夜色精品国产69蝌蚪网| 1区2区3区国产精品| 国内久久精品视频| 欧美高清视频一二三区| 亚洲大尺度视频在线观看| 色综合久久中文综合久久牛| 国产精品夫妻自拍| 成人晚上爱看视频| 中日韩av电影| 懂色av一区二区三区免费看| wwwwww.欧美系列| 美国av一区二区| 日韩欧美激情四射| 麻豆精品视频在线观看免费| 日韩欧美美女一区二区三区| 日日嗨av一区二区三区四区| 欧美亚洲国产怡红院影院| 亚洲免费毛片网站| 99久久精品免费观看| 最新国产成人在线观看| jiyouzz国产精品久久| 国产精品久久久久久久久免费桃花| 国产成人在线视频免费播放| 国产婷婷色一区二区三区| 成人激情免费视频| 亚洲视频在线观看一区| 91免费国产在线| 亚洲综合图片区| 欧美精品日日鲁夜夜添| 日本aⅴ亚洲精品中文乱码| 精品欧美一区二区久久| 国产成a人无v码亚洲福利| 欧美国产日韩a欧美在线观看| 成人黄色网址在线观看| 1000精品久久久久久久久| 色先锋久久av资源部| 亚洲超碰精品一区二区| 日韩精品自拍偷拍| 国产91精品在线观看| 亚洲欧美另类久久久精品| 欧美日韩一区二区欧美激情 | 性做久久久久久免费观看| 欧美精品欧美精品系列| 久久99精品国产91久久来源| 亚洲国产精品ⅴa在线观看| 91麻豆自制传媒国产之光| 日韩中文字幕麻豆| 久久精品综合网| 色综合久久六月婷婷中文字幕| 亚洲午夜精品17c| 欧美mv日韩mv| 99精品黄色片免费大全| 日韩精品免费专区| 国产精品视频yy9299一区| 欧美少妇xxx| 韩国欧美一区二区| 亚洲天天做日日做天天谢日日欢| 欧美日韩高清在线| 国产精品一二三四区| 亚洲国产中文字幕| 久久新电视剧免费观看| 欧美在线一区二区| 国产一区二区精品久久91| 伊人一区二区三区| 精品福利一二区| 欧美图区在线视频| 国产成人精品三级| 日日嗨av一区二区三区四区| 国产精品乱人伦| 欧美大度的电影原声| 色综合中文字幕国产| 国产真实精品久久二三区| 洋洋av久久久久久久一区| 国产亚洲精品资源在线26u| 欧美亚洲综合在线| 丁香激情综合国产| 蜜桃av噜噜一区| 亚洲国产视频网站| 国产精品视频一二三区| 精品日韩一区二区三区| 欧美三级乱人伦电影| 99久久久免费精品国产一区二区| 久久99精品一区二区三区三区| 亚洲乱码国产乱码精品精小说| 精品少妇一区二区三区日产乱码 |