⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 avtransportservice.java

📁 国外的j2me播放器软件
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
package no.auc.one.portableplayer.lmr;

import java.io.IOException;
import java.io.InputStream;
import java.util.Hashtable;

import javax.microedition.io.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;
import javax.microedition.media.protocol.*;

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

import org.apache.log4j.*;

public final class AVTransportService extends UPnPHostingServiceBase {
	private static Logger LOG = Logger.getLogger("LMR/AVT");
	private PlayerInfo pi = null;

	//required Actions
	UPnPAction SetAVTransportURI;			//priority = 1
	UPnPAction GetMediaInfo;
	UPnPAction GetTransportInfo;
	UPnPAction GetPositionInfo;
	UPnPAction GetDeviceCapabilities;
	UPnPAction GetTransportSettings;
	UPnPAction Stop;						//priority = 1
	UPnPAction Play;						//priority = 1
	UPnPAction Seek;
	UPnPAction Next;
	UPnPAction Previous;
	
	//optional Actions
	UPnPAction Pause;
	
	//internal variables for required State Variables
	private String transportState = "STOPPED";
	private String transportStatus;
	private String playbackStorageMedium = "NETWORK";
	private String recordStorageMedium = "NOT_IMPLEMENTED";
	private String possiblePlaybackStorageMedia = "NETWORK";
	private String possibleRecordStorageMedia = "NOT_IMPLEMENTED";
	private String CurrentPlayMode_in;					//default = "NORMAL"
	private String transportPlaySpeed = "1";
	private String recordMediumWriteStatus = "NOT_IMPLEMENTED";
	private String CurrentRecordQualityMode_in;
	private String possibleRecordQualityModes = "NOT_IMPLEMENTED";
	private int numberOfTracks = 0;
	private int currentTrack = 0;
	private String CurrentTrackDuration_in;
	private String CurrentMediaDuration_in;
	private String CurrentTrackMetaData_in;
	private String CurrentTrackURI_in;
	private String avTransportUri = "";
	private String avTransportUriMetaData = "";
	private String RelativeTimePosition_in;
	private String AbsoluteTimePosition_in;
	private int RelativeCounterPosition_in;
	private int AbsoluteCounterPosition_in;
	private String LastChange_in;
    private RealizePlayer playerRealization = new RealizePlayer();
	
	private Hashtable actions;
    public InputStream mediaStream;
	
	public AVTransportService (PlayerInfo pi){
		this.pi = pi;		
		
		actions = new Hashtable(13);
		
		SetAVTransportURI = new SetAVTransportURIAction();
		actions.put(SetAVTransportURI.getName(), SetAVTransportURI);
		GetMediaInfo = new GetMediaInfoAction();
		actions.put(GetMediaInfo.getName(), GetMediaInfo);
		GetTransportInfo = new GetTransportInfoAction();
		actions.put(GetTransportInfo.getName(), GetTransportInfo);
		GetPositionInfo = new GetPositionInfoAction();
		actions.put(GetPositionInfo.getName(), GetPositionInfo);
		GetDeviceCapabilities = new GetDeviceCapabilitiesAction();
		actions.put(GetDeviceCapabilities.getName(), GetDeviceCapabilities);
		GetTransportSettings = new GetTransportSettingsAction();
		actions.put(GetTransportSettings.getName(), GetTransportSettings);
		Stop = new StopAction();
		actions.put(Stop.getName(), Stop);
		Play = new PlayAction();
		actions.put(Play.getName(), Play);
		Seek = new SeekAction();
		actions.put(Seek.getName(), Seek);
		Next = new NextAction();
		actions.put(Next.getName(), Next);
		Previous = new PreviousAction();
		actions.put(Previous.getName(), Previous);
		
		Pause = new PauseAction();
		actions.put(Pause.getName(), Pause);
	}
	
	public String serviceType() {
		return "urn:schemas-upnp-org:service:AVTransport:1";
	}

	public String serviceId() {
		return "urn:upnp-org:serviceId:AVTransport";
	}

	public UPnPAction[] actionList() {
		return null;
	}

	public UPnPStateVariable[] stateVariableList() {
		return new UPnPStateVariable[]{
		    new UPnPStateVariable(
                "TransportState", 
                UPnPStateVariable.STATEVARIABLE_DATATYPE_STRING,
                false,
                new String[]{
                    "STOPPED",
                    "PLAYING",
                    "TRANSITIONING",
                    "PAUSED_PLAYBACK",
                    "PAUSED_RECORDING",
                    "RECORDING",
                    "NO_MEDIA_PRESENT"}),
		    new UPnPStateVariable(
                "TransportStatus", 
                UPnPStateVariable.STATEVARIABLE_DATATYPE_STRING,
                false),
		    new UPnPStateVariable(
                "PlaybackStorageMedium", 
                UPnPStateVariable.STATEVARIABLE_DATATYPE_STRING,
                false,
                new String[]{"NETWORK"}),
		    new UPnPStateVariable(
                "RecordStorageMedium", 
                UPnPStateVariable.STATEVARIABLE_DATATYPE_STRING,
                false,
                new String[]{}),
		    new UPnPStateVariable(
                "PossiblePlaybackStorageMedia", 
                UPnPStateVariable.STATEVARIABLE_DATATYPE_STRING,
                false),
		    new UPnPStateVariable(
                "PossibleRecordStorageMedia", 
                UPnPStateVariable.STATEVARIABLE_DATATYPE_STRING,
                false),
		    new UPnPStateVariable(
                "CurrentPlayMode", 
                UPnPStateVariable.STATEVARIABLE_DATATYPE_STRING,
                false,
                new String[]{"NORMAL"}),
		    new UPnPStateVariable(
				"TransportPlaySpeed",
				UPnPStateVariable.STATEVARIABLE_DATATYPE_STRING,
                false),
		    new UPnPStateVariable(
				"RecordMediumWriteStatus",
				UPnPStateVariable.STATEVARIABLE_DATATYPE_STRING,
                false,
                new String[]{"NOT_IMPLEMENTED"}),
		    new UPnPStateVariable(
				"CurrentRecordQualityMode",
				UPnPStateVariable.STATEVARIABLE_DATATYPE_STRING,
                false,
                new String[]{"NOT_IMPLEMENTED"}),
		    new UPnPStateVariable(
				"PossibleRecordQualityModes",
				UPnPStateVariable.STATEVARIABLE_DATATYPE_STRING,
                false),
		    new UPnPStateVariable(
				"NumberOfTracks",
				UPnPStateVariable.STATEVARIABLE_DATATYPE_UI4,
                false,
                new UPnPValueRange(new Integer(0), new Integer(999))),
		    new UPnPStateVariable(
				"CurrentTrack",
				UPnPStateVariable.STATEVARIABLE_DATATYPE_UI4,
                false,
                new UPnPValueRange(new Integer(0), new Integer(999), new Integer(1))),
		    new UPnPStateVariable(
				"CurrentTrackDuration",
				UPnPStateVariable.STATEVARIABLE_DATATYPE_STRING,
                false),
		    new UPnPStateVariable(
				"CurrentMediaDuration",
				UPnPStateVariable.STATEVARIABLE_DATATYPE_STRING,
                false),
		    new UPnPStateVariable(
				"CurrentTrackMetaData",
				UPnPStateVariable.STATEVARIABLE_DATATYPE_STRING,
                false),
		    new UPnPStateVariable(
				"CurrentTrackURI",
				UPnPStateVariable.STATEVARIABLE_DATATYPE_STRING,
                false),
		    new UPnPStateVariable(
				"AVTransportURI",
				UPnPStateVariable.STATEVARIABLE_DATATYPE_STRING,
                false),
		    new UPnPStateVariable(
				"AVTransportURIMetaData",
				UPnPStateVariable.STATEVARIABLE_DATATYPE_STRING,
                false),
		    new UPnPStateVariable(
				"NextAVTransportURI",
				UPnPStateVariable.STATEVARIABLE_DATATYPE_STRING,
                false),
		    new UPnPStateVariable(
				"NextAVTransportURIMetaData",
				UPnPStateVariable.STATEVARIABLE_DATATYPE_STRING,
                false),
		    new UPnPStateVariable(
				"RelativeTimePosition",
				UPnPStateVariable.STATEVARIABLE_DATATYPE_STRING,
                false),
		    new UPnPStateVariable(
				"AbsoluteTimePosition",
				UPnPStateVariable.STATEVARIABLE_DATATYPE_STRING,
                false),
		    new UPnPStateVariable(
				"RelativeCounterPosition",
				UPnPStateVariable.STATEVARIABLE_DATATYPE_I4,
                false),
		    new UPnPStateVariable(
				"AbsoluteCounterPosition",
				UPnPStateVariable.STATEVARIABLE_DATATYPE_I4,
                false),
		    new UPnPStateVariable(
				"LastChange",
				UPnPStateVariable.STATEVARIABLE_DATATYPE_STRING),
		    new UPnPStateVariable(
				"A_ARG_TYPE_SeekMode",
				UPnPStateVariable.STATEVARIABLE_DATATYPE_STRING,
                false,
                new String[]{"TRACK_NR"}),
		    new UPnPStateVariable(
				"A_ARG_TYPE_SeekTarget",
				UPnPStateVariable.STATEVARIABLE_DATATYPE_STRING,
                false),
		    new UPnPStateVariable(
				"A_ARG_TYPE_InstanceID",
				UPnPStateVariable.STATEVARIABLE_DATATYPE_UI4,
                false)};
	}
	
    public Hashtable actionTable() {
        return actions;
    }
    
	//internal implementation for required Actions
    //  http://www12.nrk.no/magasin/upunkt/urort/laater/2/74092.mp3
	private class SetAVTransportURIAction extends UPnPAction {
		public SetAVTransportURIAction (){
			super(
					"SetAVTransportURI", 
					new UPnPActionArgument[]{
							new UPnPActionArgument(
									"InstanceID",
									UPnPActionArgument.ARGUMENT_DIRECTION_IN,
									"A_ARG_TYPE_InstanceID"),
							new UPnPActionArgument(
									"CurrentURI",
									UPnPActionArgument.ARGUMENT_DIRECTION_IN,
									"AVTransportURI"),
							new UPnPActionArgument(
									"CurrentURIMetaData",
									UPnPActionArgument.ARGUMENT_DIRECTION_IN,
									"AVTransportURIMetaData")});
		}
		
		public void invoke(UPnPActionArgument[] args) throws UPnPActionInvocationException {
            LOG.debug("SetAVTransportURI action");
            
			//
            // Check that InstanceID = 0, since that is the only instance ID 
            // allowed.
            // 
            int connectionID = Integer.parseInt((String)args[0].getValue());
            if (connectionID != 0) {
                LOG.warn(
                    "Connection ID is not 0 as it is supposed to be. It really is: " + connectionID);
                
                throw new UPnPActionFailedException("Illegal instance ID");
            }
            
            Object o = args[1].getValue();
            if (o != null) {
                avTransportUri = (String)o;
                LOG.debug("New AV Transport URI = " + avTransportUri);
            }
            pi.setCurrentURI(avTransportUri);
            
            if (playerRealization != null && playerRealization.isAlive()) {
                throw new UPnPActionFailedException("Busy. Please retry later...");
            }
            
            playerRealization = new RealizePlayer();
            playerRealization.start();

            o = args[2].getValue();
            if (o != null && o instanceof String) {
                avTransportUriMetaData = (String)o;
            }            
		}
	}
	
	private final class RealizePlayer extends java.lang.Thread {
		public void run() {
            System.out.println("RealizePlayer run");
            
			try {
                Player p = pi.getPlayer();
                if (p != null) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -