问题标签 [mediastreamtrack]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
video - 通过 WebRTC 分辨率更改问题的 HTML5 视频和 MediaStreamTrack 流
我正在使用 HTML5 视频标签通过 WebRTC 协议显示传入的实时视频流。基本上,当客户端接收到远程MediaStreamTrack时,它被分配给HTMLMediaElement.srcObject。直播出现在视频中,到目前为止一切都很好。但是,如果在某些时候接收/发送客户端遇到网络连接降级,那么 WebRTC 降级实现会通过降低流的分辨率来启动。发生的情况是视频变得“损坏”,尽管您仍然可以区分其中的一些噪音。这是它的外观的屏幕截图:
在控制台上调试MediaStreamTrack
显示分辨率是如何变化的:
但有趣的部分来了。似乎原生 HTML5 视频播放器仅在某些分辨率下存在问题。在这种情况下,它适用于 720x540px 和 1440x1080px,但不适用于 1080x810xpx。我在网上浏览了原生 HTML5 视频播放器规范,但没有关于支持的分辨率的内容。我不确定我将如何着手解决这个问题。我有以下想法:
- 也许尝试不同的 HTML5 视频播放器,例如 JW Player。
- 防止在流上发生特定的分辨率,但我在 WebRTC 实现中没有看到任何选项。
video - 取消暂停后如何检测 MediaStreamTrack 是否有“真实”数据?
如果您使用and then暂停然后取消暂停MediaStreamTrack ,则在标志为真和实际获取真实数据之间会有轻微的延迟。.enabled = false
.enabled = true
.enabled
如果您将流传递给视频元素,您会首先看到黑屏,然后是实际的相机数据。
我想知道是否有办法检测“真实”流何时可用。我可以使用画布定期从流中拍摄快照,并使用类似的东西检查数据.getImageData
,但这似乎很昂贵。
一旦数据可用,是否会触发事件?
注意:这个问题看起来很相似,但不是。对于远程连接,它建议发送信号事件让另一端知道相机何时暂停/取消暂停。我正在做本地处理,所以我只想知道什么时候有有用的数据通过。
javascript - 如何选择当前正在播放的 MediaStreamTrack?
我有MediaStream
1 个音轨和 2 个视频轨。此流是通过将来自的音频和视频轨道与来自navigator.mediaDevices.getUserMedia
的视频轨道相结合而创建的navigator.mediaDevices.getDisplayMedia
。
此时,camStream
有 1 个音轨和 2 个视频轨。
我有一个 HTML 元素<video id="local-video"></video>
,通过设置 srcObject 属性来播放流:
问题是我无法选择正在播放的曲目。camStream 视频轨道总是在 screenStream 视频轨道上播放。有没有一种方法可以让我将两个视频轨道都保留在流中,但选择视频元素中当前正在播放的轨道?
到目前为止,唯一可行的方法是从流中删除一个视频轨道,以便另一个可以播放,但我想将两个视频轨道都保留在流中,以便我可以黑白切换它们。
javascript - 如何发现不再调用 MediaRecorder.ondataavailble 的问题?
我正在使用 捕获用户的音频和视频,navigator.mediaDevices.getUserMedia()
然后使用MediaRecorder
它ondataavailable
在本地存储该视频和音频 blob 以便稍后上传。
现在我正在处理一个问题,由于某种原因,ondataavailable
在录音中途停止调用。我不知道为什么,也没有收到任何错误的警报。那么首先,有谁知道为什么会发生这种情况以及如何捕捉错误?
其次,我试图重现。通过做这样的事情。
并记录流
然后我尝试手动终止流以希望通过执行来重现发生的任何问题
Nowondataavailable
不再被调用,但没有任何 onended 事件被调用。录制仍在进行中,并且local_media_stream
仍然处于活动状态。
如果我也杀死音频
现在local_media_stream
未激活,但仍然没有调用事件,告诉我流停止并且记录器仍在运行,但从ondatavailable
未被调用。
我能做些什么?我想知道本地流正在成功录制,如果没有收到警报,我至少可以通知用户录制不再保存。
webrtc - 正确拆解 WebRTC RTCPeerConnection
我尝试做一个简单的 WebRTC p2p 视频聊天浏览器应用程序。我设置了一个信号服务器,并让两个对等方进行所有的SDP
握手ICE
。我的一些代码片段:
对等点完成后,我执行以下操作:
我只是关闭了 RTCPeerConnection。但我没有看到在onremovetrack
另一个对等方上被触发。
关闭对等点以便通知和onremovetrack
触发另一个对等点的正确方法是什么?
webrtc - WebRTC 需要时间将 OutboundRTPVideoStream 帧高度和帧宽度与 RTCInboundRTPVideoStream 匹配
即使约束[使用 MediaStreamTrack.applyConstraints()] 到位,接收端的 MediaStreamTrack 分辨率较低,它会在 10-20 秒内慢慢适应实际帧大小。有没有办法一直匹配源和目标视频轨道帧大小?附加来自 webrtc 内部的统计信息。
javascript - 我可以在它到达另一个应用程序之前在本地捕获和编辑音频流吗?
下午好!在这个实现中,我将电子和 javascript 与 webRTC 一起使用。
为了详细说明这个问题,我了解从 StreamHandler 获取流并调用 mediaDevices.getUserMedia 之前我在做什么。获得该流后,我已成功添加 AudioContext 以创建过滤器、调整增益等。我听说这些更改也发生在 audioDestination 设备上。所以到目前为止一切都很好。所以我现在的问题是我如何将编辑后的音频流放回它可能去的地方?一个具体的例子是,假设我捕获了主麦克风的流,并且我想在音频使其不和谐、抽搐等之前调整增益。
如果我想象我认为的过程
Mic Input ---> Grab Stream ---> Edit Stream ---> Continue output to 3rd party app。
但似乎发生的是流创建了一个单独的通道,并且只会在我自己的输出设备上播放,因为我没有目的地可以从指向我的音频已经指向的位置的设备中进行选择。请理解我仍在弄清楚这一切是如何运作的。我也很乐意更改或编辑问题以更好地满足标准,请告诉我。
更新:我正在添加我的代码的构造函数和 updateStream 函数。构造函数是我从本地机器获取媒体流的地方,当单击按钮以激活音频更改并将其播放到输出时,将调用更新流。我卡住的地方是,当我通过耳机或扬声器播放更新时会发出声音,但我不知道如何让流返回并通过上面提到的应用程序播放。
javascript - CanvasCaptureMediaStreamTrack 的额外属性
我有一个画布,我想让它成为流并通过 webrtc 将其发送给另一个用户。我可以获取它的流并在视频标签中显示它。
正如您在 track Object 中看到的,有一个名为 的属性canvas
。它会在我的代码中导致错误,因为我使用了一个不需要MediaStreamTrack
包含MediaStreamTrack
属性canvas
的库。有没有办法摆脱该canvas
属性?
我已经尝试删除该属性,但它没有用。而且我也使用了下面的代码,但仍然无法正常工作。
我认为这CanvasCaptureMediaStreamTrack
是一个只读变量。我能做些什么?
android - MadiaStreamTrack 缩放功能未在 Android WebView 中返回,但适用于 Chrome
如本文所示,navigator.mediaDevices.getUserMedia()
如下调用应授予缩放权限:
此外,正如同一篇文章中所述:
MediaStreamTrack.getCapabilities()
返回具有支持的功能和范围或允许值的字典。相应地,MediaStreamTrack.getSettings()
返回当前设置。
有了上面的信息,我已经在 Chrome 和 Android WebView 中的 Android 设备上进行了一些测试。这些测试是使用同一篇文章中的这个演示进行的。
结果如下:
铬合金:
网络视图:
正如您在“检测到的功能”和“检测到的设置”图像中看到的那样,在 Web 视图中,缩放功能在 Chrome 中显示时未显示。
我做错了什么还是Android WebView上有错误?