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 + -
显示快捷键?