videoplayer.java
来自「Sony Ericsson手机上的Facebook客户端全套代码」· Java 代码 · 共 331 行
JAVA
331 行
// Decompiled by Jad v1.5.7g. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3)
// Source File Name: VideoPlayer.java
package se.southend.drops.media;
import java.io.InputStream;
import java.util.Vector;
import javax.microedition.lcdui.Displayable;
import javax.microedition.media.*;
import javax.microedition.media.control.VideoControl;
import javax.microedition.media.control.VolumeControl;
import se.southend.drops.screen.ScreenCanvas;
import se.southend.drops.screen.ScreenEngine;
public class VideoPlayer
{
public VideoPlayer()
{
instance = this;
prevFrameSleep = -1;
frameSleep = 1;
needsNewDisplay = true;
playerListeners = new Vector(1);
}
public static VideoPlayer getInstance()
{
if(instance == null)
new VideoPlayer();
return instance;
}
public void play()
{
if(player == null)
player = createPlayer();
if(player == null || player.getState() == 400)
return;
for(int i = 0; i < playerListeners.size(); i++)
player.addPlayerListener((PlayerListener)playerListeners.elementAt(i));
prevFrameSleep = ScreenEngine.getInstance().getFrameSleep();
ScreenEngine.getInstance().setFrameSleep(frameSleep);
if(fullscreen)
ScreenEngine.getInstance().setFlushGraphics(false);
else
ScreenEngine.getInstance().setFlushAreas(getFlushAreas());
if(needsNewDisplay)
initDisplay();
try
{
if(savedMediaTime != 0L && inputStream != null && locator != null)
player.setMediaTime(savedMediaTime);
player.start();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void pause()
{
if(player != null)
try
{
savedMediaTime = 0L;
player.stop();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void discard()
{
if(player != null)
{
player.close();
player = null;
ScreenEngine.getInstance().setFlushAreas((int[][])null);
ScreenEngine.getInstance().setFlushGraphics(true);
if(prevFrameSleep != -1)
{
ScreenEngine.getInstance().setFrameSleep(prevFrameSleep);
prevFrameSleep = -1;
}
}
needsNewDisplay = true;
}
public boolean isReady()
{
return player != null && player.getState() >= 300;
}
public boolean isPlaying()
{
return player != null && player.getState() == 400;
}
public void setMediaTime(long mediaTime)
{
savedMediaTime = mediaTime;
}
public void setVolumeLevel(int volume)
{
VolumeControl control = (VolumeControl)player.getControl("VolumeControl");
control.setLevel(volume);
}
public Player getPlayer()
{
return player;
}
public void addPlayerListener(PlayerListener listener)
{
playerListeners.addElement(listener);
if(isPlaying())
player.addPlayerListener(listener);
}
public void removePlayerListener(PlayerListener listener)
{
playerListeners.removeElement(listener);
if(isPlaying())
player.removePlayerListener(listener);
}
public void setPosition(int x, int y)
{
this.x = x;
this.y = y;
}
public void setSize(int width, int height)
{
this.width = width;
this.height = height;
}
public void setLocator(String locator)
{
if(locator != null)
if(locator.charAt(0) == '/')
{
inputStream = getClass().getResourceAsStream(locator);
contentType = getContentType(locator);
} else
{
inputStream = null;
contentType = null;
}
this.locator = locator;
}
public void setInputStream(InputStream inputStream, String contentType)
{
locator = null;
this.inputStream = inputStream;
this.contentType = contentType;
}
public boolean isFullscreen()
{
return fullscreen;
}
public void setFullscreen(boolean fullscreen)
{
if(fullscreen != this.fullscreen && isPlaying())
{
this.fullscreen = fullscreen;
setMediaTime(player.getMediaTime());
discard();
play();
}
}
public int getTransform()
{
return transform;
}
public void setTransform(int transform)
{
this.transform = transform;
}
public boolean isOverlayed()
{
return overlayed;
}
public void setOverlayed(boolean overlayed)
{
this.overlayed = overlayed;
}
public static String getContentType(String url)
{
url = url.toLowerCase();
if(url.endsWith("mp4"))
return "video/mp4";
if(url.endsWith("3gp"))
return "video/3gpp";
if(url.endsWith("3gpp"))
return "video/3gpp";
if(url.endsWith("3g2"))
return "video/3gpp2";
if(url.endsWith("3gpp2"))
return "video/3gpp2";
else
return null;
}
private int[][] getFlushAreas()
{
Vector areas = new Vector();
if(y > 0)
areas.addElement(new int[] {
0, 0, screenWidth, y
});
if(x > 0)
areas.addElement(new int[] {
0, y, x, height
});
if(x + width < screenWidth)
areas.addElement(new int[] {
x + width, y, (screenWidth - x) + width, height
});
if(y + height < screenHeight)
areas.addElement(new int[] {
0, y + height, screenWidth, (screenHeight - y) + height
});
int flushAreas[][] = new int[areas.size()][];
for(int i = 0; i < flushAreas.length; i++)
flushAreas[i] = (int[])(int[])areas.elementAt(i);
return flushAreas;
}
private void initDisplay()
{
try
{
VideoControl videoControl = (VideoControl)player.getControl("VideoControl");
Displayable displayable = ScreenCanvas.getInstance();
screenWidth = ScreenCanvas.getInstance().getWidth();
screenHeight = ScreenCanvas.getInstance().getHeight();
if(fullscreen)
{
videoControl.initDisplayMode(0x1 | (overlayed ? 0x100 : 0) | 0x50, displayable);
videoControl.setDisplayLocation(0, 0);
videoControl.setDisplaySize(screenWidth, screenHeight);
} else
{
videoControl.initDisplayMode(0x1 | (overlayed ? 0x100 : 0) | transform << 4, displayable);
videoControl.setDisplayLocation(x, y);
videoControl.setDisplaySize(width, height);
}
videoControl.setVisible(true);
}
catch(Exception e)
{
e.printStackTrace();
}
needsNewDisplay = false;
}
private Player createPlayer()
{
Player player = null;
try
{
if(inputStream != null)
{
if(locator != null)
{
inputStream.close();
inputStream = getClass().getResourceAsStream(locator);
contentType = getContentType(locator);
}
player = Manager.createPlayer(inputStream, contentType);
} else
{
player = Manager.createPlayer(locator);
}
if(player != null)
{
player.realize();
player.prefetch();
}
}
catch(Exception e)
{
e.printStackTrace();
player = null;
}
return player;
}
private static final int DEFAULT_FRAME_SLEEP = 1;
private static final boolean CANVAS_SWITCH_WORKAROUND = false;
private Vector playerListeners;
private int frameSleep;
private int prevFrameSleep;
private Player player;
private String locator;
private InputStream inputStream;
private String contentType;
private long savedMediaTime;
private int screenWidth;
private int screenHeight;
private int x;
private int y;
private int width;
private int height;
private int transform;
private boolean fullscreen;
private boolean overlayed;
private boolean needsNewDisplay;
private static VideoPlayer instance;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?