cocos2d-x 3.0 播放MP4视频

Posted ljbguanli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cocos2d-x 3.0 播放MP4视频相关的知识,希望对你有一定的参考价值。

猴子原创,欢迎转载。

转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢。

原文地址: http://www.cocos2dev.com/?p=545

非常久曾经写的一个2dx播放MP4视频的教材。有网友反映已经不能用了,今天晚上写了个简单的2dx播放视频类。使用的是cocos2dx 3.0。

技术分享

类说明:
LHVideoPlayerImplCpp.h/mm // cocos2dx中使用的播放MP4接口
LHVideoPlayerImpl.h/m // videoPlayer的oc接口
LHVideoPlayer.h/m // videoPlayer的实现。调用MPMoviePlayerController播放MP4
LHVideoOverlayView.h/m // videoPlayer的上层操作层,有跳过影片button。

我就功能点而言,介绍当中的两个类。

第一个是LHVideoPlayerImplCpp.h/mm文件。这个是负责给2dx调用的。

该类有两个静态方法:

class LHVideoPlayerImplCpp {
public:
    /**
     * 開始播放MP4视频
     * name 视频名称。不要带后缀".mp4"。

(比方文件是test.mp4, 那么name就传"test") * frameRect 视频显示的区域。全屏(Rect(0, 0, visibleSize.width, visibleSize.height)) */ static void playMP4WithName(const char* name, cocos2d::Rect frameRect); /** * 设置跳过影片buttontitle,默认无跳过影片功能 */ static void setSkipTitle(const char* title); };


第二个是LHVideoPlayer.h/m,这个是负责播放MP4。
1、这种方法是播放MP4。凝视非常清楚。

- (void)playMP4WithName: (NSString *)name VideoFrame:(CGRect)rect
{
    UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
    
    // 获取视频文件的名称
    NSString *url = [[NSBundle mainBundle]pathForResource:name ofType:@"mp4"];
    // 初始化player
    _player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:url]];
    [keyWindow.rootViewController.view addSubview: [_player view]];
    
    // 设置player样式
    [_player setControlStyle: MPMovieControlStyleNone];
    [[_player view] setFrame: rect];
    
    // 当MP4完毕播放的回调
    [[NSNotificationCenter defaultCenter]
     addObserver:self selector:@selector(movieFinishedCallback:)
     name:MPMoviePlayerPlaybackDidFinishNotification object:_player];
    
    // 開始播放影片
    [_player play];
    
    // 上层操作层
    _videoOverlayView = [ [LHVideoOverlayView alloc] initWithFrame: rect];
    [keyWindow.rootViewController.view addSubview: _videoOverlayView];
}

2、这种方法是播放结束之后,移除播放view。

- (void)removePlayer:(MPMoviePlayerController*)player
{
    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:player];
    
    [player.view removeFromSuperview];
    [_player release];
    _player = nil;
    
    [_videoOverlayView removeFromSuperview];
    [_videoOverlayView release];
    _videoOverlayView = nil;
}

3、播放完毕,通知外界。

playerPlayFinished 这种方法是空的,没有通知外界。

我看了下,感觉没什么须要。所以没加。

用法:

1、导入头文件
#include “LHVideoPlayerImplCpp.h”

2、開始调用接口,如果你要播放的是“loading.mp4”
Size visibleSize = Director::getInstance()->getVisibleSize();
LHVideoPlayerImplCpp::playMP4WithName(“loading”, Rect(0, 0, visibleSize.width, visibleSize.height));
LHVideoPlayerImplCpp::setSkipTitle(“Skip”);

3、影片结束之后,会自己主动移除视图。

git地址:https://github.com/sunny-liu/Code/tree/master/cocos2dx_3.0_mp4


















以上是关于cocos2d-x 3.0 播放MP4视频的主要内容,如果未能解决你的问题,请参考以下文章

html5 video 添加MP4文件损坏?

如何在不下载整个片段的情况下使用媒体源缓冲区和分段 mp4 在特定时间启动视频?

MP4视频播放器代码

jQuery MP4视频在线播放代码

哪些字节的视频数据指的是当前播放位置

如何在 google colab 中播放 mp4 视频