我有一个来自 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 流转换为 …
我正在尝试使用 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。
chromium ×1
electron ×1
javascript ×1
python ×1
python-3.3 ×1
tk-toolkit ×1
tkinter ×1
webrtc ×1