Cocos Creator 使用ijkplayer+sprite渲染视频

前言: cocos使用系统原生的videoplayer来播放视频,导致层级不灵活 只能在最上层或者最下层,为了更灵活的使用视频(或者直播),想出此解决方案。

大致流程为

1: 使用ijkplayer 来解码视频,但是拦截其渲染部分,使其可以输出视频数据。

2:使用其数据(需要把yuv转成rgba),每次解码出新的数据 更新其对应的texture。

3:把ijkplayer封装在c++引擎里方便使用(jsb必不可少)。

大致流程图:

为什么使用ijkplayer?因为懒,不想封装ffmpeg ,不想自己写音视频同步,不想自己写视频控制模块,不想自己写…

总结:图画的丑,文字描述的不清晰。

上班时间为何写帖子???因为我在编译安卓平台的ijkplayer(等的难受)。

国际惯例:上海某幼教公司大量招cocos开发,待遇从优 压力小 团队稳定。早中晚饭全包(不加班)有意者简历发我邮箱 819293923@qq.com

14赞

491034546@qq.com,已经发你邮箱了,如果不符合要求能麻烦回复一个邮件吗?,告知我需要在什么方面努力。

好的,感谢信任

竟然不加班,好大的诱惑

别犹豫,投简历就完了

mark mark mark

目前正研究这个方案
不过texture怎么注册到c++层呢
就是图片右半面的逻辑 大佬是否能共享下这部分代码?

通过jsb注册,没有太理解你困惑的点在哪


现在传参报错 js里应该怎么传呢

c++中的实现

我觉得你这个思路就非常好

关注一下!

感谢鼓励!

getTexTure()获取到的是js层面的 cc.texture ,你是想把c++层面的和player绑定对吧

我换了个思路 解决了
把ffmpeg读取到的帧数据 uint8_t* 返回到了js层
然后在js层去做了渲染

引擎本身的jsb不支持 uint8_t*类型 这块需要自己处理一下

不错不错,谢谢分享,学到了!

生产者和消费者都是c++,每一秒调用25次jsb是否有必要(性能方面有测试过吗)?直接把解码出来的数据塞到c++的texture不是更好吗?

对 是这个意思

嗯 我也是这么思考的 但是实现的时候有点卡住了
最近没啥时间 有哪个小伙按这个思路调通了 希望可以分享下代码

在js端创建一个texture 然后通过jsb 注册 让他可以监听事件 c++texture代码如下

void Texture2D::registerEventListener(const std::string& eventName)
{
_customEventName = eventName;
_listenerID =EventDispatcher::addCustomEventListener(eventName, [&](const CustomEvent &evt){
//添加收到该事件的相关处理
updateWithNotification(evt);
});
}

void Texture2D::updateWithNotification(const CustomEvent &event)
{

}

生产者通过广播的方式 把数据给到消费者。

感谢大佬分享