论坛首页 Java企业应用论坛

JMF的音视频同步播放

浏览 2093 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-05-29  

关于同步播放:

如果音视频单独进行播放,两个播放器很难保持统一并进行开始和停止。 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流式传输时,音频和视频往往是采用不同的端口号在不同的的会话中传输,这样在接收端就存在音频视频播放不同步问题,可利用上述方法进行解决。

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics