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*/  
 
    现在真相大白,直接注释掉上面的语句,测试通过。    









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

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

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Linphone SDK开源库的学习和使用(三)

这个先主要写一下工作总结吧,其实今天实现的东西不多,昨天的问题也还没有解决,不知道为什么赋值语句会被循环调用。。。。。明天继续解决!!! 今天主要做的是历史记录部分,linphone-iPhone...

Linphone 的编译

最近负责一个可视电话项目,公司资源有限,整个项目软件只有我一个人,暴汗!花了两个星期去编译Linhone,终于分别在电脑主机和开发板上(Freescale i.mx27)成功编译出来。期间发现问题还真...

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

转载自:http://blog.csdn.net/firstime_tzjz/article/details/7838443   第一种情况: 第一步:主叫拨通电话后快速挂断,此时尚未收到服...

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

1、./configure配置问题                     (1)  No package 'gtk+-2.0' found                        ...
  • haivue
  • haivue
  • 2013年05月17日 19:24
  • 1696

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

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

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

转自http://blog.csdn.net/firstime_tzjz/article/details/7838443 第一种情况: 第一步:主叫拨通电话后快速挂断,此时尚未收到服务器对...

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

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

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

我下载当时最新版linphone,tag版本是3.2.5。不知道从哪个版本开始,linphone改了整体的编译方式。重新用python进行编译的方式和部分文件的生成。 这都不是问题,但是,在andr...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linphone开发中的一个问题记录
举报原因:
原因补充:

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