相关的类 VideoRender,VideoRenderCallback,IncomingVideoStream,VideoRenderDirect3D9,D3D9Channel
VideoRender 本类为rtc提供的用来在某个特定窗口渲染yuv数据的类,本类可以在ios,android,linux,windows上渲染图像,同时提供了在窗口上绘制文本,设置各种背景图的功能。
Windows 下 VideoRender 会生成一个 VideoRenderDirect3D9 的实例,这个实例里面包含了多个 D3D9Channel(std::map<int, D3D9Channel*> _d3dChannels),这个通道就继承自VideoRenderCallback, 这些channel通过流id来区分, AddIncomingRenderStream 会调用CreateChannel创建新的channel
此处涉及到的设计模式和技术点,我会单独找一篇文章来说明设计模式在webrtc中的应用
- 创建
通过传入一个窗口的句柄来确认在哪个窗口绘制
/*
* Create a video render module object
*
* id - unique identifier of this video render module object
* window - pointer to the window to render to
* fullscreen - true if this is a fullscreen renderer
* videoRenderType - type of renderer to create
*/
static VideoRender
* CreateVideoRender(
const int32_t id,
void* window,
const bool fullscreen,
const VideoRenderType videoRenderType =
kRenderDefault);
- 输入
AddIncomingRenderStream 通过该方法来获取输入渲染窗口的接口,然后调用VideoRenderCallback::RenderFrame方法输入yuv数据
video_render_callback_ = renderModule->AddIncomingRenderStream(stream_id_, 0, 0.0f, 0.0f, 1.0f, 1.0f);
video_render_callback_->RenderFrame(stream_id_, videoFrame);
VideoRenderCallback为绘制图像的接口,VideoRender中包含一个这样的接口
class VideoRenderCallback {
public:
virtual int32_t RenderFrame(const uint32_t streamId,
const VideoFrame& videoFrame) = 0;
protected:
virtual ~VideoRenderCallback() {}
};
IncomingVideoStream 一个输入图像队列类,只有在VideoReceiveStream中使用最大的功能是通过时间戳排序,它继承自VideoRenderCallback,每一个VideoRender中都包含一个IncomingVideoStream
欢迎访问本人的小站 xsnip.cn