VideoFrameSender 类

  • Go

更新时间不可用

VideoFrameSender 类

NewVideoFrameSender

Go
func (mediaNodeFactory *MediaNodeFactory) NewVideoFrameSender() *VideoFrameSender {
    sender := C.agora_media_node_factory_create_video_frame_sender(mediaNodeFactory.cFactory)
    if sender == nil {
        return nil
    }
    return &VideoFrameSender{
        cSender: sender,
    }
}
创建一个原始视频数据发送模块。该方法创建一个 VideoFrameSender 对象,可用于 NewCustomVideoTrackFrame 方法。

返回值

  • VideoFrameSender 对象:方法调用成功。
  • nil: 方法调用失败。

SendVideoFrame

Go
func (sender *VideoFrameSender) SendVideoFrame(frame *ExternalVideoFrame) int {
    cData := C.CBytes(frame.Buffer)
    defer C.free(cData)
    cFrame := C.struct__external_video_frame{}
    C.memset(unsafe.Pointer(&cFrame), 0, C.sizeof_struct__external_video_frame)
    cFrame._type = C.int(frame.Type)
    cFrame.format = C.int(frame.Format)
    cFrame.buffer = cData
    cFrame.stride = C.int(frame.Stride)
    cFrame.height = C.int(frame.Height)
    cFrame.crop_left = C.int(frame.CropLeft)
    cFrame.crop_top = C.int(frame.CropTop)
    cFrame.crop_right = C.int(frame.CropRight)
    cFrame.crop_bottom = C.int(frame.CropBottom)
    cFrame.rotation = C.int(frame.Rotation)
    cFrame.timestamp = C.longlong(frame.Timestamp)
    if frame.MetadataBuffer != nil {
        metadata := C.CBytes(frame.MetadataBuffer)
        defer C.free(metadata)
        cFrame.metadata_buffer = (*C.uint8_t)(metadata)
        cFrame.metadata_size = C.int(len(frame.MetadataBuffer))
    }
    if frame.AlphaBuffer != nil {
      alpha, alphaPinner := unsafeCBytes(frame.AlphaBuffer)
      defer alphaPinner.Unpin()
      cFrame.alpha_buffer = (*C.uint8_t)(alpha)
    }
    if frame.FillAlphaBuffer {
      cFrame.fill_alpha_buffer = C.uint8_t(1)
    }
    cFrame.alpha_mode = C.int(frame.AlphaMode)
    // fill color space: for go,the default value of struct 's member is zero value!
    cFrame.color_space.matrix_id = C.int(frame.ColorSpace.MatrixId)
    cFrame.color_space.primaries_id = C.int(frame.ColorSpace.PrimariesId)
    cFrame.color_space.transfer_id = C.int(frame.ColorSpace.TransferId)
    cFrame.color_space.range_id = C.int(frame.ColorSpace.RangeId)
    return int(C.agora_video_frame_sender_send(sender.cSender, &cFrame))
}
将 YUV 格式的视频帧发送到视频轨道。

参数

参数描述
frame需要发送的视频帧,详见 ExternalVideoFrame。
表格内容超出当前宽度,可横向滚动查看更多列。

返回值

  • 0: 方法调用成功。
  • < 0: 方法调用失败。