linphone开发中的一个问题记录

原创 2012年03月23日 17:36:08
    最近在做voip相关的项目,上位机直接使用linphone进行二次开发,下位机下位机使用的是利用osip、ffmpeg开发的sip客户端。测试时ffmpeg解码时打印出如下警告信息:
    Too many slices (17 >= 16), increase MAX_SLICES and recompil
    Too many slices (18 >= 16), increase MAX_SLICES and recompil
    Too many slices (20 >= 16), increase MAX_SLICES and recompil
    ...
    相关代码在h264.c中
    ...
    h0->last_slice_type = slice_type;
    h->slice_num = ++h0->current_slice;
    if(h->slice_num >= MAX_SLICES){
        av_log(s->avctx, AV_LOG_ERROR, "Too many slices (%d >= %d), increase MAX_SLICES and recompile\n", h->slice_num, MAX_SLICES);
    }
    ...

    显然slice数超过了定义的最大值,MAX_SLICES定义
/**
 * The maximum number of slices supported by the decoder.
 * must be a power of 2
 */
#define MAX_SLICES 16

    尝试增加到32时,下位机解码出错了,没找到原因,所以从上位机入手。在x264的编码参数x264_param_t中有slice相关的几个成员

    /* Slicing parameters */
    int i_slice_max_size;    /* Max size per slice in bytes; includes estimated NAL overhead. */
    int i_slice_max_mbs;     /* Max number of MBs per slice; overrides i_slice_count. */
    int i_slice_count;       /* Number of slices per frame: forces rectangular slices. */

    这个i_slice_count就指定了分片数量,于是到msx264.c文件的enc_preprocess函数中,将编码参数中的i_slice_count设置为15。但是测试发现,这根本没用。后来在x264源码中,找到了问题所在
    //x264/encoder.c 函数x264_validate_parameters
    ...  
        if( h->param.i_slice_max_mbs || h->param.i_slice_max_size )
            h->param.i_slice_count = 0;
    ...

    从上面的代码片断中可以看到,只要i_slice_max_mbs和i_slice_max_size两个值,i_slice_count就会被清0。而msx264.c的enc_preprocess函数就有下面一条语句
    
params.i_slice_max_size=ms_get_payload_max_size()-100; /*-100 security margin*/  
 
    现在真相大白,直接注释掉上面的语句,测试通过。    









版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

x264源代码简单分析:x264_slice_write()

本文简单分析x264的x264_slice_write()的源代码。x264_slice_write()是x264项目的核心,它完成了编码了一个Slice的工作。根据功能的不同,该函数可以分为滤波(F...

x264参数介绍(一、帧类型和码率控制)

【 翻译 】x264参数介绍(一、帧类型和码率控制) 2010年10月2日 评论 发表评论 翻译自:http://mewiki.project357.com/wiki/X264_Se...

x264_param_default分析

x264_param_default分析(ZZ)   void    x264_param_default( x264_param_t *param ) {     /* 开辟内存空...

linphone快速挂断后的程序崩溃问题

第一种情况: 第一步:主叫拨通电话后快速挂断,此时尚未收到服务器对 INVITE 的临时响应消息,因此主叫在调用 eXosip_call_terminate 函数时并不发送 cancel 消息,则通...

Linphone android 最新版编译(解决android5.0以上无法运行问题)

Linphone android 编译,解决android5.0版本无法运行问题。

linphone-解决3.2.5版本在Android5.0以前的系统没有H264编码的问题

我下载当时最新版linphone,tag版本是3.2.5。不知道从哪个版本开始,linphone改了整体的编译方式。重新用python进行编译的方式和部分文件的生成。 这都不是问题,但是,在andr...

linphone编译总结,有问题请大家在评论中提出

1. 准备Linux VM    2.1 安装Oracle Virtual Box,    2.2 安装ubuntu 2. 获取源码    下载地址: http://www.l...

linphone编译过程问题及其解决方法

1:./configure配置                       &...

交叉编译linphone全记录(ARM)

Ubuntu14.04交叉编译linphone

linphone-android for mac编译过程记录

本文记录linphone-andoroid在mac上的编译过程,在这里做下记录,希望对大家有所帮助,如有疑问发评论即可:环境搭建: 代码下载:git clone git://git.linphone....
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)