x264编码h264

2023-11-14

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


libx264编码摄像头数据为H264代码实现》链接:
摄像头数据使用x264编码H264代码实现

前言

随着互联网的发展,短视频、视频直播、视频会议、视频监控在人们的生活中越来越普遍,也越来越重要。当前视频制作使用最多的编码方案之一就是h264。

一、x264介绍

目前最受欢迎的编码h264的免费开源软件当数x264。x264不仅提供了一个命令行工具进行编码,还提供了一组丰富的接口(API)可以被调用来编码h264视频。x264开源软件下载路径为:http://download.videolan.org/pub/videolan/x264/snapshots/。

二、x264中主要的编码接口以及主要数据结构介绍

1.void x264_param_default( x264_param_t * );

该函数的主要功能是入参进行初始化,也是对x264编码器设置默认参数。关于x264_param_t 结构体的定义在x264.h中,x264_param_t 的参数有很多,很多参数适合专业的编码其开发人员去设置,专业的编码器开发人员根据视频场景,通过设置参数可以编码出更好画质和更高的编码效率,如果对x264或者h264不够精通的人员调整太复杂的参数可能导致编码出来的画质差,码率高等问题;所以一般情形下使用x264默认编码参数即可。通常情况下我们需要配置的编码参数有:

typedef struct x264_param_t
{
    /* Video Properties */
    int         i_width;
    int         i_height;
    int         i_frame_total;
    int         i_keyint_max;       /* Force an IDR keyframe at this interval */
    int         i_keyint_min;       /* Scenecuts closer together than this are coded as I, not IDR. */
    int         b_open_gop;
    int         i_bframe;   /* how many b-frame between 2 references pictures */
    int         i_bframe_pyramid;   /* Keep some B-frames as references: 0=off, 1=strict hierarchical, 2=normal */
    int         i_bframe_adaptive;
    int         i_log_level;
    uint32_t i_fps_num;
    uint32_t i_fps_den;
    uint32_t i_timebase_num;    /* Timebase numerator */
    uint32_t i_timebase_den;    /* Timebase denominator */
  
        /* Rate control parameters */
    struct
    {
        int         i_bitrate;
    } rc;
} x264_param_t;

i_width、i_height:是编码视频的分辨率,如1280x720;
i_frame_total:指定编码器编码的yuv帧数,通常可以不设置或者设置0,编码yuv帧数由上层调用者来决定编码帧个数。
i_keyint_max、i_keyint_min:表示关键帧(IDR)帧的最大间隔,最小间隔。关键帧的间隔对码率,编码效率,以及解码都有影响(间隔越小码率大,编码复杂度低、速度快,丢帧/丢包/帧错误解码恢复越快等)。
b_open_gop:设置开放GOP/闭合GOP,当该值设置为1表示是开放GOP,参考帧可以跨越IDR,即当前GOP的P帧/B帧可以参考前面的GOP。当该值设置为0表示是闭合GOP,当前GOP内的P帧/B帧不可以参考前面的GOP,只能参考当前GOP里面的参考帧。
i_bframe:b帧的个数。b帧是双向参考帧,其压缩率比I帧/P帧都要高,也就是说B帧可以很小,但是同时B帧的压缩算法复杂度很高,会带来编码性能上的损失,导致编码速度降低,同时B帧的存在会导致视频存在一定延时,不合适实时性要求很高的场景。
i_bframe_pyramid:该参数是否允许B帧做参考帧。
i_bframe_adaptive:B帧决策算法。取值有X264_B_ADAPT_NONE表示不做B帧类型决策固定i_bframe的数目;X264_B_ADAPT_FAST表示采用快速B帧类型决策算法;X264_B_ADAPT_TRELLIS采用更加准确的B帧类型决策算法。配置X264_B_ADAPT_FAST和X264_B_ADAPT_TRELLIS,编码器会根据视频场景计算当前帧是否合适作为B帧,前者算法速度块,但是B帧决策不够准确,后者算法速度慢,对B帧类型的决策比较准确。
i_log_level:x264库在运行时的日志输出等级。可以编码异常的时候开启更多打印来分析问题。
i_fps_num、i_fps_den:用户设置视频编码帧率,如编码25帧,可以设置i_fps_den=1,i_fps_num=25;
i_timebase_num、i_timebase_den:设置编码器的时间基准,其值和帧率正相关。

2、int x264_param_default_preset( x264_param_t *, const char *preset, const char *tune );

该函数用于不同场景下的参数“一键”配置;该函数根据preset,tune 来调整默认编码参数。
*x264_param_t 参数 :是编码器默认参数的地址;
preset:用于预设编码器,其值定义如下,在x264_preset_names[]里面前往后编码速度会越来越慢,但编码质量、码率等会越来越好。即该参数是编码器速度和编码器效率的单项调整。在实时场景往往会选择ultrafast,编码速度最快,在高清蓝光等可以选择veryslow或者placebo,画质码率最佳,但是速度很慢。

static const char * const x264_preset_names[] = { "ultrafast", "superfast", "veryfast", "faster", "fast", "medium", "slow", "slower", "veryslow", "placebo", 0 };

tune :用于优化不同场景下的编码参数,其值定义如下,x264_tune_names[]里面定义了不同的场景,如zerolatency(编码零延时),animation(编码动漫视频),根据不同的场景可以设置不同的参数从而达到编码质量压缩率最高的目的。

static const char * const x264_tune_names[] = { "film", "animation", "grain", "stillimage", "psnr", "ssim", "fastdecode", "zerolatency", 0 };

3、int x264_param_apply_profile( x264_param_t *, const char *profile );

该函数用于设置h264编码的的profile级别。x264的profile 有
“baseline”, “main”, “high”, “high10”, “high422”, “high444”;
不同的profile级别对编码器或者说对视频参数存在不同限制。h264编码器profile级别对编码参数的限制如下图:
在这里插入图片描述

4、x264_t *x264_encoder_open( x264_param_t * )

该函数用于打开一个编码器;根据 x264_param_t *参数创建x264编码器并返回x264编码器句柄指针。

5、int x264_encoder_headers( x264_t *, x264_nal_t **pp_nal, int *pi_nal )

在开始编码yuv之前可以通过该函数用于获取该编码器中输出码流的nal单元部信息数据,包含SPS、PPS、SEI等信息。
第一个参数:x264_encoder_open返回的句柄。
pp_nal:存放SPS、PPS等nal单元信息的地址;x264_nal_t 结构体的定义如下:

typedef struct x264_nal_t
{
    int i_ref_idc;  /* nal_priority_e */
    int i_type;     /* nal_unit_type_e */
    int b_long_startcode;
    int i_first_mb; /* If this NAL is a slice, the index of the first MB in the slice. */
    int i_last_mb;  /* If this NAL is a slice, the index of the last MB in the slice. */
    /* Size of payload (including any padding) in bytes. */
    int     i_payload;
    /* If param->b_annexb is set, Annex-B bytestream with startcode.
     * Otherwise, startcode is replaced with a 4-byte size.
     * This size is the size used in mp4/similar muxing; it is equal to i_payload-4 */
    uint8_t *p_payload;
    /* Size of padding in bytes. */
    int i_padding;
} x264_nal_t;

iNal:nal单元头的个数,比如nal只有SPS、PPS则该值为2,如果还包含了SEI该值为3.

该函数是在编码流程中可选的,根据需要进行调用,如果需要在编码yuv之前需要知道码流的信息和先调用该函数。

6、void x264_picture_init( x264_picture_t *pic )

该函数用于初始化x264_picture_t 结构体,即用于设置pic 参数。
x264_picture_t结构体的定义如下:

typedef struct x264_picture_t
{
    int     i_type;
    /* In: force quantizer for != X264_QP_AUTO */
    int     i_qpplus1;
    int     i_pic_struct;
    int     b_keyframe;
    /* In: user pts, Out: pts of encoded picture (user)*/
    int64_t i_pts;
    int64_t i_dts;
    x264_param_t *param;
    x264_image_t img;
    /* In: optional information to modify encoder decisions for this frame
     * Out: information about the encoded frame */
    x264_image_properties_t prop;
    /* Out: HRD timing information. Output only when i_nal_hrd is set. */
    x264_hrd_t hrd_timing;
    /* In: arbitrary user SEI (e.g subtitles, AFDs) */
    x264_sei_t extra_sei;
    /* private user data. copied from input to output frames. */
    void *opaque;
} x264_picture_t;

7、int x264_picture_alloc( x264_picture_t *pic, int i_csp, int i_width, int i_height )

该函数用于申请编码yuv数据缓存。根据yuv类型i_csp、编码分辨率来申请合适大小的缓存。
pic:输入图像参数变量。
i_csp:x264编码采用的yuv格式,目前是X264_CSP_I420(yuv 4:2:0 planar);
i_width、i_height:编码分辨率。

8、int x264_encoder_encode( x264_t *, x264_nal_t **pp_nal, int *pi_nal, x264_picture_t *pic_in, x264_picture_t *pic_out )

该函数用于编码一帧yuv数据,并返回当前帧的nal单元数据,以及编码过程的重建yuv。
第一个参:编码器句柄。
pp_nal:存放SPS、PPS等nal单元信息的地址
iNal:nal单元头的个数,比如nal只有SPS、PPS则该值为2,如果还包含了SEI该值为3.
pic_in:输入yuv帧数据,当该值为空的时候会刷新编码器缓冲区强制输出最后一帧编码数据。通常在编码结束关闭编码器前调用x264_encoder_encode函数并将pic_in设置NULL,来强制输出最后一帧确保编码器缓存为空。
pic_out :通常是编码过程中该帧编码后重建的yuv。

9、int x264_encoder_delayed_frames( x264_t * )

该函数用于获取当前编码器缓存延延迟输出的编码帧个数。通常编码码流存在B帧的时候存在延迟输出的帧。一般在需要编码B帧的时候该函数和x264_encoder_encode()来强制输出编码缓存的帧,来确保编码器之后能彻底关闭。示例如下:

while(x264_encoder_delayed_frames(x264Handle)) {
    x264_encoder_encode(x264Handle, &pNals, &iNal, null, pPicOut);
}

10、void x264_picture_clean( x264_picture_t *pic )

该函数用于释放x264_picture_alloc函数申请的资源(内存);

11、void x264_encoder_close( x264_t * )

该函数用于关闭编码并释放资源。
入参为:x264_encoder_open函数返回的句柄。

三、x264编码yuv的代码示例

1、编码器参数初始化

h264_enc_init函数申请编码参数资源并根据编码分辨率帧率设置编码参数,该套参数通常用于低延时场景。

x264_param_t *h264_enc_init(int width,int height,int fps)
{
    x264_param_t* pX264Param = new x264_param_t;

    x264_param_default(pX264Param);
	x264_param_default_preset(pX264Param, "veryfast", "zerolatency");
    
    pX264Param->i_width = width;         //* width
	pX264Param->i_height = height;       //* height
	pX264Param->i_keyint_max = 2 * fps;
    
    pX264Param->rc.i_bitrate = 1024 * 512;  //设置编码码率512kbps
    pX264Param->i_fps_den = 1;              //编码帧率
	pX264Param->i_fps_num = fps;            

    x264_param_apply_profile(pX264Param, x264_profile_names[0]); //baseline

    return pX264Param;
}

2、打开编码器

x264_t* h264_enc_open(x264_param_t *pH264Param)
{
   return x264_encoder_open(pH264Param);
}

3、关闭编码器

void h264_enc_close(x264_t *encHandle)
{
    x264_encoder_close(encHandle);
}

4、编码图像参数缓存申请

x264_picture_t* h264_enc_pic_alloc(x264_param_t *pH264Param)
{
    x264_picture_t* pPic = new x264_picture_t;

    x264_picture_alloc(pPic, X264_CSP_I420, pH264Param->i_width, pH264Param->i_height);
	pPic->img.i_csp = X264_CSP_I420;  //设置编码数据yuv420p
	pPic->img.i_plane = 3;            //编码数据有y、u、v三个通道
    
    return pPic;
}

5、编码图像缓存释放

void h264_enc_pic_free(x264_picture_t *pPic)
{
    x264_picture_clean(pPic);
}

6、编码一帧YUV

int h264_encoder(x264_t* pX264Handle, x264_picture_t* pPicIn,x264_nal_t* pNals)
{
    x264_picture_t pic_out;
    int pi_nal,ret;
    if(pPicIn) //编码一帧yuv
    {
        ret = x264_encoder_encode(pX264Handle, &pNals, &pi_nal, pPicIn, &pic_out);
        if(ret < 0)
        {
            std::cout << " x264_encoder_encode error"<< std::endl;
        }
    }
    else //刷新编码缓存-通常是关闭编码器前的操作
    {
        int maxNum = 16; //编码器帧缓存是小于16的
        while(x264_encoder_delayed_frames(pX264Handle) && maxNum) //确保编码缓冲的码流数据全部被清空,通常编码B帧的情况需要这样处理
        {
            ret = x264_encoder_encode(pX264Handle, &pNals, &pi_nal, NULL, &pic_out);
            if(ret < 0)
            {
                std::cout << " x264_encoder_encode error"<< std::endl;
            }
            maxNum--;
        }
    }
}

7、编码参数资源释放

void h264_enc_deinit(x264_param_t *pX264Param)
{
   delete pX264Param;
}

四、编码器函数调用流程

先初始化编码参数、申请编码图像资源、打开编码器、编码yuv、刷新编码器资源、关闭编码器、释放编码图像资源、释放编码参数。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

x264编码h264 的相关文章

  • linux安装ffmpeg

    1 下载解压 wget http www ffmpeg org releases ffmpeg 3 1 tar gz tar zxvf ffmpeg 3 1 tar gz 2 进入解压后目录 输入如下命令 usr local ffmpeg为
  • 语音方向总结-给新人

    一张图总结下语音方向 算法 以及开源工程 给需要找工作以及想深入研究方向同学一张思维图 对应的职业发展路径如下
  • Android 中的 RTSP 客户端

    可能有人问过同样的问题 但我没有找到任何适合我的解决方案 我正在尝试在 android 中播放 RTSP 流 服务器是 Darwin 流服务器 目前我尝试了VideoView和MediaPlayer 当我使用3G时 这两个都工作正常 但有时
  • 在VLC播放器中播放RTSP流

    我正在尝试用java制作一个简单的rtsp流媒体服务器 服务器能够将视频正确地传输到自定义写入播放器 问题是我无法在 vlc 媒体播放器中播放相同的流 当我启动 vlc 媒体播放器并输入流媒体详细信息时 我的服务器显示 vlc 发出的以下请
  • 在Android上使用Gstreamer或ffmpeg创建rtsp客户端

    我想在android上流rtsp流 我终于来了 结论是我不能使用 android API 的 MediaPlayer Videoview 等 因为 延迟对我来说是个大问题 我需要 Gstreamer 或 ffmpeg 客户端是否能够提供 我
  • 如何将网络摄像头视频+音频发送到rtsp/rtmp服务器

    我正在寻找一种将视频和音频发送到 rtsp rtmp 服务器的方法 它应该与笔记本网络摄像头和 USB 网络摄像头兼容 我想用 C 来做 我找到了一些名为 rtmpclient 的库 但它看起来无法向服务器发送消息 我还发现了一个支持网络摄
  • 在网站上显示 RTSP

    我有一个指向摄像机的 RTSP 链接 我想将其显示在网页上 由于视频标签不支持 RTSP 并且 google chrome 不再支持 VLC 和 QuickTime 插件 目前使用 RTSP 链接显示此摄像机的最佳方式是什么 如果延迟不是一
  • 使用 Node Media Server 将 IP cam 的 RTSP 重新流式传输到 http/ws 并以 html 形式显示

    Goal 我的目标是在标准 HTML 页面 html5 css3 vanilla javascript 无魔法 无插件 上显示 IP 摄像头的 RTSP 输出流 HTML 页面应托管在我的 Raspberry Pi 上的 NGINX Web
  • ffmpeg:在流 #1 中找不到编解码器的标签,容器当前不支持编解码器

    我正在尝试在命令行中使用 ffmpeg 从我的 ip 摄像机流录制视频 fmpeg rtsp transport tcp gt i rtsp 192 168 0 250 stream1 gt c copy gt map 0 gt f seg
  • Android 4.x 是否支持通过 TCP 传输 RTSP 流?

    我已经在 Android 中使用 VideoView 在 wowza 上成功播放视频 现在我要处理我的服务器 UDP 端口似乎被阻止 以openRTSP命令证明 gt openRTSP rtsp 61 218 52 250 554 live
  • 使用 RTSP 的视频流:Android

    我正在尝试在我的 Linux 计算机上安装 Wowza 服务器 以便为我的 Android 应用程序启用 RTSP 流 在 Android 客户端 我的应用程序需要进行哪些更改 我使用 Videoview 只是播放本地存储的视频文件 现在我
  • 如果wireshark无法识别某些类型的协议(RTSP、RTP、RTCP),如何强制其破译它们?

    我正在尝试根据Java实现RTSP协议http www csee umbc edu pmundur courses CMSC691C lab5 kurose ross html http www csee umbc edu pmundur
  • MobileVLCKit 编译时失败

    我正在尝试在我的应用程序中使用适用于 iOS 的 MobileVLCKit 我按照 给出的步骤进行操作构建 iOS 框架 https wiki videolan org VLCKit 我已在 Xcode 5 中将部署目标设置为 iOS 7
  • Android 上的 RTSP 客户端实现

    我看到很多与此相关的问题 尽管如此 我认为我的答案还没有 我想在 Android 上使用已编码的 RTSP 客户端与 MediaCodec 一起使用 以便捕获 H264 中的 RTSP 流 然后解码并显示它 我使用了 VideoView 和
  • 如何在 android 中从 Http 或 RTSP Url 流式传输视频

    我想在 android 上播放 Http 和 Rtsp 的视频 目前我正在尝试使用 http 链接 但是当我的活动开始时 它只是开始播放带有空白黑屏的音频 没有视频显示 我在下面发布了我的代码 感谢您提前提供的任何帮助 如果有人可以提供一个
  • RTSP服务器java实现问题:(

    我正在编写 RTSP 服务器并遇到一些问题 我使用 VLC 作为客户端 服务器从客户端 VLC 播放器 接收 OPTIONS DESCRIBE SETUP 和 PLAY 命令并回答该命令 通过 SETUP 命令客户端发送端口号 我正在使用该
  • 将视频流式传输到 gstreamer rtsp 服务器

    我正在尝试构建一个基于gstreamer的rtsp视频服务器 就我而言 我需要客户端连接到服务器并开始将视频流传输到服务器 我读过一些关于这个主题的教程 尤其是这个 http www ip sense com linuxsense how
  • 将实时 Android 网络摄像头视频上传到 RTP/RTSP 服务器

    我已经做了适当的研究 但仍然缺乏关于我想要实现的目标的信息 因此 我想编写一个应用程序 用户可以在其中录制视频并立即 实时 将视频上传到 RTP RTSP 服务器 服务器端不会有问题 我不清楚的是如何在手机端实现这一点 到目前为止 我的研究
  • 如何使用Java将h.264直播流编码为RTP数据包

    我正在为 Android 操作系统开发一个应用程序 我需要来自摄像机的实时解码视频流 该视频流使用 h 264 编解码器进行编码 将帧数据转换为 RTP 数据包并将数据包发送到服务器 首先 可以尝试在 PC 上实现从 HDD 中预先录制的视
  • Python FFmpeg查询rtsp太慢

    目前 我正在尝试使用 python 和 FFmpeg 来查询原始格式为 h264 的 rtsp 数据 直播流视频的信息为 fps 29 分辨率 1280 720 我希望我可以以相同的格式 h264 查询数据并将其放入python队列中以便将

随机推荐

  • Python 中的异常处理

    异常的原因通常在程序本身之外 例如 不正确的输入 输入输出设备故障等 由于程序在遇到异常时会突然终止 因此可能会对系统资源 如文件 造成损害 因此 应该正确处理异常 以防止程序突然终止 Python 使用try和except关键字来处理异常
  • 牛客网刷题-两数之和

    问题描述 给出一个整数数组 请在数组中找出两个加起来等于目标值的数 你给出的函数twoSum 需要返回这两个数字的下标 index1 index2 需要满足 index1 小于index2 注意 下标是从1开始的 假设给出的数组中只存在唯一
  • 哈希表【散列表】详解

    哈希表 hash 一 哈希表的插入及查询 hash表是一种数据结构 又称为散列表 其根本的原理就是把一个数变成另外一个易于存储的数 先来看一道例题吧 假如有n个数 n的范围只有10万 但是每个数的大小有1e9 怎么做才能统计每个数出现的次数
  • Windows系统中的Linux系统设置固定IP

    当前虚拟机的Linux操作系统 其IP地址是通过DHCP服务获得的 DHCP 动态获取IP地址 即每次重启设备都会获取一次 可能导致IP地址频繁变更 在VMware Workstation 或Fusion 中配置IP地址网关和网段 IP地址
  • 端口转发&&映射详解、代理&&反向代理深入认知

    端口转发 端口映射 端口转发和端口映射都是为了解决内网主机的端口无法在外部直接访问而衍生出来的技术 通过中间服务器进行中转 将内部的端口映射到公网IP上或者将内部端口转发到外部服务器 供用户或者自己来使用 端口转发 概念 端口转发 Port
  • 抖音去水印最新php方法代码

    输出正常JSON param string 提示信息 param array 输出数据 return json function jok msg success data null header content application js
  • UCI常用说明

    UCI常用函数说明 结构体 API函数 参考文章 安装完成后在 加粗样式 usr local include 目录下存放UCI h文件可以进行参考 结构体 1 struct uci package 包结构体 它对应一个配置文件内容 stru
  • unity-使用UGUI实现游戏开始、结束的设计

    开始界面 结束界面的制作 在场景中 新建一个canvas 在canvas中新建一个image作为背景图 可以通过Inspector界面 设置好image的相关属性 设置好背景之后 在场景中添加Button 根据个人需要 设置好Button的
  • 计算机视觉基础——数字图像与颜色空间

    欢迎大家关注微信公众号 baihuaML 白话机器学习 码字不易 如转载请私信我 在这里 我们一起分享AI的故事 您可以在后台留言 关于机器学习 深度学习的问题 我们会选择其中的优质问题进行回答 Hello 大家好 白话机器学习新的一个专题
  • 疯壳MTK智能穿戴入门篇-新增APP

    MTK编程 新增APP 在MTK 系统中 所有的功能都是模块化管理 并且大多数功能都有自己的功能宏 和对应的源代码文件 我们把这种功能模块称之为应用 简称APP Application 比如闹钟 计算器 日历等都是一个APP 在之前的例子中
  • Android里面的AutoCompleteTextView和MultiAutoCompleteTextView

    AutoCompleteTextView 动态的匹配输入的内容 独特的属性 设置输入多少字符时自动匹配 android completionThreshold 2 下面这个是在界面上定义的控件
  • 原生HTML跳转页面传递和接收参数方法

    传递参数 window location href order html info info 2 接受参数 在window nl ad function 里写下面的代码 var url location search 获取url中 符后的字
  • 过压保护电路(OVP)

    作者 AirCity 2020 2 4 Aircity007 sina com 本文所有权归作者Aircity所有 1 示例一 当VBUS 5V时 各点电压电流如图所示 Q1接近截止 输出信号是5V 当VBUS 5 4V开始 输出信号开始下
  • 《项目管理基础》学考笔记

    控制的主要成分是信息 每个人都应该进行状态和流程总结 条形图尾巴长短表示浮动时间 改善流程是每个项目经理的职责 项目控制分2方面 维持 改善质量 项目总结会议包括3类 设计 流程或经验教训 状态总结 计划时间不应超过4到6周 箭线图对于分析
  • 【平衡小车制作】(一)硬件原理图讲解(超详解)

    大家好 我是小政 之后的一系列文章我将介绍我玩平衡小车的过程以及遇到的一些问题 将这些内容记录下来分享给大家 也让大家少走一些弯路 接下来我将从硬件框架选择 软件编程 PID算法 PID调参 蓝牙遥控这五个部分向大家讲解平衡小车的制作过程
  • java 二进制转换为十进制_二进制转换十进制 算法解析

    java里面是有进制间互换现成的方法的 public class十进制与各进制的相互转换 public static voidmain String args java已经实现的机制 十进制转换为二进制 int decimal 10 Sys
  • php截取百度搜索结果

    简单的通过file URL 获取远程网页数据 用implode 函数把数组合并成string 再根据自己的需要 对string进行截取 过滤等个性化处理 基于此思想 可以进一步拓展 估计就是采集器的雏形了
  • 【华为OD机试真题2023 JS】统一限载货物数最小值

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 统一限载货物数最小值 知识点二分查找 时间限制 1s 空间限制 64MB 限定语言 不限 题目描述 火车站附近的货物中转站负责将到站货物运往仓库 小明在中转站负责调度2K辆中转车
  • JeeSite快速开发平台 JNPF快速开发平台3.4.6版本 框架源码部署文档入门说明

    JeeSite快速开发平台 JeeSite 快速开发平台 不仅仅是一个后台开发框架 它是一个企业级快速开发解决方案 后端基于经典组合 Spring Boot Shiro MyBatis 前端采用 Beetl Bootstrap AdminL
  • x264编码h264

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 x264介绍 二 x264中主要的编码接口以及主要数据结构介绍 1 void x264 param default x264 param t 2 int