视频播放器之遇到问题篇(写的不好不对的地方欢迎指出)

                                                        视频播放器之遇到问题篇

---------------------------------------------------------------------------------------------------------------------------

遇到问题1:

       当播放公司服务器视频,在模拟器2.1系统下无问题播放,但在模拟器2.2系统下当执行到MediaPlayer.prepaer();这个方法时会抛出IOException异常?

      

解决思路:

       首先去查看了Android里面MediaPlayer.prepaer();的源代码,看看在什么情况在会抛出IO异常,但是它的MediaPlayer.java里的prepaer()方法是 native的,看MeidaPlayer.cpp也没具体看明白.后来查看Android Supported Media Formats发现其支持视频编码是Baseline Profile (BP),而播放视频通过MediaInfo查看其视频编码是Baseline@3。后来连接手机调试,使用MOTO Defy 2.2无法播放,但放到HTCG7 2.2及平板电脑上可正常播放,据此推断,可能是由于厂家定制底层和内核的时候,根据需求增减了一部分支持的视频编码。

 

---------------------------------------------------------------------------------------------------------------------------

遇到问题2

       正常情况下如果视频处于started状态直接调用MediaPlayer.seekTo()跳转指定时间没有问题,但是如果处于paused状态调用MediaPlayer.seekTo()方法后,此时开始调用start()方法会出现error,,onError(MediaPlayer mp, int what, int extra)中返回的是

07-1916:05:29.499: INFO/System.out(7763):  whatis 100   extra  0

100代表的是MEDIA_ERROR_SERVER_DIED

extra  0没搞懂是什么,后来查看自带的播放器也存在这个问题,视频暂停,然后拖动进度条,在开始会发生错误。

 

解决办法:

       尝试方法1:

1在拖动进度条监听器的onStopTrackingTouch()方法中首先检测视频是否正在播放(mMediaPlayer.isPlaying()==true),

2如果拖动前是暂停状态的话,就先start进入started状态,

3然后在调用seekTo()方法,测试后还是会问题,错误如下

 

07-1916:54:05.569: ERROR/ProfileVideoFrameDrops(8984): PVMediaOutputNodePort 1Frames dropped at 1

07-1916:54:05.960: ERROR/TI_Video_Decoder(8984): 2273 VIDDEC_HandleCommandFlush DSPflushed without processing SPS/PPS. saving first buffer

07-1916:54:05.983: ERROR/MediaPlayer(8959): internal/external state mismatchcorrected

 

onError(MediaPlayermp, int what, int extra)中返回的是

07-1916:54:05.983: INFO/System.out(8959): what is 100      extra 0

 

然后进入了OnCompletionListener中的onCompletion方法

 

然后onError r(MediaPlayer mp, int what, intextra)继续返回

07-1916:54:06.092: INFO/System.out(8959): what is -38  extra 0

说明此方法行不通。

 

       尝试方法2:

       1 和第一步一样,看是否在播放中

       2 如果处于paused状态,调用reset()方法,

       3然后重新调用prepare()方法准备

       4开始seekTo();或者先start(),然后seekTo();

 

       出现的问题是:

       onError(MediaPlayer mp, int what, intextra)中返回的是

       07-19 17:10:17.749:INFO/System.out(9472): what is -38     extra  0

 

       尝试方法3:

       1 和第一步一样,看是否在播放中

       2如果处于paused状态,调用stop()方法,

       3然后重新调用prepare()方法准备

       4开始seekTo();

       这种方法是我暂时尝试到了能行得通的方法,但是有个小瑕疵,就是seekTo()后自动播放了,这时调用pause()也停不了,或者先start(),然后pause()也不行。不知道是什么原因,查看log发现当跳动时的错误

07-1920:17:20.108: ERROR/TI_LCML(11015): 507 :: Exiting Init_DSPSubSystem

07-1920:17:20.881: ERROR/ProfileVideoFrameDrops(11015): PVMediaOutputNodePort 5Frames dropped at 6

---------------------------------------------------------------------------------------------------------------------------

 

遇到问题3

       获取PopupWindow上的按钮ID 例如ImageButton playButton = (ImageButton)findViewById(R.id.play);一直出现空指针异常。

 

解决办法:

       这时候findViewById(R.id.play)是当前View的,而不是PopupWindow里的,应该修改成为

ImageButtonplayButton = (ImageButton) vPopupWindow.findViewById(R.id.play);

 

---------------------------------------------------------------------------------------------------------------------------

遇到问题4

       在实验PopupWindow时,把seekBar和开始按钮放到PopupWindow上,但是弹出PopupWindow后,点击PopupWindow外部其他控件时,PopupWindow无法消失,焦点一直在PopupWindow上.

 

解决办法:

       网上查看相关资料后。发现是因为没有给PopupWindow设置背景图片,使用下面这个方法

popup.setBackgroundDrawable(getResources().getDrawable(R.drawable.videoplayer_bg));

后问题解决。

      

---------------------------------------------------------------------------------------------------------------------------

遇到问题5

       想在视频播放中使用OnGestureListener识别用户手势,来做到不使用控制台快捷控制一些常用的例如快进倒退调声等,但是实验时无法进入android.view.GestureDetector.OnGestureListener里的public boolean onFling()函数.因此没法检测手势

解决办法:

       把默认生成的onDown方法返回值改成 return true;

       public boolean onDown(MotionEvent e)

    {

       // TODO Auto-generatedmethod stub

       return true;

    }

----------------------------------------------------------------------------------

遇到问题6

       使用更新时间线程和打开控制台一定时间后自动隐藏控制台线程时,如果处于线程延时时间内横竖屏转换时,转变后会发生错误导致崩溃.错误如下:

07-2017:13:13.780: WARN/dalvikvm(12151): threadid=1: thread exiting with uncaughtexception (group=0x400208b0)

07-2017:13:13.803: ERROR/AndroidRuntime(12151): java.lang.IllegalArgumentException:View not attached to window manager

 

解决办法

       原因估计是在横竖屏转换时Activity重载时没有注销线程里的Runnable

       隐藏控制台线程在run()方法结尾执行注

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值