关于同步播放:
如果音视频单独进行播放,两个播放器很难保持统一并进行开始和停止。 JMF针对上述问题,Player通过调用addController方法,使两个Player结合起来,并设当前Player为终极的控制端。从属Player隶属于终极Player之下,终极Player所调用的方法同时也会在从属Player上调用。只有在两个Player都进入各自的完成状态,主控Player才抛出CompleteEvent事件。
实现过程如下:
创建音频视频Player
两个Player能够耦合要求两个Player都必须为Realized状态。通过Manager的createRealizedPlayer方法创建已经到达Realized状态态的Player,之后再通过您所要设定的终极Player的addController方法添加另一个player为附属player就可以实现两个player的整合
//创建媒体定位
MediaLocator mediaLocatorAudio = new MediaLocator(mediaLocationAudio);
MediaLocator mediaLocatorVedio = new MediaLocator(mediaLocationVedio);
//创建Player
playerAudio= Manager.createRealizedPlayer(mediaLocatorAudio );
playerVedio = Manager.createRealizedPlayer(mediaLocatorVedio );
//进行整合
playerAudio.addController(playerVedio);
添加音频视频组件
在选则主控Player时,要把音频源对应的Player作为终极Player,因为在得到控制面板的时候得不到音频的控制面板
//得到视频显示面板
visualMedia = playerVedio.getVisualComponent();
if (visualMedia != null)
//添加到上层容器的中间位置
add(visualMedia, BorderLayout.CENTER);
// 得到终极player的控制面板组件
mediaControl = playerAudio.getControlPanelComponent();
// 如果mediaControl 存在则将其加入到容器南部
if (mediaControl != null)
container.add(mediaControl, BorderLayout.SOUTH);
//进行界面更新
validate();
进行音频视频播放:
两个Player整合后,播放器只能对终极Player进行操纵。终极Player能够使从属Player调用相应的方法。
playerAudio.start();
小提示:
而当多媒体数据进行RTP流式传输时,音频和视频往往是采用不同的端口号在不同的的会话中传输,这样在接收端就存在音频视频播放不同步问题,可利用上述方法进行解决。