-
Notifications
You must be signed in to change notification settings - Fork 3
Medea server 1 <=> 1 WebRTC P2P #10
Comments
cc @tyranron |
@alexlapa I think it's OK at the moment. Just do not forget to update roadmap when things change. |
- add default caller and responder into repository
- add default caller and responder into repository
@alexlapa объясните за треки, пожалуйста, а то не складывается описание из rfc-0002 и здешнего примера:
|
@Kirguir ,
Думаю, треки лучше хранить внутри Peer'ов. Например так: Peer {
recv: HashMap<TrackId, Arc<Track>>
send: HashMap<TrackId, Arc<Track>>
} Один трек может быть у нескольких пиров. Например, если
Пока предлагаю ограничиться таким условием: Все треки можно считать active, если оба пира заэмитили и получили ice кандидатов. Но не вижу необходимости обрабатывать это в текущем milestone.
Meh, тут возникла небольшая путаница в терминологии - мой косяк. В случае с треками я хотел в треке отразить что трек имеет "два конца" - и сендера и ресивера. На самом деле, А сам вопрос "что с ними делать" требует уточнения. |
@alexlapa по результатам дисскусию:
|
Архитектура
Control API
пока нет. Будет одна захардкоженая комната с двумя захардкожеными пользователями.Комнату в терминах
Control API
можно выразить следующим образом:Сценарий обмена сообщениями - первые пять пунктов из примера
1 <=> 1 P2P with unpublish and republish
в 0002-webrc-client-api.Ознакомление с 0001-control-api и 0002-webrc-client-api строго обязательное.
Примерное распределение по пакетам следующее:
/api/client
- все что связяно с Client API, а пока это: инициализацияWsListener
, обработка получаемых по сокету сообщений, протокольные ДТО,WsSessionsRepository
.Control API
. Пока это: Member,MemberRepository
./media
- предметная область:Peer
,Track
.PeerRepository
./log
- враппер предоставляющий средства для логирования внутри приложения чего угодно./conf
- слой реализующий конфигурацию приложения и предоставляющий средства для работы с ней.Elements considerations
Важный момент - разделение между терминами
Control API
и терминами нашей внутренней модели данных. Так как основной задачейControl API
было максимально упрощение задачи взаимодействия управляющего сервиса cMedea
, его термины не ложаться на реальную модель данных 1 к 1.Например
WebRtc<_>Endpoint
'ы интуитивно приравниваются кRTCPeerConnection
. Т.е. каждый пользователь будет иметь по дваRTCPeerConnection
. Но это будет верно только для некоторых сценариев с использование hub сервера.И хотя такая реализация для N<=>N P2P возможна, намного эффективней будет держать по одному дюплексному
RTCPeerConnection
'у у каждого пользователя на каждого из его собеседников. Таким образом, в данном примере,WebRtcPublishEndpoint
фактически является RTCRtpSender, аWebRtcPlayEndpoint
= RTCRtpReceiver.Так как
Control API
в 0.1.0 milestone не фигурирует, задача трансляции его модели данных в модель данных Medea(парсингControl API
спеки) пока не стоит.Предлагается придерживаться примитивов обозначенных в 0002-webrc-client-api:
Member
Peer
Track
В добавлении
Room
из 0001-control-api пока смысла нет - комната одна будет.Что хочется получить:
Peer
state-machine. Тут можно частично вдохновится списоком состоянийRTCPeerConnection
: signaling_state, connection_state.Peer
сам знает что отправить удаленному клиенту чтобы тот синхронизировал свое состояние. В идеале, синхронизация состояний должна происходить по вызову специального метода (допустимPeer.update_tracks()
).Последний пункт достаточно неоднозначный. Draft подразумевает что все так, но над этим еще надо будет подумать. Сокет, дергающий
Peer
а, дергающего сокет - может привести к проблемам.Peer and Track state-machine draft
Постарался набросать как это примерно может выглядить. На прямое руководство к действию пока не тянет и многие моменты опущены.
И пример как это будет выглядить:
Roadmap
Logger
(Add logger #12).Member
(id
,credentials
(str
)),MemberRepository
(get_by_id()
,get_by_credentials()
), hardcodecaller
andresponder
(Implements member and members repository #13).WsHandler
(just handlesupgrade
request), add WsSessions repository (Implements handle websocket connection #14)Configuration
(Implement configuration #15).Track
,Peer
,PeerRepository
Peer
onMember
connectPeerCreated
to firstMember
on bothMember
s connected.MakeSdpOffer
, sendPeerCreated
to secondMember
.MakeSdpAnswer
, sendSdpAnswerMade
.SetIceCandidate
, sendIceCandidateDiscovered
.The text was updated successfully, but these errors were encountered: