局域网-webrtc
amazon-kinesis-video-streams-webrtc-sdk-c
- SRTP(Secure Real-time Transport Protocol):用于在 WebRTC 中传输实时的音频、视频和数据,提供了加密、消息认证和完整性保护等功能,确保数据在传输过程中的安全性和可靠性。
- ICE(Interactive Connectivity Establishment):用于在客户端之间建立连接,它通过收集和交换双方的网络地址信息,找到一条合适的通信路径,使数据能够在不同网络环境下的设备之间进行传输,比如在 NAT(网络地址转换)后面的设备之间建立连接。
- STUN(Session Traversal Utilities for NAT):主要用于帮助客户端发现自己在 NAT 后的公网地址和端口,让客户端能够知道如何被外部网络访问,ICE 在工作过程中会借助 STUN 来获取相关网络地址信息。
- TURN(Traversal Using Relay NAT):当 ICE 和 STUN 无法直接建立连接时,TURN 作为中继服务器,帮助客户端转发数据,使通信能够顺利进行,比如在一些复杂的网络环境中,客户端之间无法直接通信,就需要 TURN 服务器来中转数据。
amazon-kinesis-video-streams-webrtc-sdk-c webrtc库函数的调用逻辑<大概>
retStatus = createSampleConfiguration(pChannelName, SIGNALING_CHANNEL_ROLE_TYPE_MASTER, TRUE, TRUE, &pSampleConfiguration,&signal_infor);- 函数功能:该函数用于创建一个示例配置对象 pSampleConfiguration,此对象包含了 Kinesis Video Streams WebRTC 会话所需的各项配置信息。
- 参数解释
- pChannelName:信令通道的名称,用于标识通信的通道。
- SIGNALING_CHANNEL_ROLE_TYPE_MASTER:指定信令通道的角色类型为 MASTER,在 WebRTC 通信中,不同角色有不同的职责和行为。
- 两个 TRUE:推测可能分别表示启用某些功能,比如启用日志记录、启用某些通信特性等,具体含义需参考函数的实现。
- &pSampleConfiguration:指向示例配置对象的指针,函数会将创建好的配置信息存储在该对象中。
- &signal_infor:指向信号信息结构体的指针,用于传递一些与信号相关的配置信息。
- 返回值:返回一个状态码 retStatus,STATUS_SUCCESS 表示配置创建成功,其他状态码表示创建过程中出现错误。
retStatus = createFileLogger(FILE_LOGGING_BUFFER_SIZE, MAX_NUMBER_OF_LOG_FILES, (PCHAR) FILE_LOGGER_LOG_FILE_DIRECTORY_PATH, TRUE, TRUE, NULL);- 函数功能:创建一个文件日志记录器,用于将程序运行过程中的日志信息记录到文件中。
- 参数解释
- FILE_LOGGING_BUFFER_SIZE:日志记录缓冲区的大小,用于存储待写入文件的日志信息。
- MAX_NUMBER_OF_LOG_FILES:允许创建的最大日志文件数量,用于控制日志文件的数量。
- (PCHAR) FILE_LOGGER_LOG_FILE_DIRECTORY_PATH:日志文件存储的目录路径。
- 两个 TRUE:可能分别表示启用日志滚动(当日志文件达到一定大小时创建新文件)和启用日志时间戳等功能。
- NULL:可能是一个可选的日志回调函数指针,这里传入 NULL 表示不使用自定义的回调函数。
- 返回值:返回一个状态码 retStatus,STATUS_SUCCESS 表示文件日志记录器创建成功,其他状态码表示创建过程中出现错误。
retStatus = initKvsWebRtc();- 函数功能:初始化 Kinesis Video Streams WebRTC 库,这一步是进行 WebRTC 通信的必要准备工作,必须在其他操作之前完成,且只能执行一次。
- 参数:无。
- 返回值:返回一个状态码 retStatus,STATUS_SUCCESS 表示初始化成功,其他状态码表示初始化过程中出现错误。
retStatus = createSignalingClientSync(&pSampleConfiguration->clientInfo, &pSampleConfiguration->channelInfo, &pSampleConfiguration->signalingClientCallbacks, pSampleConfiguration->pCredentialProvider, &pSampleConfiguration->signalingClientHandle);- 函数功能:同步创建一个信令客户端实例,用于在 WebRTC 通信中交换会话描述协议(SDP)和 ICE 候选地址等信令信息。
- 参数解释
- &pSampleConfiguration->clientInfo:指向客户端信息结构体的指针,包含客户端的一些基本信息,如客户端 ID 等。
- &pSampleConfiguration->channelInfo:指向通道信息结构体的指针,包含信令通道的相关信息,如通道名称、角色等。
- &pSampleConfiguration->signalingClientCallbacks:指向信令客户端回调函数结构体的指针,用于处理信令消息的接收、发送等事件。
- pSampleConfiguration->pCredentialProvider:指向凭证提供者的指针,用于提供 AWS 凭证,以进行身份验证和授权。
- &pSampleConfiguration->signalingClientHandle:指向信令客户端句柄的指针,函数会将创建好的信令客户端句柄存储在该指针指向的位置,后续可以使用该句柄进行信令操作。
- 返回值:返回一个状态码 retStatus,STATUS_SUCCESS 表示信令客户端创建成功,其他状态码表示创建过程中出现错误。
retStatus = signalingClientFetchSync(pSampleConfiguration->signalingClientHandle);- 函数功能:同步获取信令客户端的消息,从信令通道中获取最新的信令消息,如 SDP 提议、ICE 候选地址等。
- 参数:pSampleConfiguration->signalingClientHandle 是之前创建的信令客户端句柄,用于标识要操作的信令客户端。
- 返回值:返回一个状态码 retStatus,STATUS_SUCCESS 表示消息获取成功,其他状态码表示获取过程中出现错误。
retStatus = signalingClientConnectSync(pSampleConfiguration->signalingClientHandle);- 函数功能:同步建立信令客户端与信令服务器的连接,在获取信令消息之前,需要先建立与信令服务器的连接。
- 参数:pSampleConfiguration->signalingClientHandle 是之前创建的信令客户端句柄,用于标识要操作的信令客户端。
- 返回值:返回一个状态码 retStatus,STATUS_SUCCESS 表示连接建立成功,其他状态码表示连接过程中出现错误。
retStatus = sessionCleanupWait(pSampleConfiguration,&signal_infor);- 函数功能:等待会话清理操作完成,当 WebRTC 会话结束时,需要进行一些清理工作,如释放资源、关闭连接等,该函数会等待这些清理操作完成。
- 参数解释
- pSampleConfiguration:指向示例配置对象的指针,包含了会话的相关配置信息。
- &signal_infor:指向信号信息结构体的指针,用于传递一些与信号相关的信息。
- 返回值:返回一个状态码 retStatus,STATUS_SUCCESS 表示会话清理操作完成,其他状态码表示清理过程中出现错误。
libdatachannel 局域网的webrtc
!!! tip libdatachannel 只是底层的数据通道
- webrtc的正确流程是,从
!!!
WebRTC 通过以下几个主要部分共同构成一个完整的实时通信解决方案:
- 媒体采集(getUserMedia):捕获本地音视频数据。
- 点对点连接(RTCPeerConnection):建立和管理浏览器之间的直接连接,确保数据安全高效传输。
- 数据通道(RTCDataChannel):支持实时数据交换。
- 网络穿透和候选地址协商(ICE、STUN、TURN):确保即使在复杂网络环境下也能建立稳定连接。
- 会话描述和安全保障(SDP、DTLS、SRTP):实现通信协商和数据加密,保护通信安全。
- 信令:负责初始握手和参数协商,虽然不在WebRTC标准内,但对整个流程至关重要,websocket。
摄像头客户端 -> 服务端
发送数据到服务端
web端 -> 服务端
从服务端获取数据
信令 – websocket
服务器
- 监听指定端口
客户端
- 查询有无服务器ip地址,如果有发起确认请求,得到回复并连接,否则向局域网内的所有ip地址发起确认请求,发起回复的就是服务端,保存服务端ip并连接