首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏音视频自留地

    WebRTC研究:MediaStream概念以及定义

    本篇文章主要介绍下MediaStream API中一些概念,方便理解内部代码如何处理。 MediaStream 相关API定义在源码api\media_stream_interface.h中。 里面主要涉及这4个概念:source,sink,meidatrack,mediastream。 MediaStreamTrack与MediaStream MediaStream API中有两个重要组成:MediaStreamTrack以及MediaStream。 一个MediaStream可包含audio track 与video track。类似我们平时的多媒体文件,可包含音频与视频。 一个MediaStream对象包含0或多个MediaStreamTrack对象。MediaStream中的所有MediaStreamTrack对象在渲染时必须同步。

    3.4K20编辑于 2021-12-20
  • 来自专栏流媒体音视频

    如何优雅的监听MediaStream媒体流被释放?

    ---- 解决 其实,如果我们想直接在MediaStream类上下手是不可能,因为MediaStream没有专门的监听事件。 具体内容可以如下参考链接: https://developer.mozilla.org/en-US/docs/Web/API/MediaStream 因此,想实现这个功能我们需要转换一下思路。 我们知道MediaStream本身会包含若干个MediaStreamTrack,可能是视频track,也可能是音频track,或者二者都有,而这些MediaStreamTrack实例就有类似的停止监听事件了 statusElem = document.getElementById("statusId"); statusElem.src = "/stopped.png"; }) 基于上述内容,我们就可以知道MediaStream

    1.7K20发布于 2021-06-29
  • 来自专栏赵康的日常专栏

    使用 MediaStream Recording API 和 Web Audio API 在浏览器中处理音频(未完待续)

    使用 MediaStream Recording API 和 Web Audio API 在浏览器中处理音频 1. 核心概念 2.1 MediaStream 一个MediaStream是一个媒体内容的流。一个流中可能包含几个轨道:比如若干视频轨道和若干音频轨道。 可以把它想象成这样: 或者,更形象点: 2.2 MediaRecorder MediaRecorder是MediaStream Recording API的核心接口,用来进行媒体录制。 我们可以形象地把它想象成录音机: new MediaRecorder(stream, options) ==> 这里的 stream 就是一个 MediaStream。 它表示将要录制的流。 ) => { /*...*/ }) 然后就可以从麦克风拿到MediaStream

    1.8K20编辑于 2023-10-17
  • 来自专栏Web技术布道师

    WebRTC:一个视频聊天的简单例子

    ; // 添加音视频流 mediaStream.getTracks().forEach(track => { localPeer.addTrack(track, mediaStream); } mediaStream.getTracks().forEach(track => { localPeer.addTrack(track, mediaStream); }); 远端可以通过监听 ontrack ; mediaStream.getTracks().forEach(track => { pc.addTrack(track, mediaStream); // pc.addTransceiver(track, {streams: [mediaStream]}); // 这个也可以 }); // pc.addStream(mediaStream) : [mediaStream]}); }); // pc.addStream(mediaStream); // 目前这个也可以,不过接口后续会废弃 } function createPeerConnection

    3.3K30发布于 2019-08-06
  • 来自专栏小鑫同学编程历险记

    WebRTC 之媒体流与轨道

    MediaStream.getVideoTracks 获取所有视频轨道通过 MediaStream.getAudioTracks 获取所有音频轨道 Video.captureStream fps 帧率 MediaStream API: 序号 属性 描述 1 active 当 MediaStream 处于激活状态时返回 true,反之返回 false。 4 oninactive 当 MediaStream 对象变为不活动状态时触发该事件。 5 onremovetrack 当有轨道从 MediaStreamTrack 移除时触发该事件。 2 clone() 返回一份 MediaStream 的克隆后的对象(新 id) 3 getAudioTracks() 从 MediaStream 得到音频 MediaStreamTrack 列表 4 6 getVideoTracks() 从 MediaStream 得到视频 MediaStreamTrack 列表 7 removeTracks() 从 MediaStream 删除作为参数的 MediaStreamTrack

    1.7K10编辑于 2022-12-26
  • 来自专栏海怪的编程小屋

    用JS轻松实现一个录音、录像、录屏工具库

    然后将 mediaStream 传给 mediaRecorder,通过 ondataavailable 来存放当前流中的 blob 数据。 stop() mediaStream.current?. = useRef<MediaStream>(); const audioStream = useRef<MediaStream>(); const mediaRecorder = useRef getAudioTracks().forEach(audioTrack => mediaStream.current?. const toggleMute = (isMute: boolean) => { mediaStream.current?.

    1.8K40编辑于 2022-03-29
  • 来自专栏音视频直播技术专家

    通过WebRTC进行实时通信-从webcam获取视频流

    ){ localStream = mediaStream; localVideo.srcObject = mediaStream; } function handleLocalMediaStreamError 如果成功,返回MediaStreamMediaStream 将被多媒体元素的 srcObject 属性所使用: navigator.mediaDevices.getUserMedia(mediaStreamConstraints) . function gotLocalMediaStream(mediaStream) { localVideo.srcObject = mediaStream; } contrains 参数允许你指定你要得到的媒体 function gotLocalMediaStream(mediaStream) { localVideo.srcObject = mediaStream; } 点滴 传递给 getUserMedia

    3.1K10发布于 2020-04-02
  • 来自专栏互联网软件技术

    js调用摄像头

    ("video"); 28 29 // 这里介绍新的方法,返回一个 Promise对象 30 // 这个Promise对象返回成功后的回调函数带一个 MediaStream navigator.mediaDevices.getUserMedia(constraints); 36 // 成功调用 37 promise.then(function (MediaStream ) { 38 /* 使用这个MediaStream */ 39 video.srcObject = MediaStream; 40 video.play(); 41 console.log(MediaStream); // 对象 42 }) 43 //

    22K70发布于 2018-10-24
  • 来自专栏码客

    Webrtc及WEB端音视频设备获取及流处理

    方法: MediaStream.getTracks() 返回流中所有的MediaStreamTrack列表。 MediaStream.getVideoTracks() 返回流中 kind 属性为”video”的MediaStreamTrack列表。 MediaStream.addTrack() 存储传入参数 MediaStreamTrack的一个副本。 MediaStream.clone() 返回这个MediaStream 对象的克隆版本。返回的版本会有一个新的 ID。 返回给定 ID 的轨道。 MediaStream.removeTrack() 移除作为参数传入的 MediaStreamTrack。

    3.4K11编辑于 2022-09-23
  • 来自专栏zayyo前端

    视频通话进阶:React Hooks和屏幕共享,让你在虚拟世界中畅享面对面的交流

    MediaStream API:我们使用 MediaStream 来处理音频和视频播放。 = new MediaStream(); mediaStream.addTrack(webcamStream.track); return mediaStream; } } = new MediaStream(); mediaStream.addTrack(micStream.track); micRef.current.srcObject = = useMemo(() => { if (screenShareOn && screenShareStream) { const mediaStream = new MediaStream (); mediaStream.addTrack(screenShareStream.track); return mediaStream; } }, [screenShareStream

    1.7K20编辑于 2023-10-14
  • 来自专栏coding个人笔记

    WEBRTC 实现浏览器拍照

    button onclick="snapPhoto()">拍照</button> <button onclick="closePhoto()">关闭</button> <script> let mediaStream let video = document.getElementById('cameraVideo'); video.srcObject = stream; mediaStream download(Date.now().toString() + '.png', file); }); } function closePhoto () { if (mediaStream == null) { if (mediaStream.stop) { mediaStream.stop(); } }; if (track !

    74120编辑于 2023-09-01
  • 来自专栏码农帮派

    利用WebRTC录制采样的音视频

    document.querySelector('video'); navigator.mediaDevices.getUserMedia(mediaStreamConstrains).then((mediaStream ) => { localVideo.srcObject = mediaStream; // 将mediaStream挂载到window上 window.mediaStream = mediaStream; }).catch((error) => { console.log('[Error]getUSerMedia:', error); let mediaRecorder = null; try { mediaRecorder = new MediaRecorder(window.mediaStream

    1.9K20发布于 2021-01-12
  • 来自专栏农历七月廿一

    原生JS调取PC端摄像头源码记录

    document.getElementById("video"); let promise = navigator.mediaDevices.getUserMedia(constraints); promise.then((MediaStream ) => { /** * @desc MediaStream 返回参数 * active: true * id: "ykCZTVor0KNVypRFZW8dFSwrFd9QuihhWmqA * onaddtrack: null * oninactive: null * onremovetrack: null */ console.info(MediaStream ); video.srcObject = MediaStream; video.play(); }).catch((error) => { console.info

    2.3K10发布于 2020-05-28
  • 来自专栏写代码和思考

    通过 web 录制视频(摄像头)并上传

    **MediaDevices.getUserMedia()** 会提示用户给予使用媒体输入的许可,媒体输入会产生一个MediaStream,里面包含了请求的媒体类型的轨道。 在用户通过提示允许的情况下,打开系统上的相机或屏幕共享和/或麦克风,并提供 MediaStream 包含视频轨道和/或音频轨道的输入。 MediaStream 接口是一个媒体内容的流.。 录制 MediaRecorder() 构造函数会创建一个对指定的 MediaStream 进行录制的 MediaRecorder 对象 var mediaRecorder = new MediaRecorder _mediaStream) return; console.log("# 关闭数据流"); _mediaStream.getTracks().forEach(function ( track) { track.stop(); }); _mediaStream = undefined; _mediaRecorder = undefined

    2.6K30发布于 2021-04-28
  • 来自专栏前端儿

    JS打开摄像头并截图上传

    console.log(err); }); } 第一个参数中指示需要使用视频(video)或音频(audio),更多参见文档 第二个参数中指示调用成功后的回调,其中带一个参数(MediaStream ),在旧版本中可以直接通过调用MediaStream.stop() 来关闭摄像头,不过在新版之中已废弃。 需要使用MediaStream.getTracks()[index].stop() 来关闭相应的Track 第三个参数指示调用失败后的回调 新版本位于navigator.mediaDevices 对象下 () 返回的Tracks数组是按第一个参数倒序排列的 比如现在定义了 { video: true, audio: true } 想关闭摄像头,就需要调用MediaStream.getTracks ()[1].stop(); 同理,0对应于audio的track 使用createObjectURL 将MediaStream写入video标签,就能够存储实时的媒体流数据(也可以方便的实时查看画面)

    7K10发布于 2018-09-03
  • 来自专栏实时音视频WebRTC

    实时音视频WebRTC介绍

    数据对象 数据对象指的是浏览器能够管理的输入/输出设备,因为 WebRTC 的设备管理方式是浏览器先将输入/输出设备抽象为 MediaStream 对象,再通过 API 将 MediaStream 数据通道 数据通道就是用于传输 MediaStream 对象的通道,MediaStream 对象可以是音频、视频、文件、消息等等二进制数据。 对象),通过 getLocalStream 拿到 MediaStream 对象后将其赋值给页面的

    9.2K40发布于 2019-09-26
  • 来自专栏TopFE

    给测试小妹做了一个js版屏幕录制工具iREC,她用后竟说喜欢我

    navigator.mediaDevices.getDisplayMedia() 该方法返回一个promise,并提示用户选择显示器或显示器的一部分(例如窗口)以捕获为MediaStream 以便共享或记录 这个MediaStream可以直接使用 html中的video 标签显示出具体的内容。 ​ 于是一个清晰的思路就出现了。 = mediaStream 这里需要注意一个细节,要显示媒体流的内容我们必须将媒体流设置在video的srcObject 属性上。 MediaRecorder() 构造函数会创建一个对指定的 MediaStream 进行录制的 MediaRecorder 对象。 该构造函数接受二个参数,一是媒体流MediaStream,第二个参数是配置参数,指定将媒体流转化为什么格式的内容,如mp4,音频的比特率,视频的比特率。

    2K20编辑于 2022-01-24
  • 来自专栏coding个人笔记

    WebRTC实现一个网页在线录制视频

    其实就用到了两个个API: navigator.mediaDevices.getDisplayMedia:提示用户去选择和授权捕获展示的内容或部分内容(如一个窗口)在一个MediaStream 里。 然后,这个媒体流可以通过使用 MediaStream Recording API 被记录或者作为WebRTC 会话的一部分被传输。 MediaRecorder:MediaStream Recording API 由一个主接口MediaRecorder组成,这个接口负责的所有工作是从MediaStream获取数据并将其传递给你进行处理

    2.5K30编辑于 2022-12-02
  • 来自专栏码农帮派

    利用WebRTC给自己拍照

    document.querySelector('video'); navigator.mediaDevices.getUserMedia(mediaStreamConstrains).then((mediaStream ) => { localVideo.srcObject = mediaStream; // 将mediaStream挂载到window上 window.mediaStream = mediaStream; }).catch((error) => { console.log('[Error]getUSerMedia:', error);

    1.2K20发布于 2021-01-12
  • 来自专栏写代码和思考

    示例:在H5中使用video结合canvas来录制视频和上传

    stopBtn"); _mediaRecorder.stop(); //停止录像 }); // 初始化录制器 var setRecorder = function(mediaStream alert("当前浏览器不支持该编码类型"); return; } // 初始化 录像 mediaRecorder _mediaStream = _theCanvas.captureStream(60); // 60 FPS recording console.log(_mediaStream); _mediaRecorder = new MediaStreamRecorder(_mediaStream); _mediaRecorder.mimeType = VIDEO_FORMAT; _mediaRecorder.ondataavailable

    3.6K20发布于 2021-04-29
领券