1.webrtc linphone å°åºåªä¸ª
2.è°è°MediaStream
3.如何在网页中使用js录屏插件?
4.Android音视频(一) Camera2 API采集数据
webrtc linphone å°åºåªä¸ª
æ¯è¾æ¨èwebrtcãwebrtcåºæ¬ææ¯å·²ç»æäºï¼å æ¬p2pä¼ è¾ï¼é³è§é¢codec,é³é¢å¤çææ¯çããç¹å»å è´¹è¯ç¨ï¼0ææ¬å¯å¨ã
Linphoneæ¯èççsipï¼æ¯æå¹³å°å¹¿æ³ windows, mac,ios,android,linuxï¼ææ¯ä¼æ¯è¾æçãä½æ¯linphoneå¨Androidä¸çbugæç¹å¤ãimsdroid,csipsimple,linphoneé½æ³æ³è®¾æ³è°ç¨webrtcçé³é¢ææ¯ï¼æµè¯è¿Android端çwebrtcå ç½è§é¢éè¯æææ¯è¾æ»¡æãä½æ¯è¦æwebrtcåæä¸ä¸ªç§»å¨ç«¯çIM软件çè¯è¿æä¸äºè·¯è¦èµ°ï¼ä¸è¿webrtcåºæ¬ææ¯é½å·²ç»æäºï¼å æ¬p2pä¼ è¾ï¼é³è§é¢codec,é³é¢å¤çææ¯ãä¸è¿å ¶å 为ç®åä» æ¯æVP8çè§é¢ç¼ç æ ¼å¼ï¼QQä¹æ¯ï¼æ³åé«æ¸ è§é¢éè¯çè¦æ³¨æäºãVP8å¨ç§»å¨ç«¯ç硬件ç¼è§£ç æ¯æçå¹³å°æ²¡å 个ï¼RKå¯ä»¥æ¯æVP8硬件ç¼è§£ç ï¼ãä¸è¿webrtc代ç éçå°å¯ä»¥ä½¿ç¨å¤é¨codec,è¿ä¸ªè¿æ¯æå¸æè°å°Hçã
æ³è¦äºè§£æ´å¤å ³äºwebrtcçç¸å ³ä¿¡æ¯ï¼æ¨èå¨è¯¢ZEGOå³æç§æãZEGOå³æç§æèªä¸»ç åçé«é³è´¨è¯é³è§é¢å¼æï¼è½å¤æä¾å®æ¶æ¸ æ°çå¤äººè¯é³è§é¢éè¯ãæ¯æå¤è·¯è§é¢ç»é¢ï¼ä¿éæ¯ä¸è·¯è¯é³è§é¢é½æ¸ æ°æµç æä¾ç«¯å°ç«¯çSDKãåå¸å¼è½¬ç ãæ¥å ¥é´æäºæå¡æ¥å ¥ãæè±è¿ç»´ãè½»æ¾æ¯ææµ·éç¨æ·è¿è¥ã
è°è°MediaStream
MediaStream æ¯è¿æ¥ WebRTC API ååºå±ç©çæµçä¸é´å±ï¼webRTCå°é³è§é¢ç»è¿Vocie / Video engineè¿è¡å¤çåï¼åéè¿MediaStream APIç»æ´é²ç»ä¸å±ä½¿ç¨ã
MediaStreamTrackæ¯WebRTCä¸çåºæ¬åªä½åä½ï¼ä¸ä¸ªMediaStreamTrackå å«ä¸ç§åªä½æºï¼åªä½è®¾å¤æå½å¶å 容ï¼è¿åçåä¸ç±»åçåªä½ï¼å¦é³é¢ï¼è§é¢ï¼ãå个轨éå¯å å«å¤ä¸ªé¢éï¼å¦ç«ä½å£°æºå°½ç®¡ç±å¤ä¸ªé³é¢è½¨éææï¼ä½ä¹å¯ä»¥çä½æ¯ä¸ä¸ªè½¨éã
WebRTC并ä¸è½ç´æ¥è®¿é®æè æ§å¶æºï¼å¯¹æºçä¸åæ§å¶é½å¯ä»¥éè¿è½¨éæ§å¶ MediaTrackConstraints è¿è¡å®æ½ã
MediaStreamTrack MDNææ¡£
MediaTrackConstraints MDNææ¡£
MediaStreamæ¯MediaStreamTrackçåéï¼å¯ä»¥å å« >=0 个 MediaStreamTrackãMediaStreamè½å¤ç¡®ä¿å®æå å«çææ轨éé½æ¯æ¯åæ¶ææ¾çï¼ä»¥å轨éçåä¸æ§ã
MediaStream MDNææ¡£
åMediaTrackçæºç ä¸ï¼MediaTracké½æ¯ç±å¯¹åºçsourceåsinkç»æçã
æµè§å¨ä¸åå¨ä»sourceå°sinkçåªä½ç®¡éï¼å ¶ä¸sourceè´è´£ç产åªä½èµæºï¼å æ¬å¤åªä½æ件ï¼webèµæºçéæèµæºä»¥å麦å é£ééçé³é¢ï¼æå头ééçè§é¢çå¨æèµæºãèsinkåè´è´£æ¶è´¹sourceç产åªä½èµæºï¼ä¹å°±æ¯éè¿<img>ï¼<video>ï¼<audio>çåªä½æ ç¾è¿è¡å±ç¤ºï¼æè æ¯éè¿RTCPeerConnectionå°sourceéè¿ç½ç»ä¼ éå°è¿ç«¯ãRTCPeerConnectionå¯åæ¶æ®æ¼sourceä¸sinkçè§è²ï¼ä½ä¸ºsinkï¼å¯ä»¥å°è·åçsourceéä½ç çï¼ç¼©æ¾ï¼è°æ´å¸§ççï¼ç¶åä¼ éå°è¿ç«¯ï¼ä½ä¸ºsourceï¼å°è·åçè¿ç«¯ç æµä¼ éå°æ¬å°æ¸²æã
source ä¸sinkææä¸ä¸ªMediaTrackï¼å¤ä¸ªMeidaTrackææMediaStramã
MediaTrackConstraints æè¿°MediaTrackçåè½ä»¥åæ¯ä¸ªåè½å¯ä»¥éç¨çä¸ä¸ªæå¤ä¸ªå¼ï¼ä»èè¾¾å°éæ©åæ§å¶æºçç®çã MediaTrackConstraints å¯ä½ä¸ºåæ°ä¼ éç» applyConstraints() 以达å°æ§å¶è½¨éå±æ§çç®çï¼åæ¶å¯ä»¥éè¿è° getConstraints() ç¨æ¥æ¥çæè¿åºç¨èªå®ä¹çº¦æã
å¯å°MediaStream对象ç´æ¥èµå¼ç» HTMLMediaElement æ¥å£ç srcObject å±æ§ã
srcObject MDNææ¡£
å¯éè¿è°ç¨ MediaDevices.getUserMedia() æ¥è®¿é®æ¬å°åªä½ï¼è°ç¨è¯¥æ¹æ³åæµè§å¨ä¼æ示ç¨æ·ç»äºä½¿ç¨åªä½è¾å ¥ç许å¯ï¼åªä½è¾å ¥ä¼äº§çä¸ä¸ª MediaStream ï¼éé¢å å«äºè¯·æ±çåªä½ç±»åç轨éãæ¤æµå¯ä»¥å å«ä¸ä¸ªè§é¢è½¨éï¼æ¥èªç¡¬ä»¶æè èæè§é¢æºï¼æ¯å¦ç¸æºãè§é¢éé设å¤åå±å¹å ±äº«æå¡ççï¼ãä¸ä¸ªé³é¢è½¨éï¼åæ ·æ¥èªç¡¬ä»¶æèæé³é¢æºï¼æ¯å¦éº¦å é£ãA/D转æ¢å¨ççï¼ï¼ä¹å¯è½æ¯å ¶å®è½¨éç±»åã
éè¿ MediaDevices.enumerateDevices() æ们å¯ä»¥å¾å°ä¸ä¸ªæ¬æºå¯ç¨çåªä½è¾å ¥åè¾åºè®¾å¤çå表ï¼ä¾å¦éº¦å é£ï¼æåæºï¼è³æºè®¾å¤çã
å表ä¸çæ¯ä¸ªåªä½è¾å ¥é½å¯ä½ä¸ºMediaTrackConstraintsä¸å¯¹åºç±»åçå¼ï¼å¦ä¸ä¸ªé³é¢è®¾å¤è¾å ¥audioDeviceInputå¯è®¾ç½®ä¸ºMediaTrackConstraintsä¸audioå±æ§çå¼
å°è¯¥constraintå¼ä½ä¸ºåæ°ä¼ å ¥å° MediaDevices.getUserMedia(constraints) ä¸ï¼ä¾¿å¯è·å¾è¯¥è®¾å¤çMediaStreamã
MediaDevices.enumerateDevices() MDNææ¡£
MediaDevices.getUserMedia() MDNææ¡£
ä½¿ç¨ MediaDevices.getDisplayMedia() æ¹æ³ï¼å¯ä»¥æ示ç¨æ·å»éæ©åæææè·å±ç¤ºçå 容æé¨åå 容ï¼å¦ä¸ä¸ªçªå£ï¼ï¼å¹¶å°å½å¶å 容å¨ä¸ä¸ª MediaStream éã
MediaDevices.getDisplayMedia() MDNææ¡£
ä½¿ç¨ HTMLCanvasElement.captureStream() æ¹æ³è¿åç CanvasCaptureMediaStream æ¯ä¸ä¸ªå®æ¶æè·çcanvaså¨ç»æµã
HTMLCanvasElement.captureStream() MDNææ¡£
CanvasCaptureMediaStream MDNææ¡£
å¯éè¿æé å½æ° MediaStream() è¿åæ°å»ºç空ç½ç MediaStream å®ä¾
MediaRecorder MDNææ¡£
如何在网页中使用js录屏插件?
探索如何仅使用JavaScript创建网页录屏插件
实现录屏功能,我们首先需要理解`getDisplayMedia` API。此API允许网站在用户同意的情况下捕获屏幕或屏幕部分的媒体流,常用于实现屏幕共享、视频会议和直播。
基本使用步骤:
1. 调用`navigator.mediaDevices.getDisplayMedia()`方法。linux源码运行该方法返回一个Promise,解析结果为包含屏幕捕获数据的MediaStream对象。
2. 通过脚手架快速生成插件框架。选择Chrome插件模板,使用脚手架快速创建项目。
3. 在浏览器右键菜单添加按钮,监听右键点击事件。选择百度首页作为触发录屏事件的中间页面。
4. 根据`isStartMediaRecorder`参数判断是否需要弹窗提示用户。
5. 开始录屏,监听结束事件,并通过a标签将录制视频下载至本地。
为了方便使用,源码改进提供插件下载地址:gitee.com/zheng_yongtao...
安装步骤:下载解压后,导入Chrome的`extensions/`目录,选择解压后的文件夹。
源码可访问:gitee.com/zheng_yongtao...
欢迎关注公众号『前端也能这么有趣』,获取更多有趣内容。
在此,感谢您的支持,我们下次再见。
Android音视频(一) Camera2 API采集数据
深入剖析Android音视频技术,bqb源码本文聚焦于Camera2 API的采集数据功能。在Android API中,Google以Camera2取代了原本的Camera,带来了显著的变革。 Camera2的核心是pipeline(管道)概念,它将Android Device与Camera Device相连,通过管道发送CaptureRequest请求,并接收CameraMetadata数据,整个过程在名为CameraCaptureSession的落地源码会话中实现。 在Camera2架构中,关键类角色包括CameraManager、CameraDevice、CameraCharacteristics、CameraRequest、CameraRequest.Builder、CameraCaptureSession以及CaptureResult。CameraManager用于管理系统摄像头,CameraDevice与硬件摄像头直接联系,fink源码CameraCaptureSession则为Android Device与Camera Device之间的管道,负责数据交流。 CameraCaptureSession是核心,用于配置捕获请求,并在预览、拍照、再次预览时使用。它在配置成功时触发onConfigured方法,配置失败时触发onConfigureFailed方法。此外,它还管理捕获回调,用于接收捕获请求的状态信息。 CameraCharacteristics描述了CameraDevice的属性,可以通过CameraManager查询。CameraRequest与CameraRequest.Builder用于描述捕获的参数设置,包括硬件配置、对焦模式、曝光模式等。CaptureResult则包含了从图像传感器捕获单个图像的结果的子集。 为了深入理解Camera2 API,Google提供了两个示例程序:android-Camera2Basic和android-Camera2Video。这些示例涵盖了预览、拍照、录像等功能,是学习入门的优秀资源。通过回顾整个流程,可以更深刻地理解Camera2 API的使用。 流程大致如下:打开摄像头
创建会话,开始预览
拍照
录像
了解MediaRecorder录制视频的相关代码后,可以更全面地掌握Camera2 API在预览、拍照和录像过程中的应用。 总之,Camera2 API的采集数据功能复杂且重要,后续会继续深入分析原理和源码,为Android开发提供更全面的技术支持。