“怎么做?”;“关于需要谈判的问题”;尝试使用gstreamer webrtc进行流式传输时是否工作?

“怎么做?”;“关于需要谈判的问题”;尝试使用gstreamer webrtc进行流式传输时是否工作?,webrtc,gstreamer,Webrtc,Gstreamer,webrtc管道如何获取有关其对等方的任何信息 这就是我所假设的on_needed回调的作用 def start_pipeline(self): self.pipe = Gst.parse_launch(PIPELINE_DESC) self.webrtc = self.pipe.get_by_name('sendrecv') **self.webrtc.connect('on-negotiation-needed', self.on_negoti

webrtc管道如何获取有关其对等方的任何信息

这就是我所假设的on_needed回调的作用

def start_pipeline(self):
        self.pipe = Gst.parse_launch(PIPELINE_DESC)
        self.webrtc = self.pipe.get_by_name('sendrecv')
        **self.webrtc.connect('on-negotiation-needed', self.on_negotiation_needed)**
        self.webrtc.connect('on-ice-candidate', self.send_ice_candidate_message)
        self.webrtc.connect('pad-added', self.on_incoming_stream)
        self.pipe.set_state(Gst.State.PLAYING)
我看到它有on_negotiation_所需的回调,但它不清楚元素变量来自何处?我看了看这里:这里:我仍然困惑于这个谈判是如何运作的?据我所知,有2个(或更多)对等点,它们都必须连接到信令服务器,然后其中一个必须创建一个报价

我等待来自(我假设)信令服务器上gstreamer webrtcbin的消息:

print (websocket.remote_address)
#get message from client
message = await asyncio.wait_for(websocket.recv(), 3000)
当管线开始时,我得到这个错误:

('192.168.11.138', 44120)
Error in connection handler
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/websockets/protocol.py", line 674, in transfer_data
    message = yield from self.read_message()
  File "/usr/local/lib/python3.6/dist-packages/websockets/protocol.py", line 742, in read_message
    frame = yield from self.read_data_frame(max_size=self.max_size)
  File "/usr/local/lib/python3.6/dist-packages/websockets/protocol.py", line 815, in read_data_frame
    frame = yield from self.read_frame(max_size)
  File "/usr/local/lib/python3.6/dist-packages/websockets/protocol.py", line 884, in read_frame
    extensions=self.extensions,
  File "/usr/local/lib/python3.6/dist-packages/websockets/framing.py", line 99, in read
    data = yield from reader(2)
  File "/usr/lib/python3.6/asyncio/streams.py", line 672, in readexactly
    raise IncompleteReadError(incomplete, n)
asyncio.streams.IncompleteReadError: 0 bytes read on a total of 2 expected bytes

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/websockets/server.py", line 169, in handler
    yield from self.ws_handler(self, path)
  File "signaling_server.py", line 34, in signaling
    message = await asyncio.wait_for(websocket.recv(), 3000)
  File "/usr/lib/python3.6/asyncio/tasks.py", line 358, in wait_for
    return fut.result()
  File "/usr/local/lib/python3.6/dist-packages/websockets/protocol.py", line 434, in recv
    yield from self.ensure_open()
  File "/usr/local/lib/python3.6/dist-packages/websockets/protocol.py", line 646, in ensure_open
    ) from self.transfer_data_exc
websockets.exceptions.ConnectionClosed: WebSocket connection is closed: code = 1006 (connection closed abnormally [internal]), no reason
我不能说Python(不幸的是,无法使GStreamer的Python绑定在Windows上工作),但是,演示可以从C#开始工作(我刚刚检查过)

首先,您应该将浏览器连接到,并获取“我们的id”值

您的Python Gstreamer应该连接到wss://webrtc.nirbheek.in:8443,并使用浏览器中的Id值

浏览器将从GStreamer获取测试图像流,GStreamer应用程序将从浏览器获取网络摄像头图像

嗯,汤姆

以下是一个屏幕截图:


谢谢!我能够让它工作并将其集成到我的开源项目中。但我对gstreamer connect函数很好奇。它是怎么知道我的websocket的?它不知怎么地钩住了它吗?它不知道websocket。Websocket用于发送信号。Gstreamer(即WebRtc)使用SDP。