小编Dan*_*och的帖子

WebRTC:是否可以从 RGBA ArrayBuffer 创建 VideoStreamTrack?

我有一个来自 Electron 应用程序内的 Redis 回调的 RGBA 流:

redis.on('messageBuffer', function(channel, frame) {
  if (channel.toString() !== REDIS_EVENT) return;

});
Run Code Online (Sandbox Code Playgroud)

为了通过 WebRTC 将其作为视频传送,我创建了一个 Canvas,并使用HTMLCanvasElement.captureStream()将其用作 WebRTC 连接的源流

let canvasCtx = myCanvas.getContext('2d');
let stream = myCanvas.captureStream(10);

redis.on('messageBuffer', function(channel, frame) {
  if (channel.toString() !== REDIS_EVENT) return;

  let imageData = canvasCtx.createImageData(myCanvas.width, myCanvas.height);
  imageData.data.set(frame);
  canvasCtx.putImageData(imageData, 0, 0);
});
Run Code Online (Sandbox Code Playgroud)

stream是一个CanvasCaptureMediaStream对象,这里是我如何使用它作为 WebRTC 流源:

function createWebRTC(stream, clientId) {
  let pc = new RTCPeerConnection();

  // ...

  pc.addStream(stream);
}
Run Code Online (Sandbox Code Playgroud)

这种方法是有效的,但它绝对没有效率,因为我每次都必须在画布中绘制它才能提供MediaStream对象。

是否有更好的方法将 RGBA 流转换为 …

javascript chromium webrtc electron

6
推荐指数
0
解决办法
409
查看次数

为什么 tk.IntVar 不适用于第二个 tk 窗口?

我正在尝试使用 tk.Scale 来更改 tk.IntVar。我可以在第一个 tk 窗口上执行此操作,但不能在第二个窗口上执行此操作。为什么?

看看这个可怜的样本:

import tkinter as tk

# main root
root = tk.Tk()

myvar = tk.IntVar()

def on_change(*args):
   print("Value changed to {}".format(myvar.get())) 

myvar.trace("w", on_change)

sc = tk.Scale(root, from_=1, to=10, orient=tk.HORIZONTAL, length=320, \
    variable=myvar)
sc.grid()

# second root
root2 = tk.Tk()

myvar2 = tk.IntVar()

def on_change2(*args):
   print("Value2 changed to {}".format(myvar2.get())) 

myvar2.trace("w", on_change2)

sc2 = tk.Scale(root2, from_=1, to=10, orient=tk.HORIZONTAL, length=320, \
    variable=myvar2)
sc2.grid()

root.mainloop()
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我在 Mac 上使用 python 3.3。

python tk-toolkit tkinter python-3.3

2
推荐指数
1
解决办法
184
查看次数