sgcWebRTC 기능 매트릭스 — 오디오, 영상, 데이터 채널 | eSeGeCe

sgcWebRTC 기능 매트릭스

sgcWebRTC가 TsgcRTCPeerConnection에 추가하는 모든 기능을 역량별로 정리했습니다. 시그널링과 연결 기능은 sgcWebSockets Enterprise의 기본 컴포넌트에서 제공되며, 이 팩은 그 위에 오디오, 영상, 화면 캡처, 데이터 채널, 암호화, 대역폭 추정을 갖춘 미디어 엔진을 활성화합니다. 모든 기능은 Delphi와 C++ Builder에서 동일하게 동작하며, 모든 라이선스에는 전체 소스 코드가 포함됩니다.

시그널링

Enterprise 기본 & SDP

오디오

Opus / G.711

영상

VP8 / H.264 / MJPEG

데이터 채널

RFC 8831 / 8832

화면 공유

캡처 & 렌더링

SRTP / DTLS

암호화된 미디어

대역폭 추정

혼잡 제어

Enterprise가 제공하는 것, sgcWebRTC가 추가하는 것

기본 연결 기능은 이미 sgcWebSockets에 있습니다. sgcWebRTC는 동일한 컴포넌트에서 SDP, 데이터 채널, 미디어 기능을 활성화합니다.

기능제공 위치비고
STUN 클라이언트(TsgcSTUNClient)sgcWebSockets Standard서버 반사 후보 탐색이며, Enterprise 미만에서도 사용할 수 있습니다.
TURN 클라이언트 및 서버, ICE 클라이언트(TsgcTURNClient, TsgcICEClient)sgcWebSockets Enterprise중계 후보와 전체 ICE 후보 수집 / 지명입니다.
기본 TsgcRTCPeerConnection, 레거시 WebSocket 릴레이 시그널링sgcWebSockets EnterpriseGatherCandidates, WriteDataOnRTCWebSocket… / OnRTCCandidatePairNominated / OnRTCConnect 이벤트가, 내장 RTCPeerConnection 프로토콜 서버를 통해 ICE 연결과 DTLS 전송을 처리합니다. SDP, 데이터 채널, 미디어는 없습니다.
수동 SDP 오퍼/앤서 시그널링sgcWebRTCCreateOffer, CreateAnswer, SetLocalDescription, SetRemoteDescription, AddIceCandidate, RestartIce — 브라우저가 기대하는 JSEP(RFC 8829) 상태 머신입니다.
재협상 및 glare 해소sgcWebRTCAddTrack / RemoveTrack 이후의 재오퍼, OnNegotiationNeeded, 롤백, Polite를 통한 W3C perfect-negotiation 규칙입니다.
트리클 ICEsgcWebRTCTrickleICERTCOptions.TrickleICEAuto가 전체 수집 타임아웃을 기다리지 않고 후보를 발견되는 대로 스트리밍합니다.
연결 및 시그널링 상태sgcWebRTCConnectionState(W3C RTCPeerConnectionState의 서브셋)와 SignalingState(RTCSignalingState의 서브셋), 그리고 OnConnectionStateChangeOnError입니다.
SCTP 데이터 채널, RTP 오디오/영상, SRTP 암호화sgcWebRTC아래 섹션을 참고하세요. 세 가지 모두 Enterprise 기본 위에 이 팩이 필요합니다.

Opus 및 G.711 오디오 트랙

AddTrack를 한 번 호출하면 피어 연결에 오디오 트랙이 연결됩니다. PCM이 들어가고 RTP가 나가며, 원격 트랙에서는 동일한 경로가 반대로 동작합니다.

기능멤버비고
오디오 트랙 연결AddTrack(rtctkAudio, aCodec)TsgcRTCTrack을 반환합니다. RemoveTrack으로 전송을 중지합니다.
Opus 코덱cctAudioOpus동적으로 로드되는 libopus 바인딩을 통한 48 kHz / 스테레오입니다.
G.711 코덱cctAudioPCMU / cctAudioPCMA8 kHz / 모노 μ-law 및 A-law이며, 외부 라이브러리 없이 항상 사용할 수 있습니다.
캡처한 오디오 전송TsgcRTCTrack.SendPCM(aPCM, aSamplesPerChannel)인코더의 샘플레이트와 채널 수에 맞춘 16비트 부호 있는 인터리브 PCM입니다.
디코딩된 오디오 수신OnAudio(aPCM, aSampleRate, aChannels, aSamplesPerChannel)RTP가 도착하고 디코딩될 때 원격 트랙에서 발생합니다.
인코더 / 디코더 접근AudioEncoder / AudioDecoder내부의 TsgcAudioEncoderBase / TsgcAudioDecoderBase 객체이며, 트랙별로 교체할 수 있습니다.
트랙 수명 주기Enabled, Ended, OnEndedEnabled := False는 재협상 없이 음소거합니다. Ended는 원격 측이 트랙을 제거했거나 재오퍼가 발생했음을 나타냅니다.
마이크 캡처TsgcMediaCaptureSource 파생 클래스플랫폼별 네이티브 캡처(Windows의 waveIn, 그리고 Linux, Apple, Android 백엔드)가 SendPCM에 직접 데이터를 공급합니다.

VP8, H.264 및 Motion JPEG 영상 트랙

영상은 오디오와 동일한 구조로 동작합니다 — 프레임이 들어가고 RTP가 나갑니다 — 코덱은 트랙별로 선택하며, H.264는 그 아래에 플랫폼 자체의 하드웨어 인코더가 있습니다.

기능멤버비고
영상 트랙 연결AddTrack(rtctkVideo, aCodec)오디오와 동일한 호출이며, 영상용 TsgcCodecType을 사용합니다.
VP8 코덱cctVideoVP8동적으로 로드되는 libvpx 바인딩이며, Windows와 Linux에서 사용할 수 있습니다.
H.264 코덱cctVideoH264플랫폼별 네이티브 하드웨어 인코더입니다: Media Foundation(Windows), VideoToolbox(iOS/macOS), MediaCodec(Android). Annex-B 스트림, RFC 6184 페이로딩, 모든 키프레임에 인밴드로 실리는 SPS/PPS입니다.
Motion JPEG 코덱cctVideoJPEGGDI+ 기반이며, Windows와 Delphi XE 이상에서 사용할 수 있습니다.
원시 프레임 전송TsgcRTCTrack.SendVideoFrame(aFrame, aForceKeyFrame)TsgcVideoFrame(I420/NV12/RGB/BGR 계열)을 인코딩해 전송합니다.
사전 인코딩된 프레임 전송SendEncodedFrame(aData, aIsKeyFrame)외부에서 인코딩된 프레임에 대해 트랙 자체의 인코더를 건너뜁니다.
디코딩 / 원시 프레임 수신OnVideoFrame / OnEncodedFrame디코딩된 TsgcVideoFrame이거나, 키프레임 플래그가 포함된 원시 인코딩 비트스트림입니다.
키프레임 요청RequestKeyFrame원격 송신자에게 RTCP PLI를 전송합니다.
인코더 / 디코더 접근VideoEncoder / VideoDecoder내부의 TsgcVideoEncoderBase / TsgcVideoDecoderBase 객체입니다.
카메라 캡처TsgcMediaCaptureSource 파생 클래스플랫폼별 캡처 백엔드(Windows, Linux, Apple, Android)가 SendVideoFrame에 직접 데이터를 공급합니다.
렌더링TsgcMediaRenderer 파생 클래스디코딩된 원격 영상을 위한 플랫폼별 렌더러 백엔드(Windows, Linux, Apple, Android)입니다.

SCTP 데이터 채널(RFC 8831 / 8832)

순서 보장 또는 비보장, 완전 신뢰성 또는 재전송 횟수나 수명으로 제한된 방식으로, SCTP-over-DTLS 위에서 동작합니다.

기능멤버비고
채널 열기CreateDataChannel(aLabel, aOrdered, aMaxRetransmits, aMaxPacketLifeTime, aProtocol)TsgcRTCDataChannel을 반환합니다. RTCOptions.DTLS를 강제로 켭니다.
원격에서 연 채널OnDataChannel(aChannel)피어가 이 연결에서 채널을 열면 발생합니다.
텍스트 / 바이너리 전송Send(aText) / SendBytes(aBytes)채널이 아직 열리지 않았으면 False를 반환합니다.
수신OnMessage(aText) / OnMessageBinary(aBytes)SCTP 구동 스레드에서 발생합니다.
수명 주기 이벤트OnOpen, OnClose, OnError(aError)W3C RTCDataChannel 수명 주기와 일치합니다.
채널 상태State, HasId, IdSCTP 스트림 ID는 DTLS 역할이 결정된 뒤에야 확정됩니다(RFC 8832 홀짝 규칙).
흐름 제어BufferedAmount, MaxMessageSizeMaxMessageSize는 피어 자신의 a=max-message-size를 추적하며, 크기를 초과하는 전송은 로컬에서 거부합니다.
신뢰성 정보 조회Reliability, ReliabilityParam, Ordered, MaxRetransmits, MaxPacketLifeTime채널이 실제로 협상한 값을 그대로 읽어옵니다.
닫기CloseRE-CONFIG 기반 종료입니다. State는 closing을 거쳐 closed가 되며 OnClose가 발생합니다.
피어 연결 수준DataChannelCount, DataChannels[i]연결상의 열려 있는 모든 채널을 열거합니다.

데스크톱, 모니터, 창 및 영역 캡처

캡처 소스는 카메라와 동일한 SendVideoFrame 경로에 데이터를 공급합니다. 화면 콘텐츠도 그저 또 하나의 영상 트랙일 뿐입니다.

기능멤버비고
캡처 백엔드TsgcScreenCapture_WinGDI 기반 데스크톱, 모니터, 창, 영역 캡처입니다. 현재는 Windows 전용입니다.
모니터 열거GetMonitors / MonitorIndex모니터별 한 줄(해상도, 위치, 기본 여부)이며, -1은 전체 가상 데스크톱을 캡처합니다.
영역 캡처Region화면 좌표 사각형이며, 빈 사각형은 영역 모드를 비활성화합니다.
레이어드 / 투명 창CaptureLayeredCAPTUREBLT를 사용해 레이어드 창과 투명 창을 포함합니다.
커서IncludeCursor캡처된 프레임에 마우스 커서를 그립니다.
다운스케일MaxWidth0은 다운스케일을 비활성화하며, 그 외 값이면 더 넓은 프레임을 인코딩 전에 축소합니다.
프레임 레이트캡처 소스 FrameRate기본값은 5 fps이며, 화면 콘텐츠는 최대 30 fps까지 가능합니다.
인코딩 및 전송TsgcRTCTrack.SendVideoFrame캡처된 BGRA32 프레임이 다른 소스와 마찬가지로 트랙의 영상 인코더에 공급됩니다.

필수 미디어 암호화

연결상의 모든 RTP, RTCP, SCTP 패킷은 DTLS 핸드셰이크 이후부터 암호화됩니다 — 평문 모드는 존재하지 않습니다.

기능세부 사항
키 교환선정된 ICE 후보 페어 위에서 이루어지는 DTLS 핸드셰이크(RFC 5764 DTLS-SRTP)이며, SRTP 키 정보를 도출합니다.
DTLS 역할수동 시그널링에서는 역할이 a=setup에서 결정됩니다(오퍼러는 passive, 앤서러는 active). IsDTLSClient가 결정된 후 이를 보고합니다.
SRTP 보호 프로필SRTP_AES128_CM_SHA1_80, SRTP_AES128_CM_SHA1_32, SRTP_AEAD_AES_128_GCM, SRTP_AEAD_AES_256_GCM이며, DTLS 핸드셰이크 중에 협상됩니다.
SSRC별 암호화 상태RFC 3711 3.2.3절이 요구하는 대로, SSRC마다 하나의 암호화 컨텍스트(롤오버 카운터, 재전송 방지 윈도)를 유지합니다. BUNDLE로 모든 m-line이 하나의 DTLS-SRTP 전송에 모여도 마찬가지입니다.
적용 범위RTP/RTCP 미디어와 데이터 채널을 운반하는 SCTP 연합을 모두 포함합니다 — 하나의 m-line이 아니라 연결 전체입니다.
백엔드OpenSSL 기반 SRTP 구현입니다.

혼잡 제어 및 손실 복원력

Google Congestion Control 방식의 지연 기반 추정기가 회선 상태를 추적하고 영상 인코더의 목표 비트레이트를 조정합니다.

기능멤버비고
지연 기반 추정기TsgcBWE_Estimator패킷을 5 ms 전송 버스트로 묶고, 그룹 간 지연에 대해 트렌드라인 필터를 실행하며, 회선을 정상, 과사용, 저사용으로 분류합니다.
레이트 제어AIMD 컨트롤러과사용 시 승인된 레이트의 85%로 감소하고, 저사용 시 유지하며, 정상 시에는 증가합니다(마지막으로 알려진 상한에서 멀 때는 승산적, 가까울 때는 가산적).
손실 상한손실률 추적손실률이 10%를 넘으면 상한이 낮아지고, 2% 미만이면 초당 8%씩 MaxBitrate까지 회복됩니다.
전송 전체 피드백TWCC(RTCP)BuildRTCP_TWCC / ParseRTCP_TWCC 전송 전체 혼잡 제어 피드백이며, TWCC를 지원하지 않는 피어를 위한 대체 상한으로 REMB를 사용합니다.
활성화RTCOptions.Media.CongestionControl원격 설명(remote description)이 일치하는 헤더 확장 / 피드백도 함께 협상해야만 효과가 있습니다.
손실 복구RTCOptions.Media.RTXRTCP NACK 발생 시 영상 스트림에 대한 RFC 4588 재전송입니다.
순방향 오류 정정RTCOptions.Media.FEC발신 영상 스트림에 대한 RED / ULPFEC 보호입니다.
페이싱RTCOptions.Media.Pacing발신 영상 패킷을 한꺼번에 보내지 않고 추정된 비트레이트로 페이싱합니다.
키프레임 복구RTCP PLI수신 트랙에서의 RequestKeyFrame이 손실 이후 송신자에게 새 키프레임을 요청합니다.
최고의 가성비: All-Access모든 eSeGeCe 제품과 프리미엄 지원이 포함되어 연 €1,059부터 이용할 수 있어요.
All-Access 가격 보기

sgcWebRTC로 구축을 시작하세요

무료 체험판을 다운로드하고 Delphi 또는 C++ Builder에서 진짜 피어 연결을 열어 보세요.