我正在尝试从动态创建的视频元素捕获流。当我获取视频元素并尝试 videoElement.captureStream() 时,Firefox 返回videoElement.captureStream 不是一个函数,但相同的代码可以在 Chrome 上运行。问题似乎 Firefox 在动态创建视频元素方面存在问题。我尝试突变观察者来检测新添加的视频元素并访问 captureStream 方法,但没有运气我发布了下面的代码示例(我正在使用 adapter.js for WebRTC https://webrtc.github.io/adapter/adapter-latest .js )
(function (win) {
var listeners = [],
doc = win.document,
MutationObserver = win.MutationObserver || win.WebKitMutationObserver,
observer;
function ready(selector, fn) {
listeners.push({
selector: selector,
fn: fn
});
if (!observer) {
observer = new MutationObserver(check);
observer.observe(doc.documentElement, {
childList: true,
subtree: true
});
}
check();
}
function check() {
for (var i = 0, len = listeners.length, listener, elements; i < len; i++) { …Run Code Online (Sandbox Code Playgroud) 我目前正在构建一个 WebRTC 应用程序,并希望收集一些统计数据来评估我的解决方案。我感兴趣的一项指标是接收到的音频(和视频)流的当前带宽。我能够在chrome://webrtc-internals/(OPUS)找到当前使用的编解码器,但我无法找到有关流的当前质量/带宽的数字(例如128kbit/s)。
我已经在 RTCPeerConnection 对象中搜索了此类数字,但还没有找到。XXX.RTCconnection.getRemoteStreams()[0].getAudioTracks()[0].getConstraints()只返回
{
deviceId: {},
echoCancellation: {},
facingMode: {},
frameRate: {},
height: {},
mediaSource: "camera",
mozAutoGainControl: {},
mozNoiseSuppression: {},
viewportHeight: {},
viewportOffsetX: {},
...
}
Run Code Online (Sandbox Code Playgroud)
仅包含有关视频流的信息(有趣的是我请求了音频流),没有带宽详细信息。上例中的数组没有其他流。您知道我需要在哪里查找 MediaStream 的当前质量/带宽吗?
我正在阅读有关VAD的webrtc源代码,我对代码感到困惑
typedef struct WebRtcVadInst VadInst;
Run Code Online (Sandbox Code Playgroud)
我搜索了所有关于WebRtcVadInst的代码,没有找到任何与struct WebRtcVadInst相关的来源。另一方面,我确实找到了一些关于VadInst 的信息。
typedef struct VadInstT_ {
int vad;
int32_t downsampling_filter_states[4];
...
...
int init_flag;
} VadInstT;
Run Code Online (Sandbox Code Playgroud)
和
VadInst* WebRtcVad_Create() {
VadInstT* self = (VadInstT*)malloc(sizeof(VadInstT));
WebRtcSpl_Init();
self->init_flag = 0;
return (VadInst*)self;
}
Run Code Online (Sandbox Code Playgroud)
并且,它编译成功。
它是如何工作的?
这是 sdpOffer:
提供
v=0
o=- 1514366952141741 1 在 IP4主机x
s=安装点 99
t=0 0
a=组:捆绑视频
a=msid-语义:WMS janus
m=视频 9 UDP/TLS/RTP/SAVPF 96
c=IN IP4主机x
a=只发送
a=中:视频
a=rtcp-复用器
a=ice-ufrag:7joH
a=ice-pwd:bdRP/kVha/3vSoGEvstOxK
a=冰选项:滴流
a=指纹:sha-256 D2:B9:31:8F:DF:24:D8:0E:ED:D2:EF:25:9E:AF:6F:B8:34:AE:53:9C:E6:F3 :8F:F2:64:15:FA:E8:7F:53:2D:38
a=设置:actpass
a=rtpmap:96 H264/90000
a=fmtp:96 配置文件级别 ID=420029;打包模式=1;sprop-参数集=Z00AH5Y1QWgUNNwEBAQI,aO48gA==
a=rtcp-fb:96 nack
a=rtcp-fb:96 古格-雷姆
a=ssrc:2233529852 cname:janusvideo
a=ssrc:2233529852 msid:janus janusv0
a=ssrc:2233529852 mslabel:janus
a=ssrc:2233529852 标签:janusv0
a=candidate:1 1 udp 2013266431主机42772 典型主机
a=候选:2 1 udp 2013266431 hostx 54166 典型主机
a=candidate:1 2 udp 2013266430主机54469 典型主机
a=候选:2 2 udp 2013266430 hostx 49119 典型主机 …
您好,我正在尝试将 iphone 摄像头广播到 html 画布。最近,当我在 ipad pro 上测试时,WebRTC 接缝工作正常,但是当我测试 HTML 和 js 文件的脚本时,它不显示广播,只显示黑屏,有人面临这个问题吗?
我在ubuntu 16.04上创建了一个https服务,并使用我的iphone上的浏览器访问index.html页面
这是我的代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Demo</title>
<link rel="stylesheet" href="css/main.css">
</head>
<body>
<h3>Selfie</h3>
<div class="booth">
<video id="video" width="640" height="360" autoplay></video>
</div>
<script src="js/video.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这是 JavaScript
(function() {
var video = document.getElementById('video');
/* Setting up the constraint */
var facingMode = "user"; // Can be 'user' or 'environment' to access back
or front camera (NEAT!)
var constraints = {
audio: false,
video: { …Run Code Online (Sandbox Code Playgroud) 我正在使用 webrtc 示例代码从 Android 设备流式传输到网页。示例代码不具备切换摄像头的功能。我试图解决它,但失败了。该示例使用 VideoCapturerAndroid 类,我发现切换相机使用不同类型的所有建议。
示例的主要部分如下所示:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video_chat);
ButterKnife.bind(this);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Bundle extras = getIntent().getExtras();
if (extras == null || !extras.containsKey(Constants.USER_NAME)) {
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
Toast.makeText(this, "Need to pass username to VideoChatActivity in intent extras (Constants.USER_NAME).", Toast.LENGTH_SHORT).show();
finish();
return;
}
this.username = extras.getString(Constants.USER_NAME, "");
this.mCallStatus = (TextView) findViewById(R.id.call_status);
// First, we initiate the PeerConnectionFactory with our application context and some options.
PeerConnectionFactory.initializeAndroidGlobals(
this, // Context
true, // Audio Enabled …Run Code Online (Sandbox Code Playgroud) 我正在使用peer.js 和webrtc 开发一个跨平台应用程序。我正在使用科尔多瓦,人行横道。另外我正在使用 webrtc 适配器(https://github.com/webrtc/adapter)
我的代码基于 webrtc-crosswalk 示例。(https://github.com/crosswalk-project/crosswalk-samples)
我想更改流的视频源而不创建新的呼叫。我的方法是删除流的轨道并添加其他摄像机的新轨道。结果是本地视频显示正常,但被叫远端视频卡顿。
可能我犯了一个非常基本的错误,但我找不到解决方案。我期待您的答复和解决方案。
我的主要代码文件已附后。
//Notwendig, um die Dialogfunktion zu aktivieren
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
console.log(navigator.notification);
// Now safe to use device APIs
}
document.addEventListener('DOMContentLoaded', function () {
// PeerJS server location
var SERVER_IP = '172.20.37.147';
var SERVER_PORT = 9000;
// DOM elements manipulated as user interacts with the app
var messageBox = document.querySelector('#messages');
var callerIdEntry = document.querySelector('#caller-id');
var connectBtn = document.querySelector('#connect');
var recipientIdEntry = document.querySelector('#recipient-id');
var dialBtn …Run Code Online (Sandbox Code Playgroud) 请帮我!我在https://github.com/pchab/AndroidRTC中使用了这个示例,将视频和音频从 Android 设备流式传输到其他 Android 设备。在这个示例中,他们使用了 2 个库:libjingle_peerConnection 和 SocketIo 客户端,但我不这样做知道如何将流数据保存为 h.264 格式吗?
这可能听起来很愚蠢,但我已经搜索了很长时间如何做到这一点,而我得到的只是更加困惑:/我制作了一个 webRTC 视频聊天应用程序,它工作得很好,我什么现在需要的是,当另一个 Android 设备想要呼叫第一个 Android 设备时,如何从另一个 Android 设备上拨打电话,我的意思是到目前为止,我必须在两台设备上输入相同的房间名称才能进行视频通话,但这在实际中并不实用生活中其他对等方或设备用户如何知道有人想给他打电话,我已经阅读过有关 SIP 的内容,但似乎不是我要找的内容,请帮忙。
我正在尝试使用 WebRTC 制作屏幕共享应用程序。我有可以从相机获取和共享视频流的代码。我需要修改它以通过 MediaProjection API 获取视频。基于这篇文章,我修改了代码以使用 org.webrtc.ScreenCapturerAndroid,但没有显示视频输出。只有黑屏。如果我使用相机,一切正常(我可以在屏幕上看到相机输出)。有人可以检查我的代码并指出我正确的方向吗?我已经被这个问题困住了三天了。
\n\n这是我的代码:
\n\npublic class MainActivity extends AppCompatActivity {\n\n private static final String TAG = "VIDEO_CAPTURE";\n\n private static final int CAPTURE_PERMISSION_REQUEST_CODE = 1;\n private static final String VIDEO_TRACK_ID = "video_stream";\n\n PeerConnectionFactory peerConnectionFactory;\n\n SurfaceViewRenderer localVideoView;\n ProxyVideoSink localSink;\n\n VideoSource videoSource;\n VideoTrack localVideoTrack;\n\n EglBase rootEglBase;\n\n boolean camera = false;\n\n @Override\n protected void onCreate(Bundle savedInstanceState) {\n super.onCreate(savedInstanceState);\n setContentView(R.layout.activity_main);\n\n rootEglBase = EglBase.create();\n localVideoView = findViewById(R.id.local_gl_surface_view);\n\n localVideoView.init(rootEglBase.getEglBaseContext(), null);\n\n startScreenCapture();\n }\n\n @TargetApi(21)\n private void startScreenCapture() {\n MediaProjectionManager mMediaProjectionManager …Run Code Online (Sandbox Code Playgroud)