Kinesis Video Streams with WebRTC 아키텍처
테스트 환경 구축 시나리오
- AWS 에서 Master 와 Viewer 용도의 서버를 생성하여 WebRTC SDK 를 사용할 수 있도록 필수 구성 요소와 SDK 설치 및 환경 설정을 진행합니다.
*** 테스트 진행을 위해 Master 와 Viewer 용도의 서버를 별도로 생성 하였지만 일반 PC에서도 필수 구성 요소와 SDK 설치 및 환경 설정을 진행하여 사용 가능합니다. - 환경 설정이 완료되면 AWS 에서 제공 되는 서비스인 Kinesis Video Streams with WebRTC 를 SDK 를 사용해서 리소스 접근 및 제어 합니다.
- SDK 를 사용해서 AWS Kinesis Video Streams 대시보드에 Signaling channel 을 생성합니다.
- 채널 생성 완료되면 Signaling channel 을 사용해서 Master 와 Viewer 을 연결하고 테스트를 진행합니다.
*** Master 와 Viewer 환경 구성시 테스트 진행을 위해 “AWS 콘솔 제어 방법”, “임베디드 장치 방법”, “웹 애플리케이션 방법” 3가지 방식을 사용해서 각각 환경을 구현 하였으므로 목차의 1번부터 3번까지는 해당 방식들을 사용해서 각각 구현한 내용입니다. 해당 내용 참고시 사용 하시려는 방식을 확인 하신 후 참고 부탁드립니다.
목차 (환경 구축 및 테스트 진행 과정)
- WebRTC 환경 구축(AWS 콘솔)
- WebRTC 환경 구축(임베디드 장치 방식)
- WebRTC 환경 구축(웹 애플리케이션 방식)
- WebRTC 기능 테스트 (채널 연결)
- WebRTC 기능 테스트 (Master 와 Viewer 통신)
- 테스트 진행 결과에 따른 결론
*** 환경 구축의 경우 1번 부터 3번 까지는 다른 방식을 사용하여 WebRTC 를 구현한 내용이며 4번부터 생성된 채널을 사용해서 테스트를 순서대로 진행한 내용이므로 참고 부탁드립니다.
1. WebRTC 환경 구축(AWS 콘솔)
1) IAM 정책 생성
- Kinesis Video Stream 및 Kinesis Video Stream with WebRTC 리소스에 대해 전체 액세스 허용 하도록 정책 구문을 작성합니다.
- 테스트 진행을 위해 리소스에대해 모든 제어가 가능하도록 설정하였으며 Master 과 Viewer 로 분류하여 사용자를 생성할 경우 정책을 다르게 작성하여 적용해야 합니다.
*** 테스트 진행시 Master 용으로 정책을 생성하였습니다.
2) IAM 사용자 생성
- 엑세스 유형은 SDK를 사용할 예정이므로 프로그래밍 방식 엑세스 가능 하도록 설정합니다.
*** 테스트 진행시 해당 IAM 으로는 SDK 만 사용할 예정이므로 프로그래밍 방식 엑세스 허용 하였으며 콘솔제어가 필요할 경우 AWS 콘솔 제어도 가능하도록 설정합니다.
3) IAM 사용자에서 사용할 정책 연결
- 생성한 정책을 연결하여 IAM 을 생성합니다.
4) AWS 콘솔에서 신호 전송 채널을 생성
- Amazon Kinesis Video Stream 대시보드로 이동 후 WebRTC 신호 전송 채널을 선택하고 생성합니다.
5) AWS 콘솔에서 신호 전송 채널 세부 사항 입력 후 채널 생성
- 신호 전송 채널이름과 TTL 시간을 입력한 후 생성합니다.
*** 신호 전송 채널의 경우 기존에 생성되어 있는 채널의 이름과 중복되면 생성이 안되므로 중복되지 않도록 입력해야합니다.
*** TTL 의 경우 입력한 시간 동안만 전달되지 않은 메시지가 보관되며 해당 시간이 경과하면 메시지가 삭데됩니다. 기본값은 60초 입니다.
6) 생성된 신호 전송 채널 확인
- 생성 완료된 신호 전송 채널의 상태가 활성인지 확인합니다.
7) 생성된 신호 전송 채널 연결 방법 확인
- 신호 전송 채널 연결 부분의 SDK 설정 클릭하면 AWS 가이드 문서 링크가 열리므로 필요시 링크를 열어서 확인합니다.
- 웹캠 데모는 생성된 채널의 데모 확인이 필요하면 클릭하여 영상을 확인할 수 있으며 Master 화면과 Viewer 화면이 현시됩니다.
8) 미디어 재생 뷰어 기능 확인
- 생성된 채널과 Master 연결이 완료되면 해당 화면에서 Master 의 실시간 영상을 확인할 수 있습니다.
*** 미디어 재생 뷰어는 Master 화면만 확인이 가능하며 하단의 정보를 통해 IP, 출력 정보, 해상도, 출력 속도 등 세부사항을 확인할 수 있습니다.
9) 미디어 재생 뷰어 기능 확인
- 신호 전송 채널 정보에서 ARM, 상태, 버전 등의 정보를 확인 할 수 있습니다.
10) 모니터링 항목 확인
- 모니터링 탭에서 연결 성공여부, 메시지 전송 여부 등 CloudWatch 지표를 확인할 수 있습니다.
11) TTL (Time-to-Live)
- 메시지 전달 실패했을시 메시지가 보관되는 시간이 현시되며 수정이 필요하면 편집이 가능합니다.
2. WebRTC 환경 구축(임베디드 장치 방식)
1) 패키지 리스트 최신화를 위해 패키지 업데이트
- sudo apt update 를 입력해서 사용 가능한 패키지 리스트를 업데이트 합니다.
2) Gstreamer 설치
- Gstreamer 을 설치합니다.
*** Gstreamer 는 프로그래머가 다양한 미디어 관리 구성 요소를 만들 수 있게 해주는 프레임워크이며 Master 에서 해당 Gstreamer 을 사용해서 동작하므로 필수적으로 설치 후 빌드를 진행 해야합니다.
3) Git 사용해서 kinesis-video-streams-Webrtc-sdk-c 설치
- git clone –recursive https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-c.git 를 입력해서 kinesis-video-streams-webrtc-sdk.c 를 설치합니다.
*** git clone -recursive (URL)을 입력해서 해당 프로젝트의 하위 서브모듈을 포함하여 모두 받아올 수 있습니다.
*** 설치를 진행하면 amazon-kinesis-video-streams-webrtc-sdk-c 디렉토리가 생성됩니다.
4) Build 진행할 디릭토리 생성 및 이동
- sudo apt-get install pkg-config cmake libcap2 libcap-dev 를 입력해서 cmake 를 설치합니다.
- mkdir –p amazon-kinesis-video-streams-webrtc-sdk-c/build; cd amazon-kinesis-video-streams-webrtc-sdk-c/build; cmake .. 를 입력해서 amazon-kinesis-video-streams-webrtc-sdk-c 디렉토리 내부에 build 디렉터리 생성 후 build 디렉터리에서 cmke 를 실행합니다.
*** cmake 는 빌드 프로세스를 정의하는 플랫폼 간 오픈 소스 도구이며 cmake 를 사용해서 Build 및 스크립트를 관리합니다
5) 다운로드 받은 프로젝트 샘플 Build 진행
- make 를 입력해서 Build 를 진행합니다.
*** Build 가제대로 진행되지 않으면 응용프로그램이 생성되지 않아서 실행시 찾을 수 없다는 오류가 발생하므로 정상으로 생성되었는지 확인해야 합니다.
6) 설치된 SDK 사용해서 신호 전성 채널 생성
- amazon-kinesis-video-stream-webrtc-sdk-c/build 디렉토리에서 ./kvswebrtcClientMaster testmychannel 를 입력해서 채널을 생성합니다.
- export AWS_ACCESS_KEY_ID= , export AWS_SECRET_ACCESS_KEY= ,export AWS_KVS_CACERT_PATH=, export AWS_DEFAULT_REGION= 4개의 변수를 환경수로 입력 후 진행 해야하며 입력하지 않고 진행하면오류가 발생하게 됩니다.
*** 해당 방식은 엑세스키를 사용한 방식이며 세션토큰을 입력하여 사용할 수도 있습니다. 리전은 입력하지 않을시 기본값이 us-west-2 에 생성되게 되어있습니다.
7) 생성된 신호 전송 채널 확인
- AWS 콘솔로 이동한 후 신호 전송 채널이 생성 되었는지 확인합니다.
8) Master 연결 진행 및 확인
- amazon-kinesis-video-stream-webrtc-sdk-c/build 디렉토리에서 ./kvswebrtcClientMasterGstSample 를 입력해서 Master 에서 채널에 연결하고 GStreamer 파이프 라인에서 샘플 H264 / Opus 프레임을 전송합니다.
9) Viewer 연결 진행 및 확인
- Amazon-kinesis-video-stream-webrtc-sdk-c/build 디렉토리에서 ./kvswebrtcClientViewer 를 입력해서 Viewer 에서 채널에 연결하고 샘플 H264 / Opus 프레임을 받아 출력합니다.
3. WebRTC 환경 구축(웹 애플리케이션 방식)
1) Node.js 패키지 설치
- curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash – 를 입력해서 원하는 버전의 설치 가능하도록 패키지를 업데이트 합니다.
*** Node.js 자바스크립트를 기반으로 애플리케이션 개발에 사용되는 소프트웨어 플랫폼이며 테스트 진행시 Node.js를 사용해서 웹 서버 테스트를 진행하므로 Node.js 를 설치합니다.
*** Node.js 는 HTTP 라이브러리를 포함하고 있으므로 아파치 등의 소프트웨어 없이 웹 서버 테스트가 가능합니다.
2) Node.js 설치
- apt install node.js 를 입력해서 node.js 를 설치합니다.
*** node,js 설치시 npm 도 자동으로 설치가 됩니다.
*** npm 은 자바스크립트 런타임 환경 node.js의 기본 패키지 관리자이며 테스트 진행시 npm run 을 사용해서 웹 서버를 실행 합니다.
3) Git 사용해서 kinesis-video-streams-webrtc-sdk-js 설치
- git clone https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-js.git 를 입력해서 kinesis-video-streams-webrtc-sdk.js 를 설치합니다.
*** 설치를 진행하면 amazon-kinesis-video-streams-webrtc-sdk-js 디렉토리가 생성됩니다.
4) 설치된 웹 애플리케이션 구성 파일 확인
- Index.html, master.js, viewer,js 등 웹 서버 실행시 사용되는 파일을 확인합니다.
*** index.html : 웹 페이지 메인 화면을 구성하는 파일이며 해당 파일을 수정해서 페이 화면에 표시되는 내용을 변경할 수 있습니다.
*** master.js : master 과 관련된 json 파일입니다.
*** viewer.js : viewer 과 관련된 json 파일입니다.
5) npm 으로 웹 서버를 실행 할 수 있도록 패키지 설치
- npm install amazon-kinesis-video-streams-webrtc 를 입력해서 Nods.js 용 WebRTC SDK 를 설치합니다.
- npm install webpack –dev-server –g 를 입력해서 webpack–dev-server 를 설치합니다.
- npm install wepack 를 입력해서 프로그래밍된 파일을 웹페이지에서 호환되어 사용할 수 있도록 변환해주는 기능을 제공하는 오픈 소스 자바스크립트 모듈번들러이인 wepack를 설치합니다.
6) npm 으로 웹 서버를 실행
- npm run develop 를 입력해서 웹 서버를 실행합니다.
*** 웹 서버가 실행되면 첨부된 이미지처럼 접속 URL 과 포트를 확인할 수 있습니다.
7) curl 로 웹 서버 정상 접속 확인
- curl –v http://localhost:3001 를 입력해서 접속 가능한지 확인합니다
8) 웹 페이지 정상 접속 확인
- 웹 페이지 실행 후 http://localhost:3001 입력해서 접속 및 페이지가 표시가 정상으로 되는지 확인합니다.
*** Logs 까지 확인되면 페이지가 정상으로 표시되는 상태입니다.
9) KVS Endpoint
- Region 에 채널 생성 및 접속할 채널이 있는 리전을 입력합니다.
*** Endpoint 의 경우 옵션사항이며 필요시에 입력하며 Endpoint 를 입력하지 않아도 문제없이 진행 가능합니다
10) AWS Credentials
- Access Key ID : Master 및 Viewer 용으로 사용할 IAM Access 키를 입력합니다.
- Secret Access Key : Master 및 Viewer 용으로 사용할 IAM Secret Access 키를 입력합니다.
*** Session Token 의 경우 옵션사항이며 필요시에 입력하며 Session Token 를 입력하지 않아도 문제없이 진행 가능합니다
11) Signaling Channel
- 생성할 채널의 이름을 입력합니다.
*** Client ID 의 경우 옵션사항이며 클라이언트의 고유식별자를 지정하여 작업이 필요할때 Client ID 를 입력하면 사용이 가능합니다. Client ID 를 입력하지 않고 진행하여도 문제없이 사용할 수 있습니다.
12) Tracks 와 Video Resolution
- Send Video (영상 전송), Send Audio (오디오 전송), Open DataChannel (실기간 문자 전송) 전송할 타입을 선택합니다. 3개 모두 선택가능합니다.
- 1290×720, 640×480 두개의 해상도 중에 전송할 영상의 해상도를 선택합니다.
*** 테스트 진행시에는 Send Video 와 Open DataChannel 2개만 선택하였습니다.
13) NAT Traversal
- STUN/TURN, TURN Only, Disabled 3개의 제어 설정중 ICE candidate 생성시 사용할 제어 설정을 선택합니다.
- Use Trickle ICE 사용 여부를 확인해서 체크 및 체크 해제를 합니다.
14) 신호 전송 채널 생성
- Create Channel 버튼을 클릭해서 채널을 생성합니다.
*** Logs 에 정상으로 생성되었다는 로그가 확인되면 생성 완료된 상태입니다
15) 생성된 신호 전송 채널 확인
- AWS 콘솔로 이동 후 Kinesis Video Streams 신호 전송 채널 대시보드에서 채널을 확인 합니다.
4. WebRTC 기능 테스트 (채널 연결)
1) 생성된 신호 전송 채널 연결 테스트
- Test-channel (AWS 콘솔에서 생성), testchannel1 (웹 애플리케이션 방식으로 생성), testmychannel (임베디드 방식으로 생성) 다른 방식으로 생성한 3개의 채널이 로컬에서 모두 문제없이 연결되는지 테스트 진행합니다.
*** 로컬 PC에 찰영 가능한 장비가 있어서 AWS 에서 제공하는 테스트 페이지를 사용하여 연결 및 영상 전송 테스트를 진행하였습니다.
2) Master 에서 채널 연결 및 영상 전송
- Start Master 버튼을 클릭해서 채널 연결 후 영상을 전송합니다.
*** Start Master 버튼을 클릭 후 정상 연결이 되면 화면이 표시됩니다. 연결하려는 디바이스에 웹캠등 영상을 전송할 수 있는 장비가 있어야하며 장비가 없을시 연결은 되지만 화면이 현시되지 않으며 Logs 에 오류가 표시됩니다. (3 개의 채널 모두 테스트 진행)
*** Send Video, Open DataChannel 을 선택 했으므로 영상 전송이 및 메시지 입력 후 Send DataChannel Message 버튼을 클릭해서 문자 전송이 가능합니다.
2) AWS 콘솔에서 Master 와 신호 전송 채널 연결 확인
- 생성한 채널 확인 후 채널의 미디어 재생 뷰어에서 연결된 Master 영상으로 화면으로 전송되고 있는지 확인합니다.
*** 테스트 진행시 생성한 채널은 testchannel1 이며 미디어 재생 뷰어에서는 Master 연결시에만 영상 확인이 가능합니다.
3) Viewer 에서 채널 연결 및 영상 전송
- Start Viewer 버튼을 클릭해서 채널 연결 후 영상을 전송합니다.
*** Start Viewer 버튼을 클릭 후 정상 연결이 되면 화면이 표시됩니다. 연결하려는 디바이스에 웹캠등 영상을 전송할 수 있는 장비가 있어야하며 장비가 없을시 연결은 되지만 화면이 현시되지 않으며 Logs 에 오류가 표시됩니다. (3 개의 채널 모두 테스트 진행)
*** Send Video, Open Datachannel 을 선택 했으므로 영상 전송 및 메시지 입력 후 Send Datachannel Message 버튼을 클릭해서 문자 전송이 가능합니다.
4) AWS 콘솔에서 Viewer 와 신호 전송 채널 연결 확인
- 채널에 Viewer 만 연결한 후 미디어 재생 뷰어에서 화면을 확인하면 Viewer 의 화면은 표시되지 않고 “신호 전송 채널 및 마스터 디바이스 연결중” 이라는 메시지만 확인할 수 있습니다.
*** 채널에서 Master 연결이 해지 되어도 Viewer 연결이 끊어지지는 않지만 신호 전송 채널의 대시보드 에서는 Viewer 화면을 확인할 수 없습니다.
5. WebRTC 기능 테스트 (Master 와 Viewer 통신)
1) 1개의 채널을 사용해서 Master 와 Viewer 연결 테스트
- Master 와 Viewer 을 1개의 채널에 연결 후 정상으로 영상이 전송 되는지 테스트 진행합니다.
- 영상 전송이 정상으로 되는 부분 확인되면 문자를 입력하여 전송 되는지 테스트 진행합니다.
*** 로컬 PC에 찰영 가능한 장비가 있어서 AWS 에서 제공하는 테스트 페이지를 사용하여 연결 및 영상 전송 테스트를 진행하였습니다.
2) 서버 사양에 따른 영상 전송 테스트
- 인스턴스 타입 : t2.medium (vCPU : 2, RAM : 4GiB ) 으로 시작 후 Viewer 에서 채널 연결 및 Master 와 영상 전송 테스트를 진행합니다.
- 인스턴스 타입 : t2.xlarge (vCPU : 4, RAM : 16GiB ) 으로 시작 후 Viewer 에서 채널 연결 및 Master 와 영상 전송 테스트를 진행합니다.
- 인스턴스 타입 : t2.2xlarge (vCPU : 8, RAM : 32GiB ) 으로 시작 후 Viewer 에서 채널 연결 및 Master 와 영상 전송 테스트를 진행합니다.
*** T 타입 인스턴스가 범용이므로 테스트 진행시 사용하였으며 해당 타입보다 CPU가 낮은 경우 테스트 진행시 서버가 멈추는 경우가 있어서 : t2.medium 타입 부터 진행하였습니다.
6. 테스트 진행 결과에 따른 결론
1) AWS 콘솔, 임베드디 방식, 웹 애플리케이션 방식으로 생성된 채널 연결 테스
트 결과
- 서로 다른 방식의 환경에서 채널을 생성하여도 채널의 기본 설정 값은 동일하며 구현된 환경이 달라도 다른 환경에서 생성한 채널 사용 가능 합니다.
2) Master 와 Viewer 통신 테스트 결과
- 1개의 채널에 Master 1대와 Viewer 여러대 동시 연결 가능 합니다.
- Master 와 Viewer 간에 양방향 통신 가능 (영상 전송, 오디오 전송, 문자 전송) 합니다.
- 웹캠 등의 찰영 장비가 없어도 연결이 가능하며 Master 및 다른 Viewer의 실시간 영상 확인 가능 합니다.
- 실시간으로 양방향 통신이 가능하나 전송된 영상은 녹화할 수 있는 기능이 없으므로 별도의 개발이 필요 합니다.
3) 서버 사양에 따른 연결 및 영상 전송 테스트 결과
- 서버 사양을 단계별로 높이며 테스트 진행하였지만 영상이 전송되는 시간은 사양이 높아져도 비슷하며 영상 지연 시간은 1초 미만인 것으로 확인 되었습니다.
지금까지 Kinesis Video Streams with WebRTC 환경을 구성하고 신호 전성 채널 생성, 연결 및 사용하는 방법을 알아보았습니다.
조금 더 자세히 알고 싶으시면, AWS 문서를 참고하실 수 있습니다.
https://docs.aws.amazon.com/kinesisvideostreams-webrtc-dg/latest/devguide/what-is-kvswebrtc.html
문의 사항이 있으시면, NDS Sales팀으로 연락 주시길 바랍니다.
cloud.sales@nongshim.co.kr
SA 김봉진