【libdatachannel】pycharm运行streamer的信令服务及streamer与js客户端联调

news2024/9/22 1:34:24

启动py服务器

ssl必须额外指定

    # Usage: ./server.py [[host:]port] [SSL certificate file]
   

文档给出了服务的启动命令: python3 -m http.server --bind 127.0.0.1 8080

在这里插入图片描述

  • 直接运行:

在这里插入图片描述

python的信令服务

#!/usr/bin/env python
#
# Python signaling server example for libdatachannel
# Copyright (c) 2020 Paul-Louis Ageneau
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at https://mozilla.org/MPL/2.0/.

import sys
import ssl
import json
import asyncio
import logging
import websockets


logger = logging.getLogger('websockets')
logger.setLevel(logging.INFO)
logger.addHandler(logging.StreamHandler(sys.stdout))

clients = {}


async def handle_websocket(websocket, path):
    client_id = None
    try:
        splitted = path.split('/')
        splitted.pop(0)
        client_id = splitted.pop(0)
        print('Client {} connected'.format(client_id))

        clients[client_id] = websocket
        while True:
            data = await websocket.recv()
            print('Client {} << {}'.format(client_id, data))
            message = json.loads(data)
            destination_id = message['id']
            destination_websocket = clients.get(destination_id)
            if destination_websocket:
                message['id'] = client_id
                data = json.dumps(message)
                print('Client {} >> {}'.format(destination_id, data))
                await destination_websocket.send(data)
            else:
                print('Client {} not found'.format(destination_id))

    except Exception as e:
        print(e)

    finally:
        if client_id:
            del clients[client_id]
            print('Client {} disconnected'.format(client_id))


async def main():
    # Usage: ./server.py [[host:]port] [SSL certificate file]
    endpoint_or_port = sys.argv[1] if len(sys.argv) > 1 else "8000"
    ssl_cert = sys.argv[2] if len(sys.argv) > 2 else None

    endpoint = endpoint_or_port if ':' in endpoint_or_port else "127.0.0.1:" + endpoint_or_port

    if ssl_cert:
        ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
        ssl_context.load_cert_chain(ssl_cert)
    else:
        ssl_context = None

    print('Listening on {}'.format(endpoint))
    host, port = endpoint.rsplit(':', 1)

    server = await websockets.serve(handle_websocket, host, int(port), ssl=ssl_context)
    await server.wait_closed()


if __name__ == '__main__':
    asyncio.run(main())

pycharm运行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
-不知道一直在下载啥:

在这里插入图片描述

启动streamer进程

更改配置路径

在这里插入图片描述

streamer启动

在这里插入图片描述

开俩进程,都链接ok了。

在这里插入图片描述

启动js客户端

js客户端?

在这里插入图片描述

  • C:\ProgramData\anaconda3

-m http.server --bind 127.0.0.1 8080

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

C:\ProgramData\anaconda3\python.exe D:\XTRANS\pythonProject\main.py 
Hi, PyCharm
Listening on 127.0.0.1:8000
server listening on 127.0.0.1:8000
connection open
Client server connected
connection open
Client server connected
connection open
Client rm8U77FRtq connected


Client rm8U77FRtq << {"id":"server","type":"request"}
Client server >> {"id": "rm8U77FRtq", "type": "request"}
Client server << {"id":"rm8U77FRtq","sdp":"v=0\r\no=rtc 4114583284 0 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE video-stream 
audio-stream 0\r\na=group:LS video-stream audio-stream\r\na=msid-semantic:WMS *\r\na=setup:actpass\r\na=ice-ufrag:D5ZJ\r\na=ice-pwd:pXxLOzaQ05ilA/PRQcZ6Wm\r\na=ice-options:trickle\r\na=fingerprint:sha-256 71:64:22:09:B5:1D:D0:74:9F:F8:14:92:EB:B6:C1:51:5A:E2:DE:39:15:C8:14:70:94:67:D3:4C:52:D7:A4:DB\r\nm=video 20689 UDP/TLS/RTP/SAVPF 102\r\nc=IN IP4 192.168.50.65\r\na=mid:video-stream\r\na=sendonly\r\na=ssrc:1 cname:video-stream\r\na=ssrc:1 msid:stream1 video-stream\r\na=rtcp-mux\r\na=rtpmap:102 H264/90000\r\na=rtcp-fb:102 nack\r\na=rtcp-fb:102 nack pli\r\na=rtcp-fb:102 goog-remb\r\na=fmtp:102 profile-level-id=42e01f;packetization-mode=1;level-asymmetry-allowed=1\r\na=candidate:1 1 UDP 2015363327 192.168.50.65 20689 typ host\r\na=candidate:2 1 UDP 2015363583 fe80::3432:91e9:b456:fecf 24609 typ host\r\na=candidate:3 1 UDP 1679819007 121.33.115.242 20689 typ srflx raddr 192.168.50.65 rport 20689\r\na=end-of-candidates\r\nm=audio 20689 UDP/TLS/RTP/SAVPF 111\r\nc=IN IP4 192.168.50.65\r\na=mid:audio-stream\r\na=sendonly\r\na=ssrc:2 cname:audio-stream\r\na=ssrc:2 msid:stream1 audio-stream\r\na=rtcp-mux\r\na=rtpmap:111 OPUS/48000/2\r\na=fmtp:111 minptime=10;maxaveragebitrate=96000;stereo=1;sprop-stereo=1;useinbandfec=1\r\nm=application 20689 UDP/DTLS/SCTP webrtc-datachannel\r\nc=IN IP4 192.168.50.65\r\na=mid:0\r\na=sendrecv\r\na=sctp-port:5000\r\na=max-message-size:262144\r\n","type":"offer"}
Client rm8U77FRtq >> {"id": "server", "sdp": "v=0\r\no=rtc 4114583284 0 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE video-stream audio-stream 0\r\na=group:LS video-stream audio-stream\r\na=msid-semantic:WMS *\r\na=setup:actpass\r\na=ice-ufrag:D5ZJ\r\na=ice-pwd:pXxLOzaQ05ilA/PRQcZ6Wm\r\na=ice-options:trickle\r\na=fingerprint:sha-256 71:64:22:09:B5:1D:D0:74:9F:F8:14:92:EB:B6:C1:51:5A:E2:DE:39:15:C8:14:70:94:67:D3:4C:52:D7:A4:DB\r\nm=video 20689 UDP/TLS/RTP/SAVPF 102\r\nc=IN IP4 192.168.50.65\r\na=mid:video-stream\r\na=sendonly\r\na=ssrc:1 cname:video-stream\r\na=ssrc:1 msid:stream1 video-stream\r\na=rtcp-mux\r\na=rtpmap:102 H264/90000\r\na=rtcp-fb:102 nack\r\na=rtcp-fb:102 nack pli\r\na=rtcp-fb:102 goog-remb\r\na=fmtp:102 profile-level-id=42e01f;packetization-mode=1;level-asymmetry-allowed=1\r\na=candidate:1 1 UDP 2015363327 192.168.50.65 20689 typ host\r\na=candidate:2 1 UDP 2015363583 fe80::3432:91e9:b456:fecf 24609 typ host\r\na=candidate:3 1 UDP 1679819007 121.33.115.242 20689 typ srflx raddr 192.168.50.65 rport 20689\r\na=end-of-candidates\r\nm=audio 20689 UDP/TLS/RTP/SAVPF 111\r\nc=IN IP4 192.168.50.65\r\na=mid:audio-stream\r\na=sendonly\r\na=ssrc:2 cname:audio-stream\r\na=ssrc:2 msid:stream1 audio-stream\r\na=rtcp-mux\r\na=rtpmap:111 OPUS/48000/2\r\na=fmtp:111 minptime=10;maxaveragebitrate=96000;stereo=1;sprop-stereo=1;useinbandfec=1\r\nm=application 20689 UDP/DTLS/SCTP webrtc-datachannel\r\nc=IN IP4 192.168.50.65\r\na=mid:0\r\na=sendrecv\r\na=sctp-port:5000\r\na=max-message-size:262144\r\n", "type": "offer"}
Client rm8U77FRtq << {"id":"server","type":"answer","sdp":"v=0\r\no=- 1779483509754603469 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE video-stream audio-stream 0\r\na=msid-semantic: WMS\r\nm=video 9 UDP/TLS/RTP/SAVPF 102\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=candidate:3099956911 1 udp 2113937151 9d61f606-07c9-418b-bce4-ca5b9f831974.local 60327 typ host generation 0 network-cost 999\r\na=ice-ufrag:gcQq\r\na=ice-pwd:OrO4kMLd7aNCvYnsX9gk4eoN\r\na=ice-options:trickle\r\na=fingerprint:sha-256 3D:C2:6A:AE:10:D2:35:2B:E0:3E:20:59:C6:E4:88:EB:21:75:FC:6B:93:39:EF:B0:AA:DC:15:07:55:66:A9:BC\r\na=setup:active\r\na=mid:video-stream\r\na=recvonly\r\na=rtcp-mux\r\na=rtpmap:102 H264/90000\r\na=rtcp-fb:102 goog-remb\r\na=rtcp-fb:102 nack\r\na=rtcp-fb:102 nack pli\r\na=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:gcQq\r\na=ice-pwd:OrO4kMLd7aNCvYnsX9gk4eoN\r\na=ice-options:trickle\r\na=fingerprint:sha-256 3D:C2:6A:AE:10:D2:35:2B:E0:3E:20:59:C6:E4:88:EB:21:75:FC:6B:93:39:EF:B0:AA:DC:15:07:55:66:A9:BC\r\na=setup:active\r\na=mid:audio-stream\r\na=recvonly\r\na=rtcp-mux\r\na=rtpmap:111 OPUS/48000/2\r\na=fmtp:111 minptime=10;useinbandfec=1\r\nm=application 9 UDP/DTLS/SCTP webrtc-datachannel\r\nc=IN IP4 0.0.0.0\r\na=ice-ufrag:gcQq\r\na=ice-pwd:OrO4kMLd7aNCvYnsX9gk4eoN\r\na=ice-options:trickle\r\na=fingerprint:sha-256 3D:C2:6A:AE:10:D2:35:2B:E0:3E:20:59:C6:E4:88:EB:21:75:FC:6B:93:39:EF:B0:AA:DC:15:07:55:66:A9:BC\r\na=setup:active\r\na=mid:0\r\na=sctp-port:5000\r\na=max-message-size:262144\r\n"}
Client server >> {"id": "rm8U77FRtq", "type": "answer", "sdp": "v=0\r\no=- 1779483509754603469 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE video-stream audio-stream 0\r\na=msid-semantic: WMS\r\nm=video 9 UDP/TLS/RTP/SAVPF 102\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=candidate:3099956911 1 udp 2113937151 9d61f606-07c9-418b-bce4-ca5b9f831974.local 60327 typ host generation 0 network-cost 999\r\na=ice-ufrag:gcQq\r\na=ice-pwd:OrO4kMLd7aNCvYnsX9gk4eoN\r\na=ice-options:trickle\r\na=fingerprint:sha-256 3D:C2:6A:AE:10:D2:35:2B:E0:3E:20:59:C6:E4:88:EB:21:75:FC:6B:93:39:EF:B0:AA:DC:15:07:55:66:A9:BC\r\na=setup:active\r\na=mid:video-stream\r\na=recvonly\r\na=rtcp-mux\r\na=rtpmap:102 H264/90000\r\na=rtcp-fb:102 goog-remb\r\na=rtcp-fb:102 nack\r\na=rtcp-fb:102 nack pli\r\na=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:gcQq\r\na=ice-pwd:OrO4kMLd7aNCvYnsX9gk4eoN\r\na=ice-options:trickle\r\na=fingerprint:sha-256 3D:C2:6A:AE:10:D2:35:2B:E0:3E:20:59:C6:E4:88:EB:21:75:FC:6B:93:39:EF:B0:AA:DC:15:07:55:66:A9:BC\r\na=setup:active\r\na=mid:audio-stream\r\na=recvonly\r\na=rtcp-mux\r\na=rtpmap:111 OPUS/48000/2\r\na=fmtp:111 minptime=10;useinbandfec=1\r\nm=application 9 UDP/DTLS/SCTP webrtc-datachannel\r\nc=IN IP4 0.0.0.0\r\na=ice-ufrag:gcQq\r\na=ice-pwd:OrO4kMLd7aNCvYnsX9gk4eoN\r\na=ice-options:trickle\r\na=fingerprint:sha-256 3D:C2:6A:AE:10:D2:35:2B:E0:3E:20:59:C6:E4:88:EB:21:75:FC:6B:93:39:EF:B0:AA:DC:15:07:55:66:A9:BC\r\na=setup:active\r\na=mid:0\r\na=sctp-port:5000\r\na=max-message-size:262144\r\n"}

js 客户端的

SDP
Offer
v=0
o=rtc 4114583284 0 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE video-stream audio-stream 0
a=group:LS video-stream audio-stream
a=msid-semantic:WMS *
a=setup:actpass
a=ice-ufrag:D5ZJ
a=ice-pwd:pXxLOzaQ05ilA/PRQcZ6Wm
a=ice-options:trickle
a=fingerprint:sha-256 71:64:22:09:B5:1D:D0:74:9F:F8:14:92:EB:B6:C1:51:5A:E2:DE:39:15:C8:14:70:94:67:D3:4C:52:D7:A4:DB
m=video 20689 UDP/TLS/RTP/SAVPF 102
c=IN IP4 192.168.50.65
a=mid:video-stream
a=sendonly
a=ssrc:1 cname:video-stream
a=ssrc:1 msid:stream1 video-stream
a=rtcp-mux
a=rtpmap:102 H264/90000
a=rtcp-fb:102 nack
a=rtcp-fb:102 nack pli
a=rtcp-fb:102 goog-remb
a=fmtp:102 profile-level-id=42e01f;packetization-mode=1;level-asymmetry-allowed=1
a=candidate:1 1 UDP 2015363327 192.168.50.65 20689 typ host
a=candidate:2 1 UDP 2015363583 fe80::3432:91e9:b456:fecf 24609 typ host
a=candidate:3 1 UDP 1679819007 121.33.115.242 20689 typ srflx raddr 192.168.50.65 rport 20689
a=end-of-candidates
m=audio 20689 UDP/TLS/RTP/SAVPF 111
c=IN IP4 192.168.50.65
a=mid:audio-stream
a=sendonly
a=ssrc:2 cname:audio-stream
a=ssrc:2 msid:stream1 audio-stream
a=rtcp-mux
a=rtpmap:111 OPUS/48000/2
a=fmtp:111 minptime=10;maxaveragebitrate=96000;stereo=1;sprop-stereo=1;useinbandfec=1
m=application 20689 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 192.168.50.65
a=mid:0
a=sendrecv
a=sctp-port:5000
a=max-message-size:262144
Answer
v=0
o=- 1779483509754603469 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE video-stream audio-stream 0
a=msid-semantic: WMS
m=video 9 UDP/TLS/RTP/SAVPF 102
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=candidate:3099956911 1 udp 2113937151 9d61f606-07c9-418b-bce4-ca5b9f831974.local 60327 typ host generation 0 network-cost 999
a=ice-ufrag:gcQq
a=ice-pwd:OrO4kMLd7aNCvYnsX9gk4eoN
a=ice-options:trickle
a=fingerprint:sha-256 3D:C2:6A:AE:10:D2:35:2B:E0:3E:20:59:C6:E4:88:EB:21:75:FC:6B:93:39:EF:B0:AA:DC:15:07:55:66:A9:BC
a=setup:active
a=mid:video-stream
a=recvonly
a=rtcp-mux
a=rtpmap:102 H264/90000
a=rtcp-fb:102 goog-remb
a=rtcp-fb:102 nack
a=rtcp-fb:102 nack pli
a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
m=audio 9 UDP/TLS/RTP/SAVPF 111
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:gcQq
a=ice-pwd:OrO4kMLd7aNCvYnsX9gk4eoN
a=ice-options:trickle
a=fingerprint:sha-256 3D:C2:6A:AE:10:D2:35:2B:E0:3E:20:59:C6:E4:88:EB:21:75:FC:6B:93:39:EF:B0:AA:DC:15:07:55:66:A9:BC
a=setup:active
a=mid:audio-stream
a=recvonly
a=rtcp-mux
a=rtpmap:111 OPUS/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
m=application 9 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 0.0.0.0
a=ice-ufrag:gcQq
a=ice-pwd:OrO4kMLd7aNCvYnsX9gk4eoN
a=ice-options:trickle
a=fingerprint:sha-256 3D:C2:6A:AE:10:D2:35:2B:E0:3E:20:59:C6:E4:88:EB:21:75:FC:6B:93:39:EF:B0:AA:DC:15:07:55:66:A9:BC
a=setup:active
a=mid:0
a=sctp-port:5000
a=max-message-size:262144

难道是因为打开了俩客户端推流?

  • 关闭
    在这里插入图片描述

js客户端没点击stun server,成功

重来

在这里插入图片描述

  • 这里打印了Client XbVsVWZICw connected 客户端是we端?
    在这里插入图片描述

没使用stun server反而有数据了

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Data Channel
- open
< Ping
> Pong 0
< Ping
> Pong 1031
< Ping
> Pong 2033
< Ping
> Pong 3036
< Ping
> Pong 4038
< Ping
> Pong 5040
< Ping
> Pong 6044
< Ping
> Pong 7046
< Ping
> Pong 8062
< Ping
> Pong 9063
< Ping
> Pong 10066
< Ping
> Pong 11083
< Ping
> Pong 12085
< Ping
> Pong 13087
< Ping
> Pong 14089
< Ping
> Pong 15091
< Ping
> Pong 16095
< Ping
> Pong 17097
< Ping
> Pong 18098
< Ping
> Pong 19100
< Ping
> Pong 20102
< Ping
> Pong 21105
< Ping
> Pong 22143
< Ping
> Pong 23146
< Ping
> Pong 24148
< Ping
> Pong 25150
< Ping
> Pong 26151
< Ping
> Pong 27153
< Ping
> Pong 28165
< Ping
> Pong 29167
< Ping
> Pong 30170
< Ping
> Pong 31173
< Ping
> Pong 32176
< Ping
> Pong 33179
< Ping
> Pong 34180
< Ping
> Pong 35182
< Ping
> Pong 36184
< Ping
> Pong 37187
< Ping
> Pong 38189
< Ping
> Pong 39191
< Ping
> Pong 40193
< Ping
> Pong 41194
< Ping
> Pong 42196
< Ping
> Pong 43198
< Ping
> Pong 44200
< Ping
> Pong 45203
< Ping
> Pong 46206
< Ping
> Pong 47208
< Ping
> Pong 48211
< Ping
> Pong 49215
< Ping
> Pong 50217
< Ping
> Pong 51219
< Ping
> Pong 52222
< Ping
> Pong 53223
< Ping
> Pong 54225
< Ping
SDP
Offer
v=0
o=rtc 1142322650 0 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE video-stream audio-stream 0
a=group:LS video-stream audio-stream
a=msid-semantic:WMS *
a=setup:actpass
a=ice-ufrag:A9kS
a=ice-pwd:4lW6WTWIEmiHsRWWq7zKDH
a=ice-options:trickle
a=fingerprint:sha-256 A6:79:A1:45:84:A8:B3:11:B9:22:0E:59:43:5B:F5:C7:7A:B1:5F:DD:9B:72:1A:7C:F1:A2:29:AA:06:A9:D1:23
m=video 1064 UDP/TLS/RTP/SAVPF 102
c=IN IP4 192.168.50.65
a=mid:video-stream
a=sendonly
a=ssrc:1 cname:video-stream
a=ssrc:1 msid:stream1 video-stream
a=rtcp-mux
a=rtpmap:102 H264/90000
a=rtcp-fb:102 nack
a=rtcp-fb:102 nack pli
a=rtcp-fb:102 goog-remb
a=fmtp:102 profile-level-id=42e01f;packetization-mode=1;level-asymmetry-allowed=1
a=candidate:1 1 UDP 2015363327 192.168.50.65 1064 typ host
a=candidate:2 1 UDP 2015363583 fe80::3432:91e9:b456:fecf 40075 typ host
a=candidate:3 1 UDP 1679819007 121.33.115.242 1064 typ srflx raddr 192.168.50.65 rport 1064
a=end-of-candidates
m=audio 1064 UDP/TLS/RTP/SAVPF 111
c=IN IP4 192.168.50.65
a=mid:audio-stream
a=sendonly
a=ssrc:2 cname:audio-stream
a=ssrc:2 msid:stream1 audio-stream
a=rtcp-mux
a=rtpmap:111 OPUS/48000/2
a=fmtp:111 minptime=10;maxaveragebitrate=96000;stereo=1;sprop-stereo=1;useinbandfec=1
m=application 1064 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 192.168.50.65
a=mid:0
a=sendrecv
a=sctp-port:5000
a=max-message-size:262144
Answer
v=0
o=- 2887559632601353330 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE video-stream audio-stream 0
a=msid-semantic: WMS
m=video 9 UDP/TLS/RTP/SAVPF 102
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=candidate:852583563 1 udp 2113937151 0e57e5ad-5c2b-4dd9-8192-25062062de44.local 58840 typ host generation 0 network-cost 999
a=ice-ufrag:Vm7M
a=ice-pwd:GZVDXctKrULT3y1ISUvsYul2
a=ice-options:trickle
a=fingerprint:sha-256 A6:AC:9A:9D:67:FF:B6:62:AF:D0:63:E2:34:5E:23:DC:49:DD:74:3A:8B:36:14:52:CF:5E:7E:0F:A8:86:6A:A2
a=setup:active
a=mid:video-stream
a=recvonly
a=rtcp-mux
a=rtpmap:102 H264/90000
a=rtcp-fb:102 goog-remb
a=rtcp-fb:102 nack
a=rtcp-fb:102 nack pli
a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
m=audio 9 UDP/TLS/RTP/SAVPF 111
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:Vm7M
a=ice-pwd:GZVDXctKrULT3y1ISUvsYul2
a=ice-options:trickle
a=fingerprint:sha-256 A6:AC:9A:9D:67:FF:B6:62:AF:D0:63:E2:34:5E:23:DC:49:DD:74:3A:8B:36:14:52:CF:5E:7E:0F:A8:86:6A:A2
a=setup:active
a=mid:audio-stream
a=recvonly
a=rtcp-mux
a=rtpmap:111 OPUS/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
m=application 9 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 0.0.0.0
a=ice-ufrag:Vm7M
a=ice-pwd:GZVDXctKrULT3y1ISUvsYul2
a=ice-options:trickle
a=fingerprint:sha-256 A6:AC:9A:9D:67:FF:B6:62:AF:D0:63:E2:34:5E:23:DC:49:DD:74:3A:8B:36:14:52:CF:5E:7E:0F:A8:86:6A:A2
a=setup:active
a=mid:0
a=sctp-port:5000
a=max-message-size:262144
  • 一直在推流
    在这里插入图片描述
  • 服务端打印,只交互一次candidate么?

在这里插入图片描述

received 1001 (going away); then sent 1001 (going away)
Client rm8U77FRtq disconnected
connection closed
connection open
Client XbVsVWZICw connected
connection open
Client server connected
Client XbVsVWZICw << {"id":"server","type":"request"}
Client server >> {"id": "XbVsVWZICw", "type": "request"}
Client server << {"id":"XbVsVWZICw","sdp":"v=0\r\no=rtc 1142322650 0 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE video-stream audio-stream 0\r\na=group:LS video-stream audio-stream\r\na=msid-semantic:WMS *\r\na=setup:actpass\r\na=ice-ufrag:A9kS\r\na=ice-pwd:4lW6WTWIEmiHsRWWq7zKDH\r\na=ice-options:trickle\r\na=fingerprint:sha-256 A6:79:A1:45:84:A8:B3:11:B9:22:0E:59:43:5B:F5:C7:7A:B1:5F:DD:9B:72:1A:7C:F1:A2:29:AA:06:A9:D1:23\r\nm=video 1064 UDP/TLS/RTP/SAVPF 102\r\nc=IN IP4 192.168.50.65\r\na=mid:video-stream\r\na=sendonly\r\na=ssrc:1 cname:video-stream\r\na=ssrc:1 msid:stream1 video-stream\r\na=rtcp-mux\r\na=rtpmap:102 H264/90000\r\na=rtcp-fb:102 nack\r\na=rtcp-fb:102 nack pli\r\na=rtcp-fb:102 goog-remb\r\na=fmtp:102 profile-level-id=42e01f;packetization-mode=1;level-asymmetry-allowed=1\r\na=candidate:1 1 UDP 2015363327 192.168.50.65 1064 typ host\r\na=candidate:2 1 UDP 2015363583 fe80::3432:91e9:b456:fecf 40075 typ host\r\na=candidate:3 1 UDP 1679819007 121.33.115.242 1064 typ srflx raddr 192.168.50.65 rport 1064\r\na=end-of-candidates\r\nm=audio 1064 UDP/TLS/RTP/SAVPF 111\r\nc=IN IP4 192.168.50.65\r\na=mid:audio-stream\r\na=sendonly\r\na=ssrc:2 cname:audio-stream\r\na=ssrc:2 msid:stream1 audio-stream\r\na=rtcp-mux\r\na=rtpmap:111 OPUS/48000/2\r\na=fmtp:111 minptime=10;maxaveragebitrate=96000;stereo=1;sprop-stereo=1;useinbandfec=1\r\nm=application 1064 UDP/DTLS/SCTP webrtc-datachannel\r\nc=IN IP4 192.168.50.65\r\na=mid:0\r\na=sendrecv\r\na=sctp-port:5000\r\na=max-message-size:262144\r\n","type":"offer"}
Client XbVsVWZICw >> {"id": "server", "sdp": "v=0\r\no=rtc 1142322650 0 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE video-stream audio-stream 0\r\na=group:LS video-stream audio-stream\r\na=msid-semantic:WMS *\r\na=setup:actpass\r\na=ice-ufrag:A9kS\r\na=ice-pwd:4lW6WTWIEmiHsRWWq7zKDH\r\na=ice-options:trickle\r\na=fingerprint:sha-256 A6:79:A1:45:84:A8:B3:11:B9:22:0E:59:43:5B:F5:C7:7A:B1:5F:DD:9B:72:1A:7C:F1:A2:29:AA:06:A9:D1:23\r\nm=video 1064 UDP/TLS/RTP/SAVPF 102\r\nc=IN IP4 192.168.50.65\r\na=mid:video-stream\r\na=sendonly\r\na=ssrc:1 cname:video-stream\r\na=ssrc:1 msid:stream1 video-stream\r\na=rtcp-mux\r\na=rtpmap:102 H264/90000\r\na=rtcp-fb:102 nack\r\na=rtcp-fb:102 nack pli\r\na=rtcp-fb:102 goog-remb\r\na=fmtp:102 profile-level-id=42e01f;packetization-mode=1;level-asymmetry-allowed=1\r\na=candidate:1 1 UDP 2015363327 192.168.50.65 1064 typ host\r\na=candidate:2 1 UDP 2015363583 fe80::3432:91e9:b456:fecf 40075 typ host\r\na=candidate:3 1 UDP 1679819007 121.33.115.242 1064 typ srflx raddr 192.168.50.65 rport 1064\r\na=end-of-candidates\r\nm=audio 1064 UDP/TLS/RTP/SAVPF 111\r\nc=IN IP4 192.168.50.65\r\na=mid:audio-stream\r\na=sendonly\r\na=ssrc:2 cname:audio-stream\r\na=ssrc:2 msid:stream1 audio-stream\r\na=rtcp-mux\r\na=rtpmap:111 OPUS/48000/2\r\na=fmtp:111 minptime=10;maxaveragebitrate=96000;stereo=1;sprop-stereo=1;useinbandfec=1\r\nm=application 1064 UDP/DTLS/SCTP webrtc-datachannel\r\nc=IN IP4 192.168.50.65\r\na=mid:0\r\na=sendrecv\r\na=sctp-port:5000\r\na=max-message-size:262144\r\n", "type": "offer"}


Client XbVsVWZICw << {"id":"server","type":"answer","sdp":"v=0\r\no=- 2887559632601353330 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE video-stream audio-stream 0\r\na=msid-semantic: WMS\r\nm=video 9 UDP/TLS/RTP/SAVPF 102\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=candidate:852583563 1 udp 2113937151 0e57e5ad-5c2b-4dd9-8192-25062062de44.local 58840 typ host generation 0 network-cost 999\r\na=ice-ufrag:Vm7M\r\na=ice-pwd:GZVDXctKrULT3y1ISUvsYul2\r\na=ice-options:trickle\r\na=fingerprint:sha-256 A6:AC:9A:9D:67:FF:B6:62:AF:D0:63:E2:34:5E:23:DC:49:DD:74:3A:8B:36:14:52:CF:5E:7E:0F:A8:86:6A:A2\r\na=setup:active\r\na=mid:video-stream\r\na=recvonly\r\na=rtcp-mux\r\na=rtpmap:102 H264/90000\r\na=rtcp-fb:102 goog-remb\r\na=rtcp-fb:102 nack\r\na=rtcp-fb:102 nack pli\r\na=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:Vm7M\r\na=ice-pwd:GZVDXctKrULT3y1ISUvsYul2\r\na=ice-options:trickle\r\na=fingerprint:sha-256 A6:AC:9A:9D:67:FF:B6:62:AF:D0:63:E2:34:5E:23:DC:49:DD:74:3A:8B:36:14:52:CF:5E:7E:0F:A8:86:6A:A2\r\na=setup:active\r\na=mid:audio-stream\r\na=recvonly\r\na=rtcp-mux\r\na=rtpmap:111 OPUS/48000/2\r\na=fmtp:111 minptime=10;useinbandfec=1\r\nm=application 9 UDP/DTLS/SCTP webrtc-datachannel\r\nc=IN IP4 0.0.0.0\r\na=ice-ufrag:Vm7M\r\na=ice-pwd:GZVDXctKrULT3y1ISUvsYul2\r\na=ice-options:trickle\r\na=fingerprint:sha-256 A6:AC:9A:9D:67:FF:B6:62:AF:D0:63:E2:34:5E:23:DC:49:DD:74:3A:8B:36:14:52:CF:5E:7E:0F:A8:86:6A:A2\r\na=setup:active\r\na=mid:0\r\na=sctp-port:5000\r\na=max-message-size:262144\r\n"}



Client server >> {"id": "XbVsVWZICw", "type": "answer", "sdp": "v=0\r\no=- 2887559632601353330 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE video-stream audio-stream 0\r\na=msid-semantic: WMS\r\nm=video 9 UDP/TLS/RTP/SAVPF 102\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=candidate:852583563 1 udp 2113937151 0e57e5ad-5c2b-4dd9-8192-25062062de44.local 58840 typ host generation 0 network-cost 999\r\na=ice-ufrag:Vm7M\r\na=ice-pwd:GZVDXctKrULT3y1ISUvsYul2\r\na=ice-options:trickle\r\na=fingerprint:sha-256 A6:AC:9A:9D:67:FF:B6:62:AF:D0:63:E2:34:5E:23:DC:49:DD:74:3A:8B:36:14:52:CF:5E:7E:0F:A8:86:6A:A2\r\na=setup:active\r\na=mid:video-stream\r\na=recvonly\r\na=rtcp-mux\r\na=rtpmap:102 H264/90000\r\na=rtcp-fb:102 goog-remb\r\na=rtcp-fb:102 nack\r\na=rtcp-fb:102 nack pli\r\na=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:Vm7M\r\na=ice-pwd:GZVDXctKrULT3y1ISUvsYul2\r\na=ice-options:trickle\r\na=fingerprint:sha-256 A6:AC:9A:9D:67:FF:B6:62:AF:D0:63:E2:34:5E:23:DC:49:DD:74:3A:8B:36:14:52:CF:5E:7E:0F:A8:86:6A:A2\r\na=setup:active\r\na=mid:audio-stream\r\na=recvonly\r\na=rtcp-mux\r\na=rtpmap:111 OPUS/48000/2\r\na=fmtp:111 minptime=10;useinbandfec=1\r\nm=application 9 UDP/DTLS/SCTP webrtc-datachannel\r\nc=IN IP4 0.0.0.0\r\na=ice-ufrag:Vm7M\r\na=ice-pwd:GZVDXctKrULT3y1ISUvsYul2\r\na=ice-options:trickle\r\na=fingerprint:sha-256 A6:AC:9A:9D:67:FF:B6:62:AF:D0:63:E2:34:5E:23:DC:49:DD:74:3A:8B:36:14:52:CF:5E:7E:0F:A8:86:6A:A2\r\na=setup:active\r\na=mid:0\r\na=sctp-port:5000\r\na=max-message-size:262144\r\n"}

打开stun server 测试

关闭streamer

在这里插入图片描述

重新刷新js客户端,所以这个是js客户端id

在这里插入图片描述

重新启动streamer

在这里插入图片描述

选中使用STUN服务

在这里插入图片描述

带STUN服务器也可以

在这里插入图片描述

在这里插入图片描述

Data Channel
- open
< Ping
> Pong 0
< Ping
> Pong 1002
< Ping
> Pong 2003
< Ping
> Pong 3007
< Ping
> Pong 4009
< Ping
> Pong 5012
< Ping
> Pong 6014
< Ping
> Pong 7016
< Ping
> Pong 8019
< Ping
> Pong 9022
< Ping
> Pong 10025
< Ping
> Pong 11027
< Ping
> Pong 12028
< Ping
> Pong 13031
< Ping
> Pong 14032
< Ping
> Pong 15034
< Ping
> Pong 16036
< Ping
> Pong 17038
< Ping
> Pong 18043
< Ping
> Pong 19044
< Ping
> Pong 20046
< Ping
> Pong 21048
< Ping
> Pong 22050
< Ping
> Pong 23053
< Ping
> Pong 24060
< Ping
> Pong 25062
< Ping
> Pong 26064
< Ping
> Pong 27065
< Ping
> Pong 28067
< Ping
> Pong 29069
< Ping
> Pong 30073
< Ping
> Pong 31077
< Ping
> Pong 32080
< Ping
> Pong 33082
< Ping
> Pong 34084
< Ping
> Pong 35086
< Ping
> Pong 36088
< Ping
> Pong 37090
< Ping
> Pong 38131
< Ping
> Pong 39133
< Ping
> Pong 40135
< Ping
> Pong 41137
< Ping
> Pong 42139
< Ping
> Pong 43147
< Ping
> Pong 44151
< Ping
> Pong 45152
< Ping
> Pong 46155
< Ping
> Pong 47157
< Ping
> Pong 48162
< Ping
SDP
Offer
v=0
o=rtc 387591248 0 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE video-stream audio-stream 0
a=group:LS video-stream audio-stream
a=msid-semantic:WMS *
a=setup:actpass
a=ice-ufrag:IB4l
a=ice-pwd:A4aznKP0dOjp9Bi+TwoPlr
a=ice-options:trickle
a=fingerprint:sha-256 AA:E9:F3:67:AC:D8:1F:EC:C1:BC:3B:B5:E9:EC:D0:87:64:8C:0D:01:99:4C:BB:DF:59:D9:82:A4:8A:7B:C0:7A
m=video 22521 UDP/TLS/RTP/SAVPF 102
c=IN IP4 192.168.50.65
a=mid:video-stream
a=sendonly
a=ssrc:1 cname:video-stream
a=ssrc:1 msid:stream1 video-stream
a=rtcp-mux
a=rtpmap:102 H264/90000
a=rtcp-fb:102 nack
a=rtcp-fb:102 nack pli
a=rtcp-fb:102 goog-remb
a=fmtp:102 profile-level-id=42e01f;packetization-mode=1;level-asymmetry-allowed=1
a=candidate:1 1 UDP 2015363327 192.168.50.65 22521 typ host
a=candidate:2 1 UDP 2015363583 fe80::3432:91e9:b456:fecf 27866 typ host
a=candidate:3 1 UDP 1679819007 121.33.115.242 22521 typ srflx raddr 192.168.50.65 rport 22521
a=end-of-candidates
m=audio 22521 UDP/TLS/RTP/SAVPF 111
c=IN IP4 192.168.50.65
a=mid:audio-stream
a=sendonly
a=ssrc:2 cname:audio-stream
a=ssrc:2 msid:stream1 audio-stream
a=rtcp-mux
a=rtpmap:111 OPUS/48000/2
a=fmtp:111 minptime=10;maxaveragebitrate=96000;stereo=1;sprop-stereo=1;useinbandfec=1
m=application 22521 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 192.168.50.65
a=mid:0
a=sendrecv
a=sctp-port:5000
a=max-message-size:262144
Answer
v=0
o=- 2996011111635307684 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE video-stream audio-stream 0
a=msid-semantic: WMS
m=video 9 UDP/TLS/RTP/SAVPF 102
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=candidate:2075770023 1 udp 2113937151 927c8399-8f4f-4e82-8cba-952e205505ab.local 53410 typ host generation 0 network-cost 999
a=ice-ufrag:DVfF
a=ice-pwd:FNlbZj2c6moUy6MYW1v870nP
a=ice-options:trickle
a=fingerprint:sha-256 D9:76:B2:58:D9:99:7B:10:30:56:D7:7A:EF:1C:C5:97:C3:28:74:6B:35:9D:50:86:7F:F3:E8:CA:D0:83:39:67
a=setup:active
a=mid:video-stream
a=recvonly
a=rtcp-mux
a=rtpmap:102 H264/90000
a=rtcp-fb:102 goog-remb
a=rtcp-fb:102 nack
a=rtcp-fb:102 nack pli
a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
m=audio 9 UDP/TLS/RTP/SAVPF 111
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:DVfF
a=ice-pwd:FNlbZj2c6moUy6MYW1v870nP
a=ice-options:trickle
a=fingerprint:sha-256 D9:76:B2:58:D9:99:7B:10:30:56:D7:7A:EF:1C:C5:97:C3:28:74:6B:35:9D:50:86:7F:F3:E8:CA:D0:83:39:67
a=setup:active
a=mid:audio-stream
a=recvonly
a=rtcp-mux
a=rtpmap:111 OPUS/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
m=application 9 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 0.0.0.0
a=ice-ufrag:DVfF
a=ice-pwd:FNlbZj2c6moUy6MYW1v870nP
a=ice-options:trickle
a=fingerprint:sha-256 D9:76:B2:58:D9:99:7B:10:30:56:D7:7A:EF:1C:C5:97:C3:28:74:6B:35:9D:50:86:7F:F3:E8:CA:D0:83:39:67
a=setup:active
a=mid:0
a=sctp-port:5000
a=max-message-size:262144

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/673861.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

需求分析引言:架构漫谈(二)非功能性需求

上一篇文章&#xff0c;简要介绍了架构的概念和架构设计流程&#xff0c;并简单介绍了需求分析的内容&#xff0c; 并在最后指出&#xff1a;需求分析的产出物&#xff0c;要包括非功能性需求&#xff0c;常见的非功能性需求如下&#xff1a; 完成任务的速度结果的精度操作的安…

MySQL实战解析底层---为什么表数据删掉一半,表文件大小不变

目录 前言 参数innodb_file_per_table 数据删除流程 重建表 Online 和 inplace 前言 数据库占用空间太大&#xff0c;我把一个最大的表删掉了一半的数据&#xff0c;怎么表文件的大小还是没变&#xff1f;这与数据库表的空间回收有关这里还是针对MySQL中应用最广泛的InnoD…

结构型设计模式07-享元模式

&#x1f9d1;‍&#x1f4bb;作者&#xff1a;猫十二懿 ❤️‍&#x1f525;账号&#xff1a;CSDN 、掘金 、个人博客 、Github &#x1f389;公众号&#xff1a;猫十二懿 享元模式 1、享元模式介绍 享元模式是一种结构型设计模式&#xff0c;旨在**通过共享对象来减少内存使…

CSS弹性布局常用设置

目录 一、单位元素 二、弹性容器 三、常用属性 三、项目实战效果 一、单位元素 vm 1vm 为视口的1% vh 视口高的1% vmin 参照长边 vmax 参照长边 rem 等比缩放 需要设置最外层盒子html设置vw 根字号html的--- font-- 1vm 去适配 初始化 //初始化*{padding: 0;margin: 0}//…

机器学习笔记 - 通过一个例子来快速理解自注意力机制/缩放点积注意力机制

一、一个简单的示例 请看下面的例句:A dog ate the food because it was hungry(一只狗吃了食物,因为它很饿) 例句中的代词it(它)可以指代dog(狗)或者food(食物)。当读这段文字的时候,我们自然而然地认为it指代的是dog,而不是food。但是当计算机模型在面对这两种选…

CVPR首个大模型研讨会顺利召开,吸引超1000支队伍参与文心大模型国际比赛

CVPR 作为计算机视觉和模式识别领域的世界级学术顶会&#xff0c;不仅是学者们展示前沿科技成果的学术会议&#xff0c;也是企业界探索前沿应用的一大平台。近年来&#xff0c;随着大模型技术的爆发式发展&#xff0c;基于大模型技术的创新应用正逐步在产业界释放出巨大价值空间…

网易云信陈丽:做泛娱乐出海新浪潮中的坚实助力者

6 月 16 日下午&#xff0c;在 PAGC 2023 泛娱乐出海论坛上&#xff0c;网易智企副总经理、网易云信总经理陈丽分享了对全球化出海的趋势洞察和未来展望&#xff0c;并介绍了网易云信在帮助泛娱乐出海业务增长方面的探索和实践。 陈丽表示&#xff0c;网易云信志在成为中国开发…

STM32开发——非标协议(DH11+LCD1602)

1.STM32分文件实现代码 编译的总文件夹dh11andlcd&#xff0c;C文件不能跨文件夹查找&#xff0c;新增的分文件&#xff0c;需要都放调用的文件夹下 C文件和H文件理解&#xff1a;H文件是门脸&#xff0c;放在前面给别人的&#xff0c;别人一看就知道有什么东西。C是给内部人用…

记录--新的HTML标签 :search

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 本文介绍了一种新的HTML元素搜索方法&#xff0c;并提供了一个实用的工具来帮助开发者快速找到所需的元素。这对于那些需要处理大量HTML元素的开发者来说是非常有用的。文章还通过提供一些常见元素的用…

AutoSAR系列讲解(入门篇)1.1-AutoSAR的发展史

一、AutoSAR成员 大体可以分为核心成员、高级成员和发展成员&#xff0c;可以打开AutoSAR官网的成员的介绍界面 所以有兴趣的小伙伴可以稍微了解一下&#xff0c;仅作了解就行&#xff0c;不是什么重要的知识 还有一张大家经常能看见的成员图&#xff0c;如下 二、AutoSAR历史…

国潮之美丨土家族西兰姑娘续写千年非遗传奇

光脚丫&#xff0c;童年时期的行为艺术 还记得儿时的夏夜&#xff0c;姥爷总说&#xff1a;“娃儿呀&#xff0c;光着脚在地上跑&#xff0c;接地气些”。那时只觉得脱掉鞋袜顿时轻松自在&#xff0c;从坡上冲到坡下&#xff0c;几个伙伴乐此不疲。后来长大了&#xff0c;穿着…

盘点一个Python网络爬虫过验证码的问题(方法一)

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 低眉信手续续弹&#xff0c;说尽心中无限事。 大家好&#xff0c;我是皮皮。 一、前言 前几天在Python最强王者群【鶏啊鶏。】问了一个Python网络爬虫的…

SSH连接异常:从迷茫到石破天惊的解决之道

文章目录 零&#xff1a;前言一&#xff1a;SSH1.1 SSH的连接类型、方式和端口1.2 常见端口及其类型 二&#xff1a;解决SSH连接异常第一步&#xff1a;欣赏报错&#xff0c;顺藤摸瓜第二步&#xff1a;异常窥探&#xff0c;摸石过河第三步&#xff1a;问题确定&#xff0c;斩首…

测试技术体系

目录&#xff1a; 软件测试分类分层测试体系 1.软件测试分类 软件测试的分类_安全性测试属于功能测试吗_阿瞒有我良计15的博客-CSDN博客 1.单元测试&#xff08;Unit Testing&#xff09;&#xff1a;单元测试是指对软件的最小可测试单元进行测试&#xff0c;例如一个函数、一…

Cell — 新“出芽”方法为疫苗开发带来优势

在疫苗学中&#xff0c;基于mRNA向体内递送抗原编码基因同基于纳米颗粒向体内递送抗原在应对具有挑战性的病原体方面都显示出巨大的前景。本期的《Cell》中&#xff0c;Hoffmann等人将两种方法相结合&#xff0c;通过调节被许多病毒劫持的相同细胞代谢通路来增强SARS-CoV-2疫苗…

【UCOS-III】自我学习笔记→第27讲→优先级翻转

文章目录 前言实验步骤1.复制二值信号量工程&#xff0c;添加task2和task3&#xff0c;修改任务服务函数名称2.修改开始任务&#xff0c;任务1以及任务2、3的内容3.查看串口现象![在这里插入图片描述](https://img-blog.csdnimg.cn/efa5ee2d92b54fe8be5a419adcf92ead.png) 测试…

STM32速成笔记—DMA

文章目录 一、什么是DMA二、DMA有什么作用三、STM32的DMA3.1 DMA请求3.2 DMA通道3.3 仲裁器 四、DMA配置4.1 DMA配置步骤4.2 DMA结构体成员 五、DMA配置程序5.1 ADC1初始化程序5.2 DMA初始化程序 一、什么是DMA DMA全程Direct Memory Access&#xff0c;即直接存储器访问。简单…

如何保护阿里云服务器免受DDoS攻击和恶意访问?有哪些防护措施?

如何保护阿里云服务器免受DDoS攻击和恶意访问&#xff1f;有哪些防护措施&#xff1f;   [本文由阿里云代理商[聚搜云]撰写]   随着互联网技术的不断发展&#xff0c;网络安全问题日益严峻&#xff0c;保护服务器免受DDoS攻击和恶意访问成为了每个企业和网站建设者的关注重…

W3B x Sui Hacker House|深入了解Sui和Move语言

Web3 Builders&#xff08;W3B&#xff09;作为Hacker House的践行者&#xff0c;将于6月23日&#xff08;周五&#xff09;早上8点&#xff08;GMT8&#xff09;举办首期 W3B x Sui Hacker House 系列活动分享会。本期活动邀请到Sui联合创始人Sam Blackshear&#xff08;Move语…

【机器学习】机器学习的基本概念

机器学习是我们现在接触人工智能领域首先要去掌握的知识&#xff0c;下面是我学习记录的一些关于机器学习的基础、常见的概念和定义。 目录 机器学习定义 机器学习过程 假设关系 训练数据 损失函数&#xff08;正向传播&#xff09; 优化&#xff08;反向传播&#xff0…