修改FFMpeg源码—捕获丢包

来源:互联网 发布:琅琊榜骑兵进阶数据 编辑:程序博客网 时间:2024/05/18 17:25

http://www.cnblogs.com/highway-9/p/5595101.html

概述

最近我们项目有一个需求就是解决客户端播放RTSP视频流花屏的问题,一般来说丢包就会引起花屏,导致客户端花屏的因素又有很多,比如说:

  • 相机到服务器丢包
  • 服务器到客户端丢包
  • 等等。。。

其中服务器到客户端的丢包问题我们已经解决了,那么相机到服务器的丢包问题怎么解决呢?这个问题解决不了的,可以解决的问题就是即使相机到服务器丢包后,也让客户端知道,然后不解码丢包的那一帧数据直到下一个关键帧的到来,这样客户端播放视频就不会
花屏了,但是这样做就会让视频播放卡顿一下(以50帧一个关键帧来算的话会卡顿2秒),但是卡顿总比花屏强吧,因为花屏后我们的AI服务器就采集不到人脸了,但是FFMpeg并没有对外提供接口标志该AVPacket不完整,内部也不会将AVPacket丢弃,这样服务端调用av_read_frame读取的AVPacket时并不知道该包是否完整,一小段调用例子如下:

    while (1) {        AVPacket pkt;        // 不知道pkt是否完整        ret = av_read_frame(f->ctx, &pkt);        if (ret == AVERROR(EAGAIN)) {            av_usleep(10000);            continue;        }        if (ret < 0) {            av_thread_message_queue_set_err_recv(f->in_thread_queue, ret);            break;        }    }

FFMpeg不提供接口,那么就只有修改FFMpeg源码,浏览FFMpeg源码一天后,对外的接口只需要在AVPacket结构体里面增加一个判断包完整性的标志变量,修改源码后的接口调用如下:

    while (1) {        AVPacket pkt;        ret = av_read_frame(f->ctx, &pkt);        if (pkt.nLostPackets) {            // Do something.        } else {            // Do something        }    }

下面将介绍修改FFMpeg源码的细节。

修改FFMpeg源码(ffmpeg2.8.6)

一、avformat.h里面增加int av_read_frame_aozhen(AVFormatContext s, AVPacket pkt)函数:

并且在对应实现文件utils.c里面对其实现:

二、avcodec.h里面的AVPacket结构体增加成员变量int nIsLostPackets:

并且在avpacket.c里面的av_init_packets函数里面对其初始化:

三、utils.c里面read_frame_internal函数增加临时变量int nIsLostPackets = 0,read_frame_internal函数调用ff_read_packet的后一句增加nIsLostPackets = cur_pkt.nIsLostPackets:

并且在函数末尾将nIsLostPackets赋值给pkt->nIsLostPackets:

四、在rtpdec.c的rtp_parse_queued_packet函数里面增加丢包判断的代码:

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机丢失了微信怎么办 眼睛疼红血丝多怎么办 lol更新速度3kb怎么办 苹果6s玩游戏卡怎么办 微博手机号换了怎么办 微博字数超了怎么办 海外玩传奇很卡怎么办 再审期限超6个月怎么办 肠粉蒸出来太粘怎么办 微信订阅号没了怎么办 映美620k不进纸怎么办 属虎的带了貔貅怎么办 属龙的不能带金怎么办 这段时间运气不好怎么办 两年运气特别差怎么办 玩手机麻将老输怎么办 打四川麻将老输怎么办 网上打麻将老输怎么办 手机打麻将老输怎么办 近来打麻将老输怎么办 最近手气不好老输钱怎么办 头被风吹了头痛怎么办 打麻将老输怎么办转运 外出时家里的花怎么办 放假了家里的花怎么办 老是怀疑老婆有外遇怎么办 老婆出轨我该怎么办呢 老公爱爱时间短怎么办 老婆离家出走了怎么办离婚呢 4g网络变成h了怎么办 打麻药伤到神经怎么办 40多岁乳房下垂怎么办 手冻了怎么办 小妙招 脸过敏好了还红怎么办 脸过过敏红肿痒怎么办 腰间盘突出压迫神经腿麻怎么办 腰椎盘突出脚麻怎么办 水泡破了化脓了怎么办 泰迪口臭很严重怎么办 狗狗的嘴巴好臭怎么办 2岁宝宝有口臭怎么办