用 JMF 开发视频播放器,运行能成功载入视频文件,可是没有声音,也不会自动播放。研究了好久都没研究出来哪里出现问题了。
import java.awt.BorderLayout;
import java.awt.Component;import java.awt.Dimension;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.net.URL;
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.EndOfMediaEvent;
import javax.media.Manager;
import javax.media.Player;
import javax.media.PrefetchCompleteEvent;
import javax.media.RealizeCompleteEvent;
import javax.media.Time;
public class VideoPlayer extends Frame implements ControllerListener
{
private int videoWidth=0;
private int videoHeight=0;
private int controlHeight=30;
private int insetWidth=10;
private int insetHeight=30;
private Player player; // 播放器
private Component visual; // 播放组件
private Component control; // 控制组件
public VideoPlayer()
{
// 设置窗口属性
setTitle("视频播放器");
setSize(500,400);
setLocation(400,80);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
if(player!=null)
player.close();
System.exit(0);
}
});
setVisible(true);
}
public void play()
{
try
{
// 准备一个要播放视频文件的 URL
URL url=new URL("测试的哥们请在这里加个 mpg 视频的路径");
player=Manager.createPlayer(url);
}catch(Exception e)
{
e.printStackTrace();
}
// 对 Player 对象注册监听器,能在相关事件发生时候执行相关的动作
player.addControllerListener(this);
// 让 Player 对象进行相关的资源分配
player.realize();
}
@Override
public void controllerUpdate(ControllerEvent ce)
{
if(ce instanceof RealizeCompleteEvent)
{
// Player 实例化完成后进行 Player 播放前预处理
player.prefetch();
}
else if(ce instanceof PrefetchCompleteEvent)
{
if(visual!=null)
return;
// 取得 Player 中的播放视频的组件,并得到视频的窗口大小
// 然后把视频窗口的组件添加到 Frame 窗口中
if((visual=player.getVisualComponent())!=null)
{
Dimension size=visual.getPreferredSize();
videoWidth=size.width;
videoHeight=size.height;
add(visual);
}
else
videoWidth=320;
// 取得 Player 中的视频播放控制条组件,并把该组件添加到 Frame 中
if((control=player.getControlPanelComponent())!=null)
{
controlHeight=control.getPreferredSize().height;
add(control,BorderLayout.SOUTH);
}
// 设定 Frame 窗口的大小,使其满足视频文件的默认大小
setSize(videoWidth+insetWidth,videoHeight+controlHeight+insetHeight);
validate();
// 启用视频播放组件并开始播放
player.start();
}
else if(ce instanceof EndOfMediaEvent)
{
// 当播放视频完成后,把时间条恢复到开始,并再次重新开始播放
player.setMediaTime(new Time(0));
player.start();
}
}
public static void main(String[] args)
{
VideoPlayer videoPlayer=new VideoPlayer();
videoPlayer.play();
}
}

1956

被折叠的 条评论
为什么被折叠?



