您的位置:首页 > 其它

SysLetvPlayerLib无法播放本地视频

2016-07-28 15:24 363 查看
最近开发遇到一个问题,用SysLetvPlayerLib设置本地播放地址,无法播放视频。

String path="/sdcard/2.mp4";
this.mPlayControl.setVideoPath(path);


报错信息如下:

07-28 15:28:11.198 13994-13994/com.example.testsysplaylib E/AndroidRuntime: FATAL EXCEPTION: main

                                                                            java.lang.IllegalStateException

                                                                                at android.media.MediaPlayer._prepareAsync(Native Method)

                                                                                at android.media.MediaPlayer.prepareAsync(MediaPlayer.java:1134)

                                                                                at com.letv.component.player.videoview.VideoViewH264mp4.openVideo(VideoViewH264mp4.java:320)

                                                                                at com.letv.component.player.videoview.VideoViewH264mp4.access$2200(VideoViewH264mp4.java:57)

                                                                                at com.letv.component.player.videoview.VideoViewH264mp4$8.surfaceCreated(VideoViewH264mp4.java:548)

而播放http路径的视频,则可以正常播放。

1.开始怀疑是路径设置问题,但是调用new File(path).exists(),返回的是true,并且设置file:///sdcard/2.mp4也无法播放。使用外部u盘,/mnt/usb/sda1/2.mp4也无法播放。

(其实此时浪费了点儿时间,返回true之后,就说明路径设置是没有问题的)

2.怀疑是底层解码问题,但是用系统文件播放,也可以播。

3.于是写了个VideoView,发现视频也能正常播放。这时候就和1.2_componentPlayer库里自定义的类似于VideoView的类VideoViewH264mp4比较,发现openVideo()里多的代码是

if (this.mOnNeedSetPlayParamsListener != null) {

                this.mOnNeedSetPlayParamsListener.onNeedSet();// 设置起播高低水位

   }

把这个代码注释之后,发现播放正常!!!

4.总结:

这段代码是用来设置起播高低水位,加快起播速度的。最终调用是BasePlayControllerImpl的方法

mMediaPlayer.setParameter(this.PREPARE_TIME, this.PREPARETIME);

mMediaPlayer.setParameter(this.BUFFER_TIME, this.BUFFERTIME);

这个设置不知道为什么会影响本地视频的播放,而http播放则没有影响,具体的只能问播放器定义这个接口的人员了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: