美文网首页
OBS-采集/编码

OBS-采集/编码

作者: 上官宏竹 | 来源:发表于2021-09-24 20:11 被阅读0次

数据从采集到编码,依靠着全局变量obs进行联络,包括不同线程间的数据传递。

全局变量obs

位于obs.c中定义struct obs_core *obs = NULL;,在obs_init申请内存和初始化相关内容。
视频待编码数据存放在:obs->video.video->cache[0...15].frame.data[0...]中。
注意:typedef struct video_output video_t;,即video_outputvideo_t一致。

输出output

obs_output_create中调用插件创建接口,保存插件创建的数据指针。而create返回的指针将会传递给插件的start接口。

obs_output_create() {
    output->context.data =
        info->create(output->context.settings, output); 
}

编码过程

obs_x264_encode中编码,调用init_pic_data将obs内部数据结构装换为x264需要的数据。 x264_encoder_encode

X264结构体

/********************************************************************************************
 x264_image_t 结构用于存放一帧图像实际像素数据。该结构体定义在x264.h中
*********************************************************************************************/
typedef struct
{
    int     i_csp;           // 设置彩色空间,通常取值 X264_CSP_I420,所有可能取值定义在x264.h中
    int     i_plane;        //  图像平面个数,例如彩色空间是YUV420格式的,此处取值3
    int     i_stride[4];    // 每个图像平面的跨度,也就是每一行数据的字节数
    uint8_t *plane[4];  //  每个图像平面存放数据的起始地址, plane[0]是Y平面,
// plane[1]和plane[2]分别代表U和V平面
}  x264_image_t;
/********************************************************************************************
x264_picture_t 结构体描述一视频帧的特征,该结构体定义在x264.h中。
*********************************************************************************************/
typedef struct
{
int   i_type;           // 帧的类型,取值有X264_TYPE_KEYFRAME、X264_TYPE_P、
                            // X264_TYPE_AUTO等。初始化为auto,则在编码过程自行控制。
int   i_qpplus1;    // 此参数减1代表当前帧的量化参数值
int   i_pic_struct; // 帧的结构类型,表示是帧还是场,是逐行还是隔行,
                           // 取值为枚举值 pic_struct_e,定义在x264.h中
int   b_keyframe;// 输出:是否是关键帧
int64_t   i_pts;    // 一帧的显示时间戳
int64_t   i_dts;    // 输出:解码时间戳。当一帧的pts非常接近0时,该dts值可能为负。

/* 编码器参数设置,如果为NULL则表示继续使用前一帧的设置。某些参数
   (例如aspect ratio) 由于收到H264本身的限制,只能每隔一个GOP才能改变。
   这种情况下,如果想让这些改变的参数立即生效,则必须强制生成一个IDR帧。*/ 
x264_param_t    *param;

x264_image_t     img;          // 存放一帧图像的真实数据
x264_image_properties_t    prop;
x264_hrd_t    hrd_timing;    // 输出:HRD时间信息,仅当i_nal_hrd设置了才有效
void    *opaque;                    // 私有数据存放区,将输入数据拷贝到输出帧中
} x264_picture_t ;

参考:x264重要结构体详细说明(2): x264_image_t、x264_picture_t、x264_nal_t

编码/录制流程

OBS编码录制全流程图.png

相关文章

  • OBS-采集/编码

    数据从采集到编码,依靠着全局变量obs进行联络,包括不同线程间的数据传递。 全局变量obs 位于obs.c中定义s...

  • iOS 视频硬编码H264/H265

    视频采集 视频采集部分,上一篇文章已经提及iOS视频采集 视频编码 首先初始化编码器 传入需要编码的数据 编码回调...

  • Android音视频编码(二)

    视频编码 说明:使用MediaCodec对由Camera采集的数据进行H264编码 1.采集视频数据参数设置:帧率...

  • 第六章 音视频的采集与编码

    目录 一 音频的采集二 视频画面的采集三 音频的编码3.1 libfdk_aac编码AAC3.2 iOS平台的硬件...

  • 音视频学习基本知识--(videoToolbBox解码)

    解码 4个动作 采集-视频源数据CVPixelBuffer 编码(硬编码VideoToolBox)--NALU数据...

  • ffmpeg音频采集、编码

    不同于视频采集一帧编码一帧,音频采集和编码之间稍微复杂一些,记录下相关内容 音频采集 在windows上获取音频的...

  • 直播技术--概念篇

    推流端:主播使用的终端 通过摄像头进行视频采集,通常为YUV编码格式 通过话筒进行音频采集,通常为PCM编码格式 ...

  • VideoToolBox编码器解读

    VTCompressionSession 要将相机采集到的数据进行编码,使用VideoToolBox的编码器进行编...

  • 视频直播理论基础 看这一篇就够了

    一个完整的视频直播过程,包括采集、处理、编码、封装、推流、传输、转码、分发、解码、播放等。 一、采集 音频采集 音...

  • 直播技术整体概述

    技术整体概述: 采集:摄像头采集,屏幕采集(视屏来源) 处理:美颜、水印、滤镜效果(瘦脸、美白) 编码:视频压缩编...

网友评论

      本文标题:OBS-采集/编码

      本文链接:https://www.haomeiwen.com/subject/zpsfgltx.html