doubango播放不均匀的问题及改进办法

简介: doubango播放不均匀的问题及改进办法

使用doubango做视频的朋友,如果观察过播放,就会发现忽快忽慢。


 这个问题亦引起吾之重视。头目甲提拔的总监不解决(服务器、终端一句代码也没改),那么只能吾解决了。


 首先,播放器是没有问题的。


 其次,网络问题不予考虑。因为有问题咱也没办法。可以做帧缓冲。


 那么,唯一能改进的,就是接收包之后,派发的代码。



 吾跟踪了派发流程,最后发现问题是出在tdav_video_jb.c。


 吾又研究了派发代码,然后就感觉自己智商低,没看明白怎么回事。怎么办?最后干脆全部删除,按照自己的思路写。问题果然解决了。新代码如下:

/**
新的处理逻辑:
缓冲区中帧数太少,等待指定时间。
当前一帧数据不完整,等待指定时间和次数。
缓冲区中帧数太多,或超过等待条件式,不论当前帧是否完整,立即处理。
考虑到收到帧的时间间隔并不均匀,所以这里也不进行间隔控制。
判断有效帧数?可以考虑。
按理说,latency_min、latency_max应该根据帧率实时调整。
注意帧率不是自己这边控制的,只能计算。
*/
static void* TSK_STDCALL _tdav_video_jb_decode_thread_func(void *arg)
{
    tdav_video_jb_t* jb = (tdav_video_jb_t*)arg;
    tdav_session_av_t* session = (tdav_session_av_t*)jb->cb_data_any.usr_data;
  //tdav_session_video_t* video = (tdav_session_video_t*)session;
    tdav_video_frame_t* frame;
    uint64_t next_decode_duration = 0, now;
  tsk_list_item_t *item;
    jb->decode_last_seq_num = -1;
    jb->decode_last_seq_num_with_mark = -1; // -1 -> unset
    jb->decode_last_time = tsk_time_now();
  //这是何意?
    (void)(now);
    TSK_DEBUG_INFO("Video jitter buffer thread - ENTER");
    while(jb->started) {
        now = tsk_time_now();
        if (next_decode_duration > 0) {
            tsk_condwait_timedwait(jb->decode_thread_cond, next_decode_duration);
            next_decode_duration = 0;
        }
    if(!jb->started) {
            break;
        }
        //是否考虑判断有效帧数?
        if (jb->frames_count < jb->latency_min)
        {
            next_decode_duration = WAIT_FRAME_DATA_DELAY;
            continue;
        }
        tsk_safeobj_lock(jb); // against get_frame()
        tsk_list_lock(jb->frames); // against put()
    /**
    如果当前流出错,应该迅速处理。或根据上一秒的丢包情况调整缓冲区。
    目前测试发现,必须有jb->latency_max>=MAX。否则必然崩溃。
    为了避免出错,一切照旧。实际上以现在网络之发达情况,多等亦无用。
    */
       //暂时不便公开。
        //对应create,是真正要释放了。
        TSK_OBJECT_SAFE_FREE(item);
    }   //while(jb->started)
    TSK_DEBUG_INFO("Video jitter buffer thread - EXIT");
    return tsk_null;
}


目录
相关文章
|
2月前
|
Web App开发 缓存 前端开发
拿下奇怪的前端报错(六):多摄手机webrtc拉取视频流会导致应用崩溃,从而无法进行人像扫描
本文介绍了一种解决手机摄像头切换导致应用崩溃的问题的方法。针对不支持facingMode配置的四摄手机,通过缓存和序号切换的方式,确保应用在特定设备上不会频繁崩溃,提升用户体验。
|
5月前
联网加载图片,一个很原始,很古老的办法
联网加载图片,一个很原始,很古老的办法
28 0
|
7月前
|
存储 编解码 API
【视频花屏问题】解码天书:深入理解视频流花屏现象及其解决方案
【视频花屏问题】解码天书:深入理解视频流花屏现象及其解决方案
1388 7
doubango播放不均匀的问题及改进办法
doubango播放不均匀的问题及改进办法
99 0
|
编解码
doubango的帧率太低,怎么解决?
doubango的帧率太低,怎么解决?
85 0
播放视频时有残影、水纹的原因
播放视频时有残影、水纹的原因
180 0
|
计算机视觉 开发者
程序人生 - 游戏帧数很高,为什么还是会卡顿?(二)
程序人生 - 游戏帧数很高,为什么还是会卡顿?(二)
306 0
程序人生 - 游戏帧数很高,为什么还是会卡顿?(二)
程序人生 - 游戏帧数很高,为什么还是会卡顿?(一)
程序人生 - 游戏帧数很高,为什么还是会卡顿?(一)
285 0
程序人生 - 游戏帧数很高,为什么还是会卡顿?(一)
|
编解码 人工智能 安全
去 “马赛克” 工具横空出世, 一秒还原!
如果你认为将密码或其他私密文本数据像素化就能保护它们不被窥见,那你真是太天真了,你的信息并没有你想象的那么安全。像素化(也称为马赛克)是一种常用的手段,可以大幅降低图像敏感区域的分辨率来隐藏信息。
359 0
去 “马赛克” 工具横空出世, 一秒还原!
|
编解码
遇到个别手机前置摄像头相差90度的怪事
今天有人提供了一个手机,说怎么视频角度总是不对。吾以为应用版本没有更新。安装之后一试,还是错误,总是跟别的手机相差90度。
158 0