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

news2024/12/26 22:29:29

一 信令服务:启动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了。

在这里插入图片描述

三. python启动8080http服务器

http://127.0.0.1:8080/

js客户端?

在这里插入图片描述

  • C:\ProgramData\anaconda3

-m http.server --bind 127.0.0.1 8080

在这里插入图片描述

PS D:\XTRANS\thunderbolt\ayame\ZHB_LIB_DATACHANNEL\project\libdc\dcConsoleApp> C:\ProgramData\anaconda3\python.exe -m http.server --bind 127.0.0.1 8080
Serving HTTP on 127.0.0.1 port 8080 (http://127.0.0.1:8080/) ...

启动js客户端

在这里插入图片描述

运行

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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/675925.html

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

相关文章

图的广度优先遍历和深度优先遍历

前言&#xff1a;在上一篇博客我们学习了图的基本操作&#xff0c;包括图的建立、结点插入与删除等操作&#xff0c;怎么判断我们建立的图是否正确&#xff0c;很简单把它输出出来就是&#xff0c;但是如何输出它&#xff0c;这就是图的遍历问题了。 一.图的遍历 图的遍历是指…

初识C语言的static关键字(修饰局部变量、全局变量和函数)

目录 学习目标 1.static 修饰局部变量 2.static 修饰全局变量 3.static 修饰函数 学习目标 static修饰局部变量static修饰全局变量static修饰函数 1.static 修饰局部变量 &#xff08;1&#xff09;static修饰局部变量后&#xff0c;这时局部变量就是静态的局部变量。 &am…

光模块安规认证简介

背景 认证是指由认证机构证明产品、服务、管理体系符合相关技术规范的强制性要求或者标准的合格评定活动。其中产品认证是通过对产品的不同层级认证实现各级材料的可追溯性。认证按照内容分类大致包括&#xff1a;安全、电磁兼容&#xff08;EMC&#xff09;和环保等。按照必要…

PyTorch 中通道在最后的内存格式(beta)

PyTorch 中通道在最后的内存格式&#xff08;beta&#xff09; 什么是通道在最后 通道在最后的内存格式是在保留内存尺寸的顺序中对 NCHW 张量进行排序的另一种方法。 通道最后一个张量的排序方式使通道成为最密集的维度&#xff08;又称为每像素存储图像&#xff09;。 例如…

Java——《面试题——SpringCloud》

前文 java——《面试题——基础篇》 Java——《面试题——JVM篇》 Java——《面试题——多线程&并发篇》 Java——《面试题——Spring篇》 Java——《面试题——SpringBoot篇》 Java——《面试题——MySQL篇》​​​​​​ 目录 前文 1、什么是SpringCloud 2、什…

实战:NPMYARN构建工具实践-2023.6.22(测试成功)

实战&#xff1a;NPM&YARN构建工具实践-2023.6.22(测试成功) 目录 推荐文章 https://www.yuque.com/xyy-onlyone/aevhhf?# 《玩转Typora》 实验环境 gitlab/gitlab-ce:15.0.3-ce.0 jenkins/jenkins:2.346.3-2-lts-jdk11 openjdk 11.0.18 [rootDevops6 ~]#npm -v 6.14.12…

智能汽车 | 整车控制器(VCU)系统框图,功能拆解及供应商排名

摘要&#xff1a; 随着新能源EE架构的迭代及控制单元集成度越来越高&#xff0c;VCU的功能可能会被拆解到中央控制器域控制器&#xff0c;或者拆解到多合一的控制单元&#xff1b; VCU&#xff08;Vehicle Control Unit&#xff09;即整车控制器&#xff0c;是新能源汽车控制系…

JavaSE基础语法--static成员

假设我们现在有一个场景&#xff0c;定义一个学生类。 class Student{private String name;private int age;private int classroom_num;public Student(String name, int age, int classroom_num) {this.name name;this.age age;this.classroom_num classroom_num;} } pu…

翻筋斗觅食策略改进灰狼算法(IGWO)

目录 一、动态扰动因子策略 二、翻筋斗觅食策略 三、改进灰狼算法收敛曲线图 灰狼优化算法存在收敛的不合理性等缺陷&#xff0c;目前对GWO算法的收敛性改进方式较少&#xff0c;除此之外&#xff0c;当GWO迭代至后期&#xff0c;所有灰狼个体都逼近狼、狼、狼&#xff0c;…

HarmonyOS学习路之开发篇—多媒体开发(媒体会话管理开发)

一、媒体会话管理开发 AVSession是一套媒体播放控制框架&#xff0c;对媒体服务和界面进行解耦&#xff0c;并提供规范的通信接口&#xff0c;使应用可以自由、高效地在不同的媒体之间完成切换。 约束与限制 在使用完AVSession类后&#xff0c;需要及时进行资源释放。播放器类…

Linux常用命令——ftpshut命令

在线Linux命令查询工具 ftpshut 在指定的时间关闭FTP服务器 补充说明 功能说明&#xff1a;在指定的时间关闭ftp服务器。本指令提供系统管理者在设置的时间关闭FTP服务器&#xff0c;且能在关闭之前发出警告信息通知用户。关闭时间若设置后为"none"&#xff0c;则…

【实战项目开发技术分享】如何解决机器人运动不平稳的问题

文章目录 前言一、机器人设计的考虑因素二、控制算法的优化三、传感器改进四、实时监测与调试五、总结前言 机器人的运动平稳性对于其在各种应用中的成功执行任务至关重要。当机器人在执行任务过程中出现不稳定的运动,可能导致任务失败、损坏周围环境或甚至危及人员安全。因此…

ChatGPT在能源行业的预测场景:智能能源管理和异常检测的未来趋势

第一章&#xff1a;引言 能源是现代社会发展的关键驱动力之一&#xff0c;然而&#xff0c;传统的能源管理方法存在许多挑战&#xff0c;如能源浪费、供需不平衡以及能源异常等。为了应对这些挑战&#xff0c;智能能源管理系统逐渐崭露头角。在本文中&#xff0c;我们将探讨Ch…

基于Java+Swing实现仿QQ屏幕截图工具

基于JavaSwing实现仿QQ屏幕截图工具 一、系统介绍二、功能展示三、其它1.其他系统实现四.获取源码 一、系统介绍 实现能够实现对屏幕的随机截取&#xff0c;复制&#xff0c;保存以及添加文字等操作&#xff0c;便于用户对数据的处理。 该软件的功能&#xff1a; &#xff08…

I/O设备与主机信息传送的方式(程序查询方式,程序中断方式,DMA方式)

一.程序查询方式 CPU和I/O设备串行工作&#xff0c;CPU连接I/O设备和内存&#xff0c;CPU需要等待&#xff0c;效率很低 &#xff08;由CPU通过程序不断查询IO设备是否已经做好准备&#xff0c;从而控制IO设备与主机交换信息&#xff09; 二.程序中断方式&#xff1a; 中断&…

前端Vue自定义数字输入框 带加减按钮的数字输入框组件

前端Vue自定义数字输入框 带加减按钮的数字输入框组件&#xff0c; 下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13163 效果图如下&#xff1a; # cc-numbox #### 使用方法 使用方法 <!-- title: 标题 isSetMax: 是否设置最…

手把手叫你学会搭建FreeRTOS工程文件

手把手教你学会搭建FreeRTOS工程文件 一.序言二.提取文件2.1 Source文件夹2.2 portble文件夹2.3 Demo 文件夹 三.建立FreeRTOS工程3.1 新建FreeRTOS目录3.2 移植src文件夹3.3 移植port文件夹3.4 添加include文件夹3.5 提取FreeRTOSConfig.h文件3.5.1 拷贝FreeRTOSConfig.h文件 …

前端Vue自定义简单实用轮播图封装组件 快速实现轮播图

前端Vue自定义简单实用轮播图封装组件 快速实现轮播图&#xff0c; 下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13153 效果图如下&#xff1a; # cc-mySwiper #### 使用方法 使用方法 <!-- 自定义轮播图 swiperArr: 轮播数…

Day5——数据库基础2-SQL查询语句

网络安全学习笔记Day5 SQL查询语句&#xff08;重在实操&#xff01;&#xff01;&#xff01;&#xff09; 回顾1.中英文符号混淆2.数据库的操作流程&#xff08;回顾mysql相关语句&#xff09;3.“everything”工具 学习目标1.查询数据基本语法形式基本查询语句表单查询where…

ubuntu20下yolov4训练多目标实战

1、安装nvidia驱动和cudnn,不熟悉的小伙伴请移步&#xff1a;Ubuntu20.04安装NVIDIA显卡驱动、CUDA、CUDNN及突破NVENC并发限制_ubuntu20.04安装显卡驱动_BetterJason的博客-CSDN博客 2、编译opencv&#xff0c;不熟悉的小伙伴请移步:ubuntu20.04 和centos8平台opencv4.5.3&am…