ijkplayer音视频不同步解决方案

ljkplayer是一款做视频直播的框架, 网上很多视频项目都使用了这个框架。这里不再讲如何集成ijkplayer,推荐一篇详细的集成文章

一、下载ijkplayer

下载地址:https://github.com/Bilibili/ijkplayer
下载完成后解压,根据github上作者的说明下载ffmpeg,编译ffmpeg:

首先安装环境
然后下载编译ffmpeg

二、不同步的解决方案

我在使用ijkplayer的时候主要遇到了3个问题
1. 音视频不同步
在开始使用过程当中对rtmp视频流进行播放,会出现严重的视频音频不同步现象,并且随着播放的时间越长,视频与音频的差距越大。

解决方案

具体原因是CPU在处理视频帧的时候处理得太慢,默认的音视频同步方案是视频同步到音频, 导致了音频播放过快,视频跟不上。

framedorp 控制着允许丢帧的范围

可以通过修改 framedrop 的数值来解决不同步的问题,framedrop 是在视频帧处理不过来的时候丢弃一些帧达到同步的效果。具体设置:

IJKFFOptions *options = [IJKFFOptions optionsByDefault];
[options setPlayerOptionIntValue:5      forKey:@"framedrop"];

framedrop的具体大小根据实际情况而定, 我这边改成5就已经能够正常播放了。

2. 硬解码模式下, 重复推送同一部电影, 没有画面
客户端在一直接收流进行播放的状态下,在硬解码模式下,推流端的一部电影推流完成,然后继续重新推送这部电影,发现无法显示画面,只有声音

解决方案

原因是pts引起的,上一部电影推流完成时视频的pts很大,而第二次推送的时候pts重新开始计算,在ijk内部IJKVideoToolBox类里面有一个判断阻挡了视频的显示:

新帧的pts小于之前帧的pts

我们只需要在里面简单的处理以下就行了:

        if (ctx->m_sort_queue && newFrame->pic.pts < ctx->m_sort_queue->pic.pts) {
            
            if (newFrame->pic.pts < 500) {
                
                QueuePicture(ctx);
                goto successed;
            }
            else if (ctx->m_sort_queue->pic.pts > newFrame->pic.pts * 20) {
                QueuePicture(ctx);
                goto successed;
            }
            
            goto failed;
        }

里面做了两个简单的判断,一个是如果pts过于太小,视频帧仍然可以推进帧队列里。一个是如果前一个帧的大小是新的帧的几十倍,仍然可以将视频帧推进帧队列里进行处理。这样的话视频就能正常播放了。

3. 硬解码模式下, 改变推流端视频分辨率的大小, 花屏的问题
客户端在一直接收流进行播放的状态下,当我在推流端切换了视频的分辨率,或者换了一部参数不一样的电影进行推流,会出现花屏。

解决方案

这个问题在最新的版本里面作者已经进行了解决,不会在出现这个问题了,如果你是老版本的话,可以在IJKVideoToolBoxl类里面的 decode_video 函数里面将

老版本

改成

            ret = avcodec_decode_video2(new_avctx, frame, &got_picture, avpkt);
            if (ret < 0) {
                avcodec_free_context(&new_avctx);
                return ret;
            } else {
                if (context->codecpar->width  != new_avctx->width &&
                    context->codecpar->height != new_avctx->height) {
                    avcodec_parameters_from_context(context->codecpar, new_avctx);
                    context->refresh_request = true;
                }
            }

这样就能正常播放了

三、结束

在研发过程当中可能会遇见各种问题,希望和大家相互交流,共同成长。最后推荐一个开源的视频直播应用:高仿<喵播APP>。这个用各种开源库(ijkplayer, LFLiveKit, GPUImage)组成的APP再一次证明了轮子的重要性。

希望本文对大家有帮助,任何不足,望指正!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • 教程一:视频截图(Tutorial 01: Making Screencaps) 首先我们需要了解视频文件的一些基...
    90后的思维阅读 4,491评论 0 3
  • 本文转自:[FFmpeg 入门(5):视频同步 | www.samirchen.com][2] 视频如何同步 在之...
    SamirChen阅读 2,665评论 0 5
  • 现今移动直播技术上的挑战要远远难于传统设备或电脑直播,其完整的处理环节包括但不限于:音视频采集、美颜/滤镜/特效处...
    大荣纸阅读 7,989评论 5 22
  • 朋友圈里看到朋友发的一句话“有些人的存在,犹如温茶中的苍蝇,拼命挣扎的一举一动只会增添厌恶的色彩。”乍一看,没太明...
    微笑的百合花阅读 347评论 2 1
  • 第一章 沉思 “菲西,当时旭辉追你时,你为什么拒绝的那么干脆,一点余地都不留。我觉得他还不错,为什么不给他...
    枫残月阅读 288评论 0 1