searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

OpenH264的API(上)

2023-09-22 10:07:12
40
0

* ISVCEncoder : 编码器的封装。提供以下 api:

* int ISVCEncoder::GetDefaultParams (SEncParamExt* pParam) : 获得默认的命令行参数。

* int ISVCEncoder::Initialize (const SEncParamBase* pParam) : 以编码参数初始化编码器。

* int ISVCEncoder::InitializeExt (const SEncParamExt* pParam) : 以扩展参数初始化编码器。

* int ISVCEncoder::EncodeFrame (const SSourcePicture* kpSrcPic, SFrameBSInfo* pBsInfo) : 编码一帧。
  其中,kpSrcPic 用于存储输入的帧数据,其组织形式为

typedef struct Source_Picture_s {
    int       iColorFormat;
    int       iStride[4];
    unsigned char*  pData[4];
    int       iPicWidth;
    int       iPicHeight;
    long long uiTimeStamp;
  } SSourcePicture;

 

   pBsInfo 用于返回编码码流,其组织形式为

typedef struct {
    int           iLayerNum;
    SLayerBSInfo  sLayerInfo[MAX_LAYER_NUM_OF_FRAME];
    EVideoFrameType eFrameType;
    int iFrameSizeInBytes;
    long long uiTimeStamp;
  }

 

  iLayerNum 为输出的空域层数,
  iFrameSizeInBytes 为输出据的总长度,
  uiTimeStamp 当前帧的时间戳,即 pts。
  eFrameType 为输出的帧类型。
  EVideoFrameType 的枚举包括:

videoFrameTypeInvalid(0) 无效类型,videoFrameTypeIDR(1) IDR(即刻刷新)帧,videoFrameTypeI(2) 普通I帧,videoFrameTypeP(3) P帧,videoFrameTypeSkip(4),被编码器跳过的帧,videoFrameTypeIPMixed I\P 条带混合的帧,类似于x264的渐进刷新模式输出,现在不支持。(注意:openh264 并没有预留 B 帧类型)
 

sLayerInfo 用于实际封装输出的二进制流,其结构 SLayerBSInfo 定义为:

typedef struct {
    unsigned char uiTemporalId;
    unsigned char uiSpatialId;
    unsigned char uiQualityId;
    EVideoFrameType eFrameType;
    unsigned char uiLayerType;
    int   iSubSeqId;
    int   iNalCount;
    int*  pNalLengthInByte;
    unsigned char*  pBsBuf;
  }

 

  uiTemporalId 为时域层级,uiSpatialId 为空域层级,
  uiQualityId 为质量层级,uiLayerType 为子层类型,iSubSeqId 为所属子序列,iNalCount 包含 NALU 的数目,pNalLengthInByte 各个 NALU 的长度,pBsBuf 实际输出的二进制流。

* int ISVCEncoder::EncodeParameterSets (SFrameBSInfo* pBsInfo) : 编码编码参数集。

* int ISVCEncoder::ForceIntraFrame (bool bIDR, int iLayerId = -1) : 强制编码 IDR 帧。bIDR 设置为 true 后,下一次编码器输出的帧类型将为 IDR。

* int ISVCEncoder::SetOption (ENCODER_OPTION eOptionId, void* pOption) : 设置编码选项,可以在编码器处于任意状态执行,编码器运行时某些设置有可能不生效。

* int ISVCEncoder::GetOption (ENCODER_OPTION eOptionId, void* pOption) : 获取编码选项,可以在编码器处于任意状态执行。

* int ISVCEncoder::Uninitialize() : 反初始化编码器。

 

0条评论
0 / 1000
肖恩
4文章数
1粉丝数
肖恩
4 文章 | 1 粉丝
肖恩
4文章数
1粉丝数
肖恩
4 文章 | 1 粉丝
原创

OpenH264的API(上)

2023-09-22 10:07:12
40
0

* ISVCEncoder : 编码器的封装。提供以下 api:

* int ISVCEncoder::GetDefaultParams (SEncParamExt* pParam) : 获得默认的命令行参数。

* int ISVCEncoder::Initialize (const SEncParamBase* pParam) : 以编码参数初始化编码器。

* int ISVCEncoder::InitializeExt (const SEncParamExt* pParam) : 以扩展参数初始化编码器。

* int ISVCEncoder::EncodeFrame (const SSourcePicture* kpSrcPic, SFrameBSInfo* pBsInfo) : 编码一帧。
  其中,kpSrcPic 用于存储输入的帧数据,其组织形式为

typedef struct Source_Picture_s {
    int       iColorFormat;
    int       iStride[4];
    unsigned char*  pData[4];
    int       iPicWidth;
    int       iPicHeight;
    long long uiTimeStamp;
  } SSourcePicture;

 

   pBsInfo 用于返回编码码流,其组织形式为

typedef struct {
    int           iLayerNum;
    SLayerBSInfo  sLayerInfo[MAX_LAYER_NUM_OF_FRAME];
    EVideoFrameType eFrameType;
    int iFrameSizeInBytes;
    long long uiTimeStamp;
  }

 

  iLayerNum 为输出的空域层数,
  iFrameSizeInBytes 为输出据的总长度,
  uiTimeStamp 当前帧的时间戳,即 pts。
  eFrameType 为输出的帧类型。
  EVideoFrameType 的枚举包括:

videoFrameTypeInvalid(0) 无效类型,videoFrameTypeIDR(1) IDR(即刻刷新)帧,videoFrameTypeI(2) 普通I帧,videoFrameTypeP(3) P帧,videoFrameTypeSkip(4),被编码器跳过的帧,videoFrameTypeIPMixed I\P 条带混合的帧,类似于x264的渐进刷新模式输出,现在不支持。(注意:openh264 并没有预留 B 帧类型)
 

sLayerInfo 用于实际封装输出的二进制流,其结构 SLayerBSInfo 定义为:

typedef struct {
    unsigned char uiTemporalId;
    unsigned char uiSpatialId;
    unsigned char uiQualityId;
    EVideoFrameType eFrameType;
    unsigned char uiLayerType;
    int   iSubSeqId;
    int   iNalCount;
    int*  pNalLengthInByte;
    unsigned char*  pBsBuf;
  }

 

  uiTemporalId 为时域层级,uiSpatialId 为空域层级,
  uiQualityId 为质量层级,uiLayerType 为子层类型,iSubSeqId 为所属子序列,iNalCount 包含 NALU 的数目,pNalLengthInByte 各个 NALU 的长度,pBsBuf 实际输出的二进制流。

* int ISVCEncoder::EncodeParameterSets (SFrameBSInfo* pBsInfo) : 编码编码参数集。

* int ISVCEncoder::ForceIntraFrame (bool bIDR, int iLayerId = -1) : 强制编码 IDR 帧。bIDR 设置为 true 后,下一次编码器输出的帧类型将为 IDR。

* int ISVCEncoder::SetOption (ENCODER_OPTION eOptionId, void* pOption) : 设置编码选项,可以在编码器处于任意状态执行,编码器运行时某些设置有可能不生效。

* int ISVCEncoder::GetOption (ENCODER_OPTION eOptionId, void* pOption) : 获取编码选项,可以在编码器处于任意状态执行。

* int ISVCEncoder::Uninitialize() : 反初始化编码器。

 

文章来自个人专栏
openh264介绍
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0