📄 avtransportservice.java
字号:
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 + -