📄 avtransportservice.java
字号:
System.out.println("Player was already initialized. Closing it now");
p.close();
System.out.println("Player closed");
p = null;
}
System.out.println("Creating player for the AVTransportURI");
HttpMediaDataSource media = new HttpMediaDataSource(
pi.getCurrentURI());
p = Manager.createPlayer(media);
/*
p = Manager.createPlayer(
Connector.openInputStream(pi.getCurrentURI()),
"audio/mpeg");
*/
//
// Add listener
//
p.addPlayerListener(new SimplePlayerListener());
pi.setPlayer(p);
numberOfTracks = 1;
currentTrack = 1;
System.out.println("Prefetch content for the new player...");
p.prefetch(); //player state changed, notify PlayerInfo
//pi.notify();
} catch (IOException e) {
LOG.debug("IOException in RealizePlayer");
LOG.debug(e);
e.printStackTrace();
} catch (MediaException e) {
LOG.debug("MediaException in RealizePlayer");
LOG.debug(e);
e.printStackTrace();
} catch (Exception e) {
LOG.debug("Exception in RealizePlayer");
LOG.debug(e);
e.printStackTrace();
}
System.out.println("RealizePlayer finished");
}
private final class HttpMediaDataSource extends DataSource {
ContentConnection conn = null;
InputStream is = null;
HttpMediaStream mediaStream = null;
public HttpMediaDataSource(String locator) {
super(locator);
}
/* (non-Javadoc)
* @see javax.microedition.media.protocol.DataSource#connect()
*/
public void connect() throws IOException {
conn = (ContentConnection)Connector.open(getLocator());
is = conn.openInputStream();
}
/* (non-Javadoc)
* @see javax.microedition.media.protocol.DataSource#disconnect()
*/
public void disconnect() {
try {
stop();
} catch (IOException ioe) {
ioe.printStackTrace();
}
if (conn != null) {
try {
conn.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/* (non-Javadoc)
* @see javax.microedition.media.protocol.DataSource#getContentType()
*/
public String getContentType() {
if (conn != null) {
return conn.getType();
} else {
return null;
}
}
/* (non-Javadoc)
* @see javax.microedition.media.protocol.DataSource#getControl(java.lang.String)
*/
public Control getControl(String arg0) {
return null;
}
/* (non-Javadoc)
* @see javax.microedition.media.protocol.DataSource#getControls()
*/
public Control[] getControls() {
return null;
}
/* (non-Javadoc)
* @see javax.microedition.media.protocol.DataSource#getStreams()
*/
public SourceStream[] getStreams() {
return new SourceStream[]{mediaStream};
}
/* (non-Javadoc)
* @see javax.microedition.media.protocol.DataSource#start()
*/
public void start() throws IOException {
if (conn != null) {
mediaStream = new HttpMediaStream(is);
} else {
throw new IllegalStateException();
}
}
/* (non-Javadoc)
* @see javax.microedition.media.protocol.DataSource#stop()
*/
public void stop() throws IOException {
if (mediaStream != null) {
mediaStream.close();
} else {
throw new IllegalStateException();
}
}
}
private final class HttpMediaStream implements SourceStream {
private InputStream httpIs;
private long pos = 0;
public HttpMediaStream(InputStream is) {
super();
httpIs = is;
}
public Control getControl(String arg0) {
return null;
}
public Control[] getControls() {
return null;
}
public ContentDescriptor getContentDescriptor() {
return new ContentDescriptor("hepp");
}
public long getContentLength() {
return -1;
}
public int getSeekType() {
return SourceStream.NOT_SEEKABLE;
}
public int getTransferSize() {
return -1;
}
public int read(byte[] b, int off, int len) throws IOException {
return httpIs.read(b, off, len);
}
public long seek(long where) throws IOException {
return pos;
}
public long tell() {
return pos;
}
public void close() throws IOException {
httpIs.close();
}
}
/*
private final class HttpMediaMetaDataControl implements MetaDataControl {
public String[] getKeys() {
return "TITLE_KEY";
}
public String getKeyValue(String arg0) {
// TODO Auto-generated method stub
return null;
}
}
*/
}
private class GetMediaInfoAction extends UPnPAction {
public GetMediaInfoAction () {
super(
"GetMediaInfo",
new UPnPActionArgument[]{
new UPnPActionArgument(
"InstanceID",
UPnPActionArgument.ARGUMENT_DIRECTION_IN,
"A_ARG_TYPE_InstanceID"),
new UPnPActionArgument(
"NrTracks",
UPnPActionArgument.ARGUMENT_DIRECTION_OUT,
"NumberOfTracks"),
new UPnPActionArgument(
"MediaDuration",
UPnPActionArgument.ARGUMENT_DIRECTION_OUT,
"CurrentMediaDuration"),
new UPnPActionArgument(
"CurrentURI",
UPnPActionArgument.ARGUMENT_DIRECTION_OUT,
"AVTransportURI"),
new UPnPActionArgument(
"CurrentURIMetaData",
UPnPActionArgument.ARGUMENT_DIRECTION_OUT,
"AVTransportURIMetaData"),
new UPnPActionArgument(
"NextURI",
UPnPActionArgument.ARGUMENT_DIRECTION_OUT,
"NextAVTransportURI"),
new UPnPActionArgument(
"NextURIMetaData",
UPnPActionArgument.ARGUMENT_DIRECTION_OUT,
"NextAVTransportURIMetaData"),
new UPnPActionArgument(
"PlayMedium",
UPnPActionArgument.ARGUMENT_DIRECTION_OUT,
"PlaybackStorageMedium"),
new UPnPActionArgument(
"RecordMedium",
UPnPActionArgument.ARGUMENT_DIRECTION_OUT,
"RecordStorageMedium"),
new UPnPActionArgument(
"WriteStatus",
UPnPActionArgument.ARGUMENT_DIRECTION_OUT,
"RecordMediumWriteStatus")});
}
public void invoke(UPnPActionArgument[] args){
int instanceID = Integer.parseInt((String)args[0].getValue());
if (instanceID == 0) {
args[1].setValue(new Integer(numberOfTracks));
args[2].setValue("02:10");
args[3].setValue(avTransportUri);
args[4].setValue(avTransportUriMetaData);
args[5].setValue("");
args[6].setValue("");
args[7].setValue(playbackStorageMedium);
args[8].setValue(recordStorageMedium);
args[9].setValue(recordMediumWriteStatus);
} else {
System.out.println("Wrong instance ID in request");
// throw new UPnPException...
}
}
}
private class GetTransportInfoAction extends UPnPAction {
public GetTransportInfoAction () {
super(
"GetTransportInfo",
new UPnPActionArgument[]{
new UPnPActionArgument(
"InstanceID",
UPnPActionArgument.ARGUMENT_DIRECTION_IN,
"A_ARG_TYPE_InstanceID"),
new UPnPActionArgument(
"CurrentTransportState",
UPnPActionArgument.ARGUMENT_DIRECTION_OUT,
"TransportState"),
new UPnPActionArgument(
"CurrentTransportStatus",
UPnPActionArgument.ARGUMENT_DIRECTION_OUT,
"TransportStatus"),
new UPnPActionArgument(
"CurrentSpeed",
UPnPActionArgument.ARGUMENT_DIRECTION_OUT,
"TransportPlaySpeed")});
}
public void invoke(UPnPActionArgument[] args){
int instanceID = Integer.parseInt((String)args[0].getValue());
args[1].setValue(transportState);
args[2].setValue(transportStatus);
args[3].setValue(transportPlaySpeed);
}
}
private class GetPositionInfoAction extends UPnPAction {
public GetPositionInfoAction () {
super(
"GetPositionInfo",
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -