All Projects → connect-foundation → 2019-09

connect-foundation / 2019-09

Licence: other
TryCatch - 레크레이션 게임 "몸으로 말해요"의 온라인 게임 🙆‍♀️ 💁 🙋

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to 2019-09

Laverna
Laverna is a JavaScript note taking application with Markdown editor and encryption support. Consider it like open source alternative to Evernote.
Stars: ✭ 8,770 (+48622.22%)
Mutual labels:  webrtc, socket-io
suc-love-chat
视频会议系统前端源码
Stars: ✭ 35 (+94.44%)
Mutual labels:  webrtc, socket-io
Raztot
A simple DIY, browser controlled, RPi + WebRTC video streaming rover
Stars: ✭ 67 (+272.22%)
Mutual labels:  webrtc, socket-io
P2p Webrtc
p2p Video Call Connection by WebRTC
Stars: ✭ 106 (+488.89%)
Mutual labels:  webrtc, socket-io
Cuckoo
🎥 Cuckoo - A free anonymous video-calling web application built with WebRTC and React that provides peer-to-peer video and audio communication in a web browser with no plugins or extensions required.
Stars: ✭ 195 (+983.33%)
Mutual labels:  webrtc, socket-io
Webrtc Video Broadcast
WebRTC video/audio broadcast
Stars: ✭ 217 (+1105.56%)
Mutual labels:  webrtc, socket-io
React Discord Clone
Discord Clone using React, Node, Express, Socket-IO and Mysql
Stars: ✭ 198 (+1000%)
Mutual labels:  webrtc, socket-io
Video Call App Nodejs
A conference call implementation using WebRTC, Socket.io and Node.js
Stars: ✭ 234 (+1200%)
Mutual labels:  webrtc, socket-io
secure-webrtc-swarm
💢 Create a swarm of p2p connections with invited peers using WebRTC.
Stars: ✭ 23 (+27.78%)
Mutual labels:  webrtc
meanOs
Mean Operating System - The first decentralized, artificially intelligent, MEAN.js stack, operating system. Mean OS is the only operating system hosted anonymous using a P2P network and a suite of non-standard in-browser delivery mechanisms. Mean OS proudly supports Brave and Tor, be free!
Stars: ✭ 62 (+244.44%)
Mutual labels:  webrtc
WebRTC
Home Assistant custom component for viewing IP cameras RTSP stream in real time using WebRTC and MSE technology
Stars: ✭ 538 (+2888.89%)
Mutual labels:  webrtc
yangwebrtc
Webrtc SDK for C++
Stars: ✭ 257 (+1327.78%)
Mutual labels:  webrtc
blog
Algorithm,WebRTC,Node,Microservices,Golang,ELK,Kubernetes,Istio,JAVA,PHP,MongoDB,Ningx,OpenResty,GraphQL...
Stars: ✭ 19 (+5.56%)
Mutual labels:  webrtc
pubnub-js-webrtc
adambavosa.com/pubnub-js-webrtc/example/
Stars: ✭ 16 (-11.11%)
Mutual labels:  webrtc
iota-ion.lib.js
IOTA ION Library - Fast data-troughput in the browser, supported by the IOTA tangle.
Stars: ✭ 28 (+55.56%)
Mutual labels:  webrtc
rawrtc-data-channel
A standalone WebRTC and ORTC data channel implementation.
Stars: ✭ 47 (+161.11%)
Mutual labels:  webrtc
ros-gst-bridge
a bidirectional ros to gstreamer bridge and utilities for dynamic pipelines
Stars: ✭ 46 (+155.56%)
Mutual labels:  webrtc
mom
Proof of concept for Message-Oriented-Middleware based architecture.
Stars: ✭ 39 (+116.67%)
Mutual labels:  socket-io
webrtc-build
様々な環境向けの WebRTC のビルドを行って、そのバイナリを提供しています
Stars: ✭ 128 (+611.11%)
Mutual labels:  webrtc
SkylinkSDK-iOS-Sample
Temasys SkylinkSDK for iOS - Sample App - Objective C
Stars: ✭ 16 (-11.11%)
Mutual labels:  webrtc

Version Documentation issue tracking pr tracking License: MIT


🏡 Links


🕺 Introduction

  • 🙆 💁 🙋 Try Catch는 레크레이션 게임 "몸으로 말해요"를 어디서나 즐길 수 있도록 웹으로 구현한 서비스입니다.

  • 네트워크 환경의 변화, 사용자의 돌발 행동에도 게임이 원활하게 진행되는 것을 목표로 합니다.

  • 원활한 영상 전송을, 버그 없는 게임을, 스마트폰으로도 어디서나 즐기는, 즐거운 경험을 제공하는 것을 목표로 합니다.


💡 Technologies Used


🔨 Tech Researches


🛠️ Process

Sprint 1

  • 어떻게 하면 도전적인 주제를 선정할 것인가?
    • 도전적인 기술 : 우리가 아직 경험해보지 못한 기술
      • 영상 : 멤버십 기간에 한번도 경험해보지 못한, 도전적인 주제
      • 게임 : 마찬가지로 경험해보지 못한 새로운 주제
    • 결론 : 영상 + 게임 두 주제를 결합해서 지금까지 경험해보지 못한 기술에 도전해보자.

Sprint 2

  • WebRTC
    • 이 기술이 가능한 기술인가? 또한 이 기술의 원리는 무엇인가?
      • Relaying, Connection reversal, UDP hole punching 과 같은 P2P 구현 기술에 대한 공부
      • P2P 연결은 이미 존재하는 기술이고, 이 기술을 적용하면 충분히 실현이 가능하리라는 확신
      • WebRTC는 존재하는 기술을 적용하지만 브라우저에서 실현이 가능하다는 점에서 획기적인 기술
    • STUN 서버 : 사용자의 IP를 알려주는 서버
    • TURN 서버 : P2P 연결이 실패할 경우, 우회하여 연결하는 서버
    • 이해를 기반으로 N:N 다자간 연결 구현
  • 환경 세팅
    • docker : 버전 관리와 OS로부터 독립적인 환경 제공
    • HTTPS : 브라우저로부터 카메라 권한을 얻기 위한 HTTPS 인증

Sprint 3

  • Client React App 개발 시작

    • 모바일 뷰(responsive) 지원 결정
    • client 프로젝트 구성방법 회의/결정
    • component(가장 작은 컴포넌트), container(몇개의 가장 작은 컴포넌트의 집합으로 이루어진 컴포넌트), page(component와 container의 집합으로 route와 묶이는 실제적 페이지 컴포넌트)로 구성
    • material-ui 필요여부결정 및 적용
    • 메인페이지(component, container, page) 구현
  • 1:N다자간 통신

    • 기존 WebRTC에서는 클라이언트 전원의 N:N 연결
    • 불필요한 연결이 발생하는 문제
    • Streamer(영상 송출자)Viewer(영상 수신자) 간의 1:N 연결 고안 및 변경
  • 게임 룸 구현

    • socket.io 활용
      • socket.io API에서 제공하는 room 활용
    • 게임 이벤트 처리에 대한 로직 구현
    • 한 세트(스트리머 전환 x) 게임 진행

Sprint 4

  • React

    • 게임페이지(component, container, page) 구현
    • 글로벌 상태와 reducer를 이용한 dispatch 구현
    • 채팅 컴포넌트 구현 및 위의 dispatch 적용
  • 프론트엔드 WebRTC 리팩토링

    • 기존의 코드 : socket의 기능이 WebRTC에 종속적인 구조
      • 채팅이나 게임 이벤트를 확장할 수 없는 구조
    • ClientManager, ChattingManager, StreamingManager로 클라이언트의 매니저 분리
      • 각각의 매니저가 소켓 객체를 공유하지만 담당하는 부분 분리
      • 기능 확장 용이 및 책임 분산 가능

Sprint 5

  • React

    • 랭킹페이지(component, container, page) 구현
    • 모바일 뷰 최적화를 위한 리팩토링
    • 게임뷰에서 필요한 여러 notice 컴포넌트 구현
      • 큰 페이지 컴포넌트인 Game 리팩토링
      • presenter(jsx), index(logic), style(style)로 파일 분리
  • 게임 진행 시스템 구성

    • 게임 룸에 waiting, playing 등의 status 설정
    • 1라운드(모든 플레이어가 돌아가면서 게임) 진행 구성
      • 기존에는 1명의 플레이어만 영상 송출이 가능했었음

Sprint 6

  • React

    • 글로벌 상태와 dispatch action을 action creator 형태로 리팩토링
    • 큰 페이지 컴포넌트인 Game 리팩토링
      • 로직을 hook으로 분리
  • 게임 진행 오류 수정

    • Sprint 5에 진행한 버그데이에 발생한 문제 해결
      • 카메라 권한 거부에 대한 예외 처리
      • 게임 중간에 플레이어가 나갈 경우에 대한 예외 처리
    • 팀원 전원의 테스팅을 통해 발생하는 오류 제거

Sprint 7

  • React

    • Rules of Hooks 권고사항 반영
    • jest warning 해결
    • 컴포넌트가 아닌 곳에서 쓰이는 hook 상위 컴포넌트로 이동
  • 리팩토링

    • 클라이언트와 서버에 존재하는 Magic Number 제거

🚌 Data Transfer

WebRTC

Peer To Peer로 전송하는 영상 스트리밍

  • 서버를 통한 스트리밍 비용을 최소화하기 위해 클라이언트 간의 연결을 활용하는 WebRTC 기술을 선택하였습니다.

Socket.io

Socket통신을 통한 게임 시스템 구현

  • WebRTC의 메타데이터 전송과 게임에서 실시간으로 발생하는 이벤트를 처리하기 위해 socket.io를 사용했습니다.

  • 게임 이벤트 흐름

    • Join and Waiting status

      Join and Waiting Status (1)

    • Connecting status

      connecting (1)

    • Initializing status

      initializing

    • Playing status

      playing (1)

    • Scoring status and end game

      scoringAndEndGame (1)

🌊 Data flow


🚴 How To Run

dockerdocker-compose의 설치를 필요로 합니다.

$ docker-compose up -d

🎬 Demo video

7주차 데모

Youtube

4주차 데모

2주차 데모


✍️ Author

Team Try Catch


🔥 Issues


📜 License

Copyright © Try Catch MIT License


:octocat: Show your support

Give a ⭐️ if this project helped you!


Special Thanks to Boostcamp and Connect Foundation

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].