首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何优雅的监听MediaStream媒体流被释放?

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

作者头像
liuzhen007
发布2021-06-29 15:49:40
发布2021-06-29 15:49:40
1.5K00
代码可运行
举报
文章被收录于专栏:流媒体音视频流媒体音视频
运行总次数:0
代码可运行

目录

问题

解决

一、属性法

二、事件法

彩蛋


问题

大家知道通过getUserMedia接口可以拿到浏览器对应本地的音视频媒体流,那么我们有什么方法可以监听这路媒体流被释放了或者不可用了呢?


解决

其实,如果我们想直接在MediaStream类上下手是不可能,因为MediaStream没有专门的监听事件。找遍了文档,好不容易发现一个和end相关的还是一个属性值,而且马上就要废弃了。具体内容可以如下参考链接:

https://developer.mozilla.org/en-US/docs/Web/API/MediaStream

因此,想实现这个功能我们需要转换一下思路。我们知道MediaStream本身会包含若干个MediaStreamTrack,可能是视频track,也可能是音频track,或者二者都有,而这些MediaStreamTrack实例就有类似的停止监听事件了。我们可以通过MediaStreamTrack的end事件来实现这个功能。

目前有两种方法可以监听MediaStreamTrack结束不可用了。


一、属性法

通过MediaStreamTrack实例的onended属性来实现。

代码语言:javascript
代码运行次数:0
运行
复制
track.onended = function() {
  let statusElem = document.getElementById("statusId");
  statusElem.src = "/stopped.png";
}

二、事件法

通过MediaStreamTrack实例的ended监听事件来实现。

代码语言:javascript
代码运行次数:0
运行
复制
track.addEventListener('ended', () => {
  let statusElem = document.getElementById("statusId");
  statusElem.src = "/stopped.png";
})

基于上述内容,我们就可以知道MediaStream有没有被释放,只需要判断其对应的track是不是都被释放了就可以了。是不是很巧妙?!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 玩转音视频 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题
  • 解决
  • 一、属性法
  • 二、事件法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档