目前项目中使用到VideoPlayer来播放视频,是Android平台的,目前使用VideoPlayer播放视频时遇到两个问题,第一个问题是:进入播放界面时,不会自动播放,一定要点一下返回键才能播放;第二个问题是:在播放视频时,如果点击Home键返回主界面,等一会再切回前台,视频不会接着播放,而是一片黑屏。目前就存在这两个问题,本人现在还没找到解决方法,希望各位朋友有见解的,教下小弟呗,谢谢了。
看一下你的代码啊
第一个问题是初始videoPlayer界面大小的长宽都是0,也就是说相当于没有初始化,在UIVideoPlayer-android.cpp中找个地方执行下setVideoRectJNI这个函数,我放到setFileName里面了。看下图
大哥,没有看到你发的图啊,能不能再发一次?
这个问题要改源码:
frameworks\cocos2d-x\cocos\ui路径下的UIVideoPlayer-android.cpp
void VideoPlayer::setFileName(const std::string& fileName)
{
_videoURL = fileName;
_videoSource = VideoPlayer::Source::FILENAME;
log(“setFileName”);
auto directorInstance = Director::getInstance();
auto glView = directorInstance->getOpenGLView();
auto frameSize = glView->getFrameSize();
auto winSize = directorInstance->getWinSize();
auto leftBottom = convertToWorldSpace(Point::ZERO);
auto rightTop = convertToWorldSpace(Point(_contentSize.width,_contentSize.height));
auto uiLeft = frameSize.width / 2 + (leftBottom.x - winSize.width / 2 ) * glView->getScaleX();
auto uiTop = frameSize.height /2 - (rightTop.y - winSize.height / 2) * glView->getScaleY();
setVideoRectJNI(_videoPlayerIndex,uiLeft,uiTop,
(rightTop.x - leftBottom.x) * glView->getScaleX(),
(rightTop.y - leftBottom.y) * glView->getScaleY());
setVideoURLJNI(_videoPlayerIndex, (int)Source::FILENAME,_videoURL);
}
void VideoPlayer::setURL(const std::string& videoUrl)
{
_videoURL = videoUrl;
_videoSource = VideoPlayer::Source::URL;
auto directorInstance = Director::getInstance();
auto glView = directorInstance->getOpenGLView();
auto frameSize = glView->getFrameSize();
auto winSize = directorInstance->getWinSize();
auto leftBottom = convertToWorldSpace(Point::ZERO);
auto rightTop = convertToWorldSpace(Point(_contentSize.width,_contentSize.height));
auto uiLeft = frameSize.width / 2 + (leftBottom.x - winSize.width / 2 ) * glView->getScaleX();
auto uiTop = frameSize.height /2 - (rightTop.y - winSize.height / 2) * glView->getScaleY();
setVideoRectJNI(_videoPlayerIndex,uiLeft,uiTop,
(rightTop.x - leftBottom.x) * glView->getScaleX(),
(rightTop.y - leftBottom.y) * glView->getScaleY());
setVideoURLJNI(_videoPlayerIndex,(int)Source::URL,_videoURL);
}
然后在org\cocos2dx\lib下的Cocos2dxVideoHelper.java源码里边手工调用onBackKeyEvent();方法即可
private void _startVideo(int index) {
Cocos2dxVideoView videoView = sVideoViews.get(index);
if (videoView != null) {
videoView.start();
onBackKeyEvent();//手工调用
}
}
另外视频播放时,按键会暂停播放,需把
Cocos2dxVideoView.java中的onTouchEvent方法内容注释掉
哦哦,多谢了,刚看到你的回答。
mark…
这个必须顶 差点去踩坑。。。
在视频界面,android物理键返回后,再次进入提示无法播放视频,貌似是底层mediaplayer服务关闭又启动了,有人遇到这类问题吗???