Failed to realize: com.sun.media.PlaybackEngine@480457

本文介绍了解决Java Media Framework (JMF) 播放特定格式AVI文件遇到的问题,包括错误信息解析及提供了一个经过测试可以正常播放的AVI文件示例。同时给出了使用JMF进行视频播放的基本代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[quote][color=red]Unable to handle format: XVID, 960x540, FrameRate=29.9, Length=777600 0 extra bytes
Unable to handle format: mpeglayer3, 44100.0 Hz, 0-bit, Stereo, Unsigned, 16000.0 frame rate, FrameSize=8 bits
Failed to realize: com.sun.media.PlaybackEngine@480457
Error: Unable to realize com.sun.media.PlaybackEngine@480457[/color]
在测试JMF时出现了这样的错误,一般是avi的编码格式问题,JMF对一些新的avi格式是不支持的,特上传了一个通过测试的avi;以供测试之用
[/quote]
/**
* 视频播放测试
*/
public class VedioTest extends JFrame {
private Player player;

public static void main(String args[]) {
String path = "file:///E:/hello.avi";
VedioTest vt = new VedioTest(path);
vt.initUI();
}

/**
* 在构造器中初始化数据
*
* @param:要初始化的数据源,即视频文件的路径
*/
public VedioTest(String path) {
// 确定视频文件的位置
javax.media.MediaLocator ml = new javax.media.MediaLocator(path);
try {
// 创建一个播放器对象
player = javax.media.Manager.createPlayer(ml);
// 创建一个播放器的控制器监听器对象
MyConreollerListener l = new MyConreollerListener(player, this);
// 给播放器对象注册控制器监听器
player.addControllerListener(l);
// 开始播放
player.start();
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 初始化界面
*/
public void initUI() {
this.setTitle("JMF播放视频示例");
this.setSize(400, 300);
this.setDefaultCloseOperation(3);
this.setVisible(true);
}
}

/**
* 视频控制器监听器类
*/
public class MyConreollerListener implements javax.media.ControllerListener {
private Player player;
private JFrame jf;

public MyConreollerListener(Player player, JFrame jf) {
this.player = player;
this.jf = jf;
}

/**
* 实现监听器接口中的方法.此方法可通知应用程序对播放器的事件做出反应
*/
public synchronized void controllerUpdate(ControllerEvent e) {
if (e instanceof javax.media.RealizeCompleteEvent) {
Component comp;
// 得到播放器的可视容器,即播放器显示视频的容器
if ((comp = player.getVisualComponent()) != null) {
// 将可视容器加到窗体上
jf.add("Center", comp);
}
// 得到播放器的控制面板容器
if ((comp = player.getControlPanelComponent()) != null) {
// 添加到窗体上
jf.add("South", comp);
}
jf.validate();// 刷新窗体
}
}
}

能不能在我main.c里面这个定时器的函数里面实现呢void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { /* USER CODE BEGIN Callback 0 */ if(htim == &htim4)//htim4 500HZ 2ms中断一次 { TimerCount++; TimerCount1++; TimerCount2++; //计算电机转速 if(TimerCount %5 == 0)//每10ms 执行一次 { Encode1Count = (short)__HAL_TIM_GET_COUNTER(&htim2); Encode2Count = (short)__HAL_TIM_GET_COUNTER(&htim3); __HAL_TIM_SET_COUNTER(&htim2,0); __HAL_TIM_SET_COUNTER(&htim3,0); Motor1Speed = (float)Encode1Count*100/9.6/11/4; Motor2Speed = (float)Encode2Count*100/9.6/11/4; TimerCount=0; } //计算里程数 if(TimerCount1 %10 == 0)//每20ms执行一次 { Motor_Set(PID_realize(&pidMotor1Speed,Motor1Speed),PID_realize(&pidMotor2Speed,Motor2Speed)); //Motor_Set(50,-50); /*里程数(cm) += 时间周期(s)*车轮转速(转/s)*车轮周长(cm)*/ Mileage += 0.02*Motor1Speed*20.5; TimerCount1=0; } // 每1s(500次中断)执行一次串口输出 if(TimerCount2 % 500 == 0) { // 串口输出当前状态 printf("Motor1: Target=%.2f, actual=%.2f, PWM=%.2f\r\n", pidMotor1Speed.target_val, Motor1Speed, PID_realize(&pidMotor1Speed, Motor1Speed)); printf("Motor2: Target=%.2f, actual=%.2f, PWM=%.2f\r\n", pidMotor2Speed.target_val, Motor2Speed, PID_realize(&pidMotor2Speed, Motor2Speed)); printf("P:%.3f I:%.3f D:%.3f A:%.3f B:%.3f\r\n",p,i,d,a,b); sprintf((char *)Usart3String,"pitch:%.2f roll:%.2f yaw:%.2f\r\n",pitch,roll,yaw);//显示6050数据 HAL_UART_Transmit(&huart3,( uint8_t *)Usart3String,strlen(( const char *)Usart3String),0xFFFF);//通过串口三输出字符 strlen:计算字符串大小 sprintf((char *)Usart3String,"HC_SR04:%.2fcm\r\n",HC_SR04_Read());//显示超声波数据 HAL_UART_Transmit(&huart3,( uint8_t *)Usart3String,strlen(( const char *)Usart3String),0xFFFF);//通过串口三输出字符 strlen:计算字符串大小 printf("pitch:%.2f roll:%.2f yaw:%.2f\r\n",pitch,roll,yaw); TimerCount2=0; } } /* USER CODE END Callback 0 */
最新发布
07-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值