编码器的参数设置_av_codec_flag_global_header-程序员宅基地

技术标签: 音视频  ffmpeg  

//编码器参数设置
//sps/pps
enc_ctx->profile = FF_PROFILE_H264_HIGH_444;
enc_ctx->level = 50; //表示LEVEL是5.0
enc_ctx->width = 640;
enc_ctx->height = 480;
enc_ctx->pix_fmt = AV_PIX_FMT_YUV420P;
enc_ctx->gop_size = 250;
enc_ctx->bit_rate = 600000;//600kbps
enc_ctx->time_base = (AVRational){
    1, 25};
enc_ctx->framerate = (AVRational){
    25, 1};//帧率
if(octx->oformat->flags & AVFMT_GLOBALHEADER)
{
    
	printf("set video GLOBAL_HEADER\n");
	enc_ctx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
}//这octx是输出上下文,有些封装格式希望pps,sps和关键帧分离。设置AV_CODEC_FLAG_GLOBAL_HEADER
代表不会在每个关键帧前加入pps和sps了。会将pps和sps写入到extradata字节当中,当播放端解码器解码时,
从extradata中读取pps和sps然后加入到每个关键帧中。不同的封装格式要求不同,这个if代码块检测你设置的封装格式如"flv"是否需要设置分离。 
//解释一下pps和sps,它们对解码至关重要,如果找不到他们,那么解码就会
失败,因为它们存储的是编码器设置的参数,比如视频的heigth,width等,音频的采样率,通道数等。详见另一篇文章:[h264中的pps和sps](https://blog.csdn.net/weixin_43466192/article/details/121465618)

enc_ctx->keyint_min = 25;//option 由于gop过大,当运动变化过大时,允许自动多插入一个i帧,但两个i帧相差不能小于25帧;
enc_ctx->max_b_frames = 3;//option连续的B帧的数量,一般设置不超过三帧,这里设置三帧
enc_ctx->has_b_frames = 1;//option启动B帧
enc_ctx->refs = 3;//option参考帧的数量,解码器的缓冲区中可以存放的参考帧的数量。
option的选项如果不设置的话会使用默认值,会根据其他设置的值自动设置,这两个也是option选项。

两个预设值preset,tune
因为x264参数众多,且各个参数配合紧密,x264编码器专门提供了预设值,预设值的设置相当于模式的选择,设定一个预设值,代表着使用这个模式,那么这么模式会有默认的很多参数设置。后面再手动设置的参数会覆盖模式里对应的参数。因此这两个值要在其他值之前设置,除此之外tune要在preset后。
preset的值从高到低有:

ultrafast、superfast、veryfast、faster、fast、medium(默认值)、slow、slower、veryslow、placebo

越快的编码速度,表明越低的压缩效率,码率也就越大。
注意:编码很考验cpu性能,提升编码速度能直接减少对cpu的消耗,同时还能显著减少延迟,但会牺牲画面质量。
tune的值有:

animation: 动画
grain: 需要保留大量的grain时用;
stillimage: 静态图像编码时使用;
psnr:为提高psnr做了优化的参数;
ssim: 为提高ssim做了优化的参数; fastdecode: 可以快速解码的参数;
zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。能明显减少延时,但牺牲画面质量。

turne主要是关注画质和视觉感受,如果视频有对应的选项和需求可以使用,否则建议不使用如tune grain是为高比特率的编码而设计的。这两个预设值在x264中的源码在文末尾有贴上。

可以通过x264 --fullhelp查看preset,profile,tune这些预设分别启用了不同的编码工具,启用不同的编码工具,会改变编码效率,因此如果目标码率设置足够的值,则不会降低画质。
补充:
编码器帧相关参数 :
no-deblock/deblock //去块化 解码后播放发现块比较多,像马赛克,是因为宏块预测,可以设置deblock用滤波器进行平滑处理。(no-deblock不适用滤波器)
no-cabac/cabac //不使用/使用熵编码 使用熵编码后压缩比比较高。
流控:
Qp关注量化器,与bitrate/crf互斥
bitrate,关注码流,间接控制质量
crf,关注质量,默认是23,数值越低质量越好
Partitions p8x8,b8x8,i8x8,i4x4 //i,b,p帧的宏块大小

下面这个网站会有更详细的介绍以上参数,并给出x264未设置options参数时,默认是多少。

http://www.chaneru.com/Roku/HLS/X264_Settings.htm

x264的各个参数

下面这个网站会介绍这些参数在ffmpeg命令行中对应的名字是什么。

https://sites.google.com/site/linuxencoding/x264-ffmpeg-mapping

profile设置参考
level设置参考,可以向下兼容

哎呦喂ヾ(✿゚▽゚)ノ~路长馆小,雪轻帘薄,酒热乎,这位爷~您ヾ(✿゚▽゚)ノ~ 里面坐~
本公众号专注分享C++,ffmpeg,opencv等相关音视频知识
webrtc,udp,tcp,rtsp,rtmp,srt/nginx+rtmp等流媒体协议和服务器
同时也会有大厂音视频技术专家不定期直播分享…
国人开发流媒体srs服务器,及yangrtc(国人版的webrtc)协议新动向
偶尔分享下程序员梦呓碎碎念(๑•॒̀ ູ॒•́๑)啦啦啦
目前刚刚开通,接受读者的优质投稿…
鉴于国内音视频圈子小,起步晚,以致分享少,门槛高,特开通分享,一起扇动这阵风吧!
微信扫描下方二维码,关注公众号,赶快进入音视频开发者社区吧!

附录:
x264源码中base.c文件中

static int x264_param_apply_preset( x264_param_t *param, const char *preset )
{
    
    char *end;
    int i = strtol( preset, &end, 10 );
    if( *end == 0 && i >= 0 && i < sizeof(x264_preset_names)/sizeof(*x264_preset_names)-1 )
        preset = x264_preset_names[i];
 
    /*
     * 下面的这些参数设置会对编码质量和编码速度造成极大影响,因此,优化时首先考虑优化下面的参数
     */
 
    /* 极快(最快)
     */
    if( !strcasecmp( preset, "ultrafast" ) )
    {
    
        /* 参考帧数量设置为1
         */
        param->i_frame_reference = 1;
        /* 场景切换设置阈值
         */
        param->i_scenecut_threshold = 0;
        /* 不进行去方块滤波
         */
        param->b_deblocking_filter = 0;
        /* 不使用cabac
         */
        param->b_cabac = 0;
        /* 没有B帧
         */
        param->i_bframe = 0;
        /* 设置intra划分的partition,这里应该是不进行划分,只使用16x16
         */
        param->analyse.intra = 0;
        /* 设置inter划分的partition,这里应该是不进行划分,只使用16x16
         */
        param->analyse.inter = 0;
        /* 不使用8x8的的DCT变换
         */
        param->analyse.b_transform_8x8 = 0;
        /* 运动估计:DIA
         */
        param->analyse.i_me_method = X264_ME_DIA;
        /* 亚像素运动估计精度:0,表示只进行整像素运动估计
         */
        param->analyse.i_subpel_refine = 0;
        /* 关闭自适应量化
         */
        param->rc.i_aq_mode = 0;
        /* 禁止每个宏块的分区拥有自己的参考编号
         */
        param->analyse.b_mixed_references = 0;
        /* 不使用trellis优化
         */
        param->analyse.i_trellis = 0;
        /* 自适应B帧判断的概率(从-100到100)
         */
        param->i_bframe_adaptive = X264_B_ADAPT_NONE;
        /* 不使用mbtree
         */
        param->rc.b_mb_tree = 0;
        /* 权重预测中,P帧的权值
         */
        param->analyse.i_weighted_pred = X264_WEIGHTP_NONE;
        /* 显式的B帧权重预测
         */
        param->analyse.b_weighted_bipred = 0;
        /* mbtree前向预测的帧的数量
         */
        param->rc.i_lookahead = 0;
    }
    /* 超级快
     */
    else if( !strcasecmp( preset, "superfast" ) )
    {
    
        /* inter划分:4x4和8x8
         */
        param->analyse.inter = X264_ANALYSE_I8x8|X264_ANALYSE_I4x4;
        /* 运动估计:DIA
         */
        param->analyse.i_me_method = X264_ME_DIA;
        /* 亚像素运动估计精度
         */
        param->analyse.i_subpel_refine = 1;
        /* 参考帧数量:1
         */
        param->i_frame_reference = 1;
        /* 不允许每个宏块的分区有自己的参考编号
         */
        param->analyse.b_mixed_references = 0;
        /* 关闭trellis优化
         */
        param->analyse.i_trellis = 0;
        /* 关闭mbtree
         */
        param->rc.b_mb_tree = 0;
        /* P帧的权值
         */
        param->analyse.i_weighted_pred = X264_WEIGHTP_SIMPLE;
        /* mbtree向前预测的帧数:0
         */
        param->rc.i_lookahead = 0;
    }
    /* 非常快
     */
    else if( !strcasecmp( preset, "veryfast" ) )
    {
    
        /* 亚像素运动估计精度
         */
        param->analyse.i_subpel_refine = 2;
        /* 参考帧数量:1
         */
        param->i_frame_reference = 1;
        /* 不允许每个宏块的分区有自己的参考编号
         */
        param->analyse.b_mixed_references = 0;
        /* 关闭trellis优化
         */
        param->analyse.i_trellis = 0;
        /* P帧的权值
         */
        param->analyse.i_weighted_pred = X264_WEIGHTP_SIMPLE;
        /* mbtree向前预测的帧数:10
         */
        param->rc.i_lookahead = 10;
    }
    /* 很快
     */
    else if( !strcasecmp( preset, "faster" ) )
    {
    
        /* 不允许每个宏块的分区有自己的参考编号
         */
        param->analyse.b_mixed_references = 0;
        /* 参考帧数量:2
         */
        param->i_frame_reference = 2;
        /* 亚像素运动估计精度
         */
        param->analyse.i_subpel_refine = 4;
        /* P帧的权值
         */
        param->analyse.i_weighted_pred = X264_WEIGHTP_SIMPLE;
        /* mbtree向前预测的帧数:20
         */
        param->rc.i_lookahead = 20;
    }
    /* 快
     */
    else if( !strcasecmp( preset, "fast" ) )
    {
    
        /* 参考帧数量:2
         */
        param->i_frame_reference = 2;
        /* 亚像素运动估计精度
         */
        param->analyse.i_subpel_refine = 6;
        /* P帧的权值
         */
        param->analyse.i_weighted_pred = X264_WEIGHTP_SIMPLE;
        /* mbtree向前预测的帧数:30
         */
        param->rc.i_lookahead = 30;
    }
    /* 正常:在速度与质量之间平衡
     */
    else if( !strcasecmp( preset, "medium" ) )
    {
    
        // 使用默认的参数
        /* Default is medium */
    }
    /* 慢
     */
    else if( !strcasecmp( preset, "slow" ) )
    {
    
        param->analyse.i_subpel_refine = 8;
        param->i_frame_reference = 5;
        param->analyse.i_direct_mv_pred = X264_DIRECT_PRED_AUTO;
        param->analyse.i_trellis = 2;
        param->rc.i_lookahead = 50;
    }
    /* 很慢
     */
    else if( !strcasecmp( preset, "slower" ) )
    {
    
        param->analyse.i_me_method = X264_ME_UMH;
        param->analyse.i_subpel_refine = 9;
        param->i_frame_reference = 8;
        param->i_bframe_adaptive = X264_B_ADAPT_TRELLIS;
        param->analyse.i_direct_mv_pred = X264_DIRECT_PRED_AUTO;
        param->analyse.inter |= X264_ANALYSE_PSUB8x8;
        param->analyse.i_trellis = 2;
        param->rc.i_lookahead = 60;
    }
    /* 非常慢
     */
    else if( !strcasecmp( preset, "veryslow" ) )
    {
    
        param->analyse.i_me_method = X264_ME_UMH;
        param->analyse.i_subpel_refine = 10;
        param->analyse.i_me_range = 24;
        param->i_frame_reference = 16;
        param->i_bframe_adaptive = X264_B_ADAPT_TRELLIS;
        param->analyse.i_direct_mv_pred = X264_DIRECT_PRED_AUTO;
        param->analyse.inter |= X264_ANALYSE_PSUB8x8;
        param->analyse.i_trellis = 2;
        param->i_bframe = 8;
        param->rc.i_lookahead = 60;
    }
    /* 极慢
     */
    else if( !strcasecmp( preset, "placebo" ) )
    {
    
        param->analyse.i_me_method = X264_ME_TESA;
        param->analyse.i_subpel_refine = 11;
        param->analyse.i_me_range = 24;
        param->i_frame_reference = 16;
        param->i_bframe_adaptive = X264_B_ADAPT_TRELLIS;
        param->analyse.i_direct_mv_pred = X264_DIRECT_PRED_AUTO;
        param->analyse.inter |= X264_ANALYSE_PSUB8x8;
        param->analyse.b_fast_pskip = 0;
        param->analyse.i_trellis = 2;
        param->i_bframe = 16;
        param->rc.i_lookahead = 60;
    }
    else
    {
    
        x264_log( NULL, X264_LOG_ERROR, "invalid preset '%s'\n", preset );
        return -1;
    }
    return 0;
}

static int x264_param_apply_preset( x264_param_t *param, const char *preset )
{
    
    char *end;
    int i = strtol( preset, &end, 10 );
    if( *end == 0 && i >= 0 && i < sizeof(x264_preset_names)/sizeof(*x264_preset_names)-1 )
        preset = x264_preset_names[i];
 
    /*
     * 下面的这些参数设置会对编码质量和编码速度造成极大影响,因此,优化时首先考虑优化下面的参数
     */
 
    /* 极快(最快)
     */
    if( !strcasecmp( preset, "ultrafast" ) )
    {
    
        /* 参考帧数量设置为1
         */
        param->i_frame_reference = 1;
        /* 场景切换设置阈值
         */
        param->i_scenecut_threshold = 0;
        /* 不进行去方块滤波
         */
        param->b_deblocking_filter = 0;
        /* 不使用cabac
         */
        param->b_cabac = 0;
        /* 没有B帧
         */
        param->i_bframe = 0;
        /* 设置intra划分的partition,这里应该是不进行划分,只使用16x16
         */
        param->analyse.intra = 0;
        /* 设置inter划分的partition,这里应该是不进行划分,只使用16x16
         */
        param->analyse.inter = 0;
        /* 不使用8x8的的DCT变换
         */
        param->analyse.b_transform_8x8 = 0;
        /* 运动估计:DIA
         */
        param->analyse.i_me_method = X264_ME_DIA;
        /* 亚像素运动估计精度:0,表示只进行整像素运动估计
         */
        param->analyse.i_subpel_refine = 0;
        /* 关闭自适应量化
         */
        param->rc.i_aq_mode = 0;
        /* 禁止每个宏块的分区拥有自己的参考编号
         */
        param->analyse.b_mixed_references = 0;
        /* 不使用trellis优化
         */
        param->analyse.i_trellis = 0;
        /* 自适应B帧判断的概率(从-100到100)
         */
        param->i_bframe_adaptive = X264_B_ADAPT_NONE;
        /* 不使用mbtree
         */
        param->rc.b_mb_tree = 0;
        /* 权重预测中,P帧的权值
         */
        param->analyse.i_weighted_pred = X264_WEIGHTP_NONE;
        /* 显式的B帧权重预测
         */
        param->analyse.b_weighted_bipred = 0;
        /* mbtree前向预测的帧的数量
         */
        param->rc.i_lookahead = 0;
    }
    /* 超级快
     */
    else if( !strcasecmp( preset, "superfast" ) )
    {
    
        /* inter划分:4x4和8x8
         */
        param->analyse.inter = X264_ANALYSE_I8x8|X264_ANALYSE_I4x4;
        /* 运动估计:DIA
         */
        param->analyse.i_me_method = X264_ME_DIA;
        /* 亚像素运动估计精度
         */
        param->analyse.i_subpel_refine = 1;
        /* 参考帧数量:1
         */
        param->i_frame_reference = 1;
        /* 不允许每个宏块的分区有自己的参考编号
         */
        param->analyse.b_mixed_references = 0;
        /* 关闭trellis优化
         */
        param->analyse.i_trellis = 0;
        /* 关闭mbtree
         */
        param->rc.b_mb_tree = 0;
        /* P帧的权值
         */
        param->analyse.i_weighted_pred = X264_WEIGHTP_SIMPLE;
        /* mbtree向前预测的帧数:0
         */
        param->rc.i_lookahead = 0;
    }
    /* 非常快
     */
    else if( !strcasecmp( preset, "veryfast" ) )
    {
    
        /* 亚像素运动估计精度
         */
        param->analyse.i_subpel_refine = 2;
        /* 参考帧数量:1
         */
        param->i_frame_reference = 1;
        /* 不允许每个宏块的分区有自己的参考编号
         */
        param->analyse.b_mixed_references = 0;
        /* 关闭trellis优化
         */
        param->analyse.i_trellis = 0;
        /* P帧的权值
         */
        param->analyse.i_weighted_pred = X264_WEIGHTP_SIMPLE;
        /* mbtree向前预测的帧数:10
         */
        param->rc.i_lookahead = 10;
    }
    /* 很快
     */
    else if( !strcasecmp( preset, "faster" ) )
    {
    
        /* 不允许每个宏块的分区有自己的参考编号
         */
        param->analyse.b_mixed_references = 0;
        /* 参考帧数量:2
         */
        param->i_frame_reference = 2;
        /* 亚像素运动估计精度
         */
        param->analyse.i_subpel_refine = 4;
        /* P帧的权值
         */
        param->analyse.i_weighted_pred = X264_WEIGHTP_SIMPLE;
        /* mbtree向前预测的帧数:20
         */
        param->rc.i_lookahead = 20;
    }
    /* 快
     */
    else if( !strcasecmp( preset, "fast" ) )
    {
    
        /* 参考帧数量:2
         */
        param->i_frame_reference = 2;
        /* 亚像素运动估计精度
         */
        param->analyse.i_subpel_refine = 6;
        /* P帧的权值
         */
        param->analyse.i_weighted_pred = X264_WEIGHTP_SIMPLE;
        /* mbtree向前预测的帧数:30
         */
        param->rc.i_lookahead = 30;
    }
    /* 正常:在速度与质量之间平衡
     */
    else if( !strcasecmp( preset, "medium" ) )
    {
    
        // 使用默认的参数
        /* Default is medium */
    }
    /* 慢
     */
    else if( !strcasecmp( preset, "slow" ) )
    {
    
        param->analyse.i_subpel_refine = 8;
        param->i_frame_reference = 5;
        param->analyse.i_direct_mv_pred = X264_DIRECT_PRED_AUTO;
        param->analyse.i_trellis = 2;
        param->rc.i_lookahead = 50;
    }
    /* 很慢
     */
    else if( !strcasecmp( preset, "slower" ) )
    {
    
        param->analyse.i_me_method = X264_ME_UMH;
        param->analyse.i_subpel_refine = 9;
        param->i_frame_reference = 8;
        param->i_bframe_adaptive = X264_B_ADAPT_TRELLIS;
        param->analyse.i_direct_mv_pred = X264_DIRECT_PRED_AUTO;
        param->analyse.inter |= X264_ANALYSE_PSUB8x8;
        param->analyse.i_trellis = 2;
        param->rc.i_lookahead = 60;
    }
    /* 非常慢
     */
    else if( !strcasecmp( preset, "veryslow" ) )
    {
    
        param->analyse.i_me_method = X264_ME_UMH;
        param->analyse.i_subpel_refine = 10;
        param->analyse.i_me_range = 24;
        param->i_frame_reference = 16;
        param->i_bframe_adaptive = X264_B_ADAPT_TRELLIS;
        param->analyse.i_direct_mv_pred = X264_DIRECT_PRED_AUTO;
        param->analyse.inter |= X264_ANALYSE_PSUB8x8;
        param->analyse.i_trellis = 2;
        param->i_bframe = 8;
        param->rc.i_lookahead = 60;
    }
    /* 极慢
     */
    else if( !strcasecmp( preset, "placebo" ) )
    {
    
        param->analyse.i_me_method = X264_ME_TESA;
        param->analyse.i_subpel_refine = 11;
        param->analyse.i_me_range = 24;
        param->i_frame_reference = 16;
        param->i_bframe_adaptive = X264_B_ADAPT_TRELLIS;
        param->analyse.i_direct_mv_pred = X264_DIRECT_PRED_AUTO;
        param->analyse.inter |= X264_ANALYSE_PSUB8x8;
        param->analyse.b_fast_pskip = 0;
        param->analyse.i_trellis = 2;
        param->i_bframe = 16;
        param->rc.i_lookahead = 60;
    }
    else
    {
    
        x264_log( NULL, X264_LOG_ERROR, "invalid preset '%s'\n", preset );
        return -1;
    }
    return 0;
}

参考:https://blog.csdn.net/NB_vol_1/article/details/78363559?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163600570616780264056029%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=163600570616780264056029&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-5-78363559.pc_search_result_cache&utm_term=preset%2Ctune&spm=1018.2226.3001.4187

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43466192/article/details/120804610

智能推荐

Mysql学习_InnoDB On-Disk Structures_TABLE_mysql table is disabled-程序员宅基地

文章浏览阅读409次。InnoDB On-Disk StructuresTableCreating InnoDB Tables:CREATE TABLE t1 (a INT, b CHAR (20), PRIMARY KEY (a)) ENGINE=InnoDB;You do not need to specify the ENGINE=InnoDB clause if InnoDB is defined ..._mysql table is disabled

bzoj3296: [USACO2011 Open] Learning Languages(并查集)-程序员宅基地

文章浏览阅读248次。题目传送门 。解法: 并查集。 一头牛连向他能说的语言。 然后可以通过翻译的话就相当于双向边咯。 意思就是牛可以去找语言,语言也可以找牛。 最后记录有多少个不同的集合-1即可代码实现:#include&lt;cstdio&gt;#include&lt;cstring&gt;#include&lt;cstdlib&gt;#include&lt;iostream&gt..._bzoj3296

无线接入认证web服务器搭建,基于WEB和RADIUS的无线局域网接入认证系统-程序员宅基地

文章浏览阅读1.2k次。摘要:无线局域网的安全运营管理是近年的研究热点,而用户的接入认证是网络安全管理和运营的基础.常见的接入认证技术有PPPoE,IEEE 802.1x和Web认证三种.本文针对无线局域网的特点,以用户进行认证的便利性和易于维护性为依据,致力于开发基于WEB和RADIUS(远端拨入用户认证服务)的接入认证系统. 论文首先进行WEB认证系统总体设计,选择Linux作为开发环境.通过深入剖析Netfilte..._wifi web认证服务器搭建

解决conda 安装时的HTTP报错CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs_linux conda 报错 condahttperror: http 000 connection-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。错误代码:CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/main/linux-64/current_repodata.json>Elapsed: -An HTTP error occurred when trying to retrieve this URL.HTTP errors are often intermittent, and a simple retry _linux conda 报错 condahttperror: http 000 connection failed for url <>

linux终端声音设置,终端命令设置音量?-程序员宅基地

文章浏览阅读510次。问题描述我有一个外部声卡,大部分工作正常,除了第一次插入时或打开笔记本电脑时,音量设置为100%。也就是整个系统音量,如声音指示器所示。我正在寻找的是一个终端命令,将该音量设置为50%,这样我就可以在登录时运行它,而不必担心如果我忘记了转动,我播放的第一个音频会在我身上发出声音音量降低。哪些命令允许您更改该音量,即声音指示器中的音量?我用gsettings和dbus四处探索,但一直无法找到任何可以..._amixer -q -d pulse sset master 5%- unmute

form表单,formdata对象,实现文件上传_formdata文件上传-程序员宅基地

文章浏览阅读3.1k次。action提交表单时,向何处发送表单数据target在何处打开url_blank在新窗口打开_self在同一个窗口打开默认_parent_topmethod属性以何种方式把表单数据提交到actionurlGET/POSTenctype属性发送表单数据之前如何对数据进行编码——上传图片post......_formdata文件上传

随便推点

android Listview 软引用SoftReference异步加载图片_listview软引用-程序员宅基地

文章浏览阅读1.9k次。网上软应用的例子很多,我也是借鉴别人修改了下,推荐一个网址:http://www.iteye.com/topic/685986 之前总是不太理解,今天认真的推敲下,记录下来方便以后用到. HashMap> imageCache 关于SoftReference这个类多少知道些机制,会用就ok了。 机制:简单来说,她会帮助我们管理内存,防止内存溢出,另外一点也_listview软引用

spark1.0-集群搭建_e5 2690-程序员宅基地

文章浏览阅读832次。背景机器环境:部门有10台服务器,每台配置为:intel E5-2690 v3 48核,775Gb内存。搭建了hdfs,hive,spark,并且spark的资源调度方案为yarn模式。因为资源分配有限。故而在自己组所拥有的6台服务器上,手动搭建spark集群,每台配置为:intel E5-2670 v3 48核,128Gb内存,18T硬盘(一个驱动控制器口)。 任务:20T压缩包(压缩率3左右,_e5 2690

《自然语言处理:数字化时代的语言智慧》_体系化智能nlp-程序员宅基地

文章浏览阅读1.1k次,点赞45次,收藏31次。随着数字化时代的来临,自然语言处理(NLP)技术正在成为信息处理和人机交互的核心技术之一。本文将围绕NLP的技术进展、技术原理、行业应用案例、面临的挑战与机遇以及未来趋势进行详细探讨。_体系化智能nlp

Python 3+Django 3 结合Vue.js框架构建前后端分离Web开发平台实战-程序员宅基地

文章浏览阅读3k次,点赞2次,收藏35次。学习全文大概需要 12分钟,内容实战性较强。1. 前言本篇将基于Python 3.7+Django 3.0结合Vue.js前端框架,为大家介绍如何基于这三者的技术栈来实现一个前端后离的W..._python+django+mysql+vue前后端分离开发的小型电子商务管理系统

flutter框架简单学习_flutter框架语法学习-程序员宅基地

文章浏览阅读269次。flutter框架最近在搞大创,主要课题就是flutter开发,简单认识一下本文将widget称为控件项目开篇介绍一个Flutter项目从main函数中的runApp调用开始。在ranApp函数中所接收的控件会成为整个屏幕的根控件,并覆盖在整个屏幕。(可以将这个控件理解成iOS中的rootViewController或android中在manifest文件中配置的mainActivity的界面)。而其他的控件(widget)都是在这个根控件上添加的。import 'package:flutter/_flutter框架语法学习

兼容性测试神器 responsively-app_responsivelyapp-程序员宅基地

文章浏览阅读5.8k次,点赞3次,收藏11次。官网 https://responsively.app/下载地址 https://github.com/manojVivek/responsively-app/releases当时v0.1.6,DIY设备信息后,不然新设备不会显示,还自动添加所有默认设备。几十个设备一起添加到首页,当时我的电脑直接蜂鸣了。。目前版本v0.2.0,v0.1.6那个致命bug终于修复了。自定义设备只需要填写相关信息就可以了,User-Agent可以从浏览器Copy过来比较真实。..._responsivelyapp