ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

chromium 视频流请求与传递过程分析

2019-04-04 12:53:21  阅读:259  来源: 互联网

标签:sink 请求 视频流 renderer 进程 chromium browser


背景

chromium 浏览器在处理类似 chrome.desktopCapture 这样的视频流请求的时候,大致流程是什么样的呢?初步梳理了一下整个流程,流程还是比较长的,这里给出大概的类图,但只说明其中部分的关键点。

浏览器的 renderer 进程在接收到执行 getUserMedia() 的请求后,首先是由 blink 接受请求,然后转交给 content 中的 renderer 处理,UserMediaProcessor 类处理传入的请求,并通过 mojo 通信请求 browser 进程创建所需要的视频流,browser进程创建对应的视频流后通过调用 UserMediaProcessorOnStreamGenerated() 回调函数来反馈通知。UserMediaProcessor 通过 StartTracks() 来开启对应的视频流,在启动视频流的过程中,传入了回调函数,以便在收到视频帧时传递给需要视频帧的客户。

renderer 进程的处理流程

在 renderer 进程中,相关类图如下所示:
在这里插入图片描述请求视频流的过程处理流程大致如下:

UserMediaProcessorMediaStreamVideoTrackMediaStreamVideoSourceMediaStreamVideoCapturerSourceLocalVideoCapturerSourceVideoCaptureImplManagerVideoCaptureImpl

视频流是按照请求的逆向传递的,首先是 VideoCaptureImpl 通过 mojo 接口从 browser 进程获取捕获的视频帧,然后从 VideoCaptureImpl 按照请求的逆向传递到 MediaStreamVideoTrack 后,开始分发给各个 sink。在多媒体领域中,source 、 track 和 sink是一套完整的概念,source 代表视频流的来源,track 代表视频流的轨道,类似水管的感觉,sink 代表接收视频的端点。由于我分析的是 chrome.desktopCapture 请求视频流的过程,所以这里的 sink 就是 MediaStreamVideoWebRtcSink ,当然还有其他类型的 sink。

browser 进程的处理流程

在 browser 进程中,与 renderer 进程的 VideoCaptureImpl 对接的是 VideoCaptureHostVideoCaptureImpl 通过 GetVideoCaptureHost() 获取一个 VideoCaptureHost 的指针,通过这个指针来控制 VideoCaptureHost 对视频流的处理。
在这里插入图片描述其中 media_VideoCaptureDeviceClient代表media::VideoCaptureDeviceClient.
VideoCaptureHost 将视频流的控制指令传递给 VideoCaptureDeviceVideoCaptureDevice是一个抽象接口,其实是传递给对应平台下的视频捕获设备。

标签:sink,请求,视频流,renderer,进程,chromium,browser
来源: https://blog.csdn.net/zhuiyuanqingya/article/details/89004787

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有