6. 1. googlesamples/android-Camera2Video 프로젝트를 연다.
다음 커맨드를 실행합니다.
$ git clone https://github.com/googlesamples/android-Camera2Video.git
안드로이드 스튜디오를 실행하여 android-Camera2Video/kotlinApp 프로젝트를 open합니다.
20분만에 라이브 송출 앱 만들기
14. 라이브 송출의 기본 구조
비디오 압
축
오디오 압축
네트워크
전송
이미지 출처
https://svgsilh.com/ko/image/1085704.html
https://pixabay.com/ko/vectors/%EC%95%84%EC%9D%B4%EC%BD%98-%EB%A7%88%EC%9D%B4%ED%81%AC-
%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%ED%8F%B0-1298908/
https://commons.wikimedia.org/wiki/File:Linecons_small-cloud.svg
raw
video
raw
audio
encoded
video
encoded
audio
15. 라이브 송출의 기본 구조
비디오 압
축
오디오 압축
네트워크
전송
raw
video
raw
audio
encoded
video
encoded
audio
16. 라이브 송출의 기본 구조
비디오 압
축
오디오 압축
네트워크
전송
raw
video
raw
audio
encoded
video
encoded
audio
17. 라이브 송출의 기본 구조
H.264
AAC
RTMP
raw
video
raw
audio
encoded
video
encoded
audio
22. e.g. 1080p 30fps 1분 영상
• Uncompressed Data (NV21) : 1920 * 1080 * 3 / 2 * 30 * 60 = 5.339 GB
• Compressed Data (AVC, 4 Mbps CBR) : 4,000,000 / 8 * 60 = 28.610 MB*
• 약 186 배 차이
*계산상의 수치. 실제 적용시 결과가 상이할 수 있음
MediaCodec
5.339 GB
28.61 MB
0 1000 2000 3000 4000 5000 6000
size (MB)
Uncompressed Data vs. Compressed Data
Compressed Data Uncompressed Data
23. e.g. AVC baseline@L4.1, 1920x1080@30fps, 4Mbps, x4, 1분 영상
• 하드웨어 : 약 8s 834ms
• 소프트웨어: 약 1m 1s
• 약 7배* 차이
*LGE LM-G710N Android 8.0.0 API 26 (LG-G7) 기준
기기별로 결과가 상이할 수 있음.
MediaCodec
1m 1s
8s 834ms
0 10 20 30 40 50 60 70
elapsed (s)
Hardware vs. Software
Hardware Software
50. RTMP 란?
- 실시간 미디어 전송을 위한, Adobe의 독점 컴퓨터 통신 규약
- Macromedia inc.에서 개발
- 주로 1935 포트 사용
- TCP 기반
- ( 메시지 | 미디어 데이터 ) 패킷
- 메시지: AMF(Action Message Format) 을 통해 직렬화
- 미디어 데이터: FLV tags (video tags, audio tags)
참조:
http://wwwimages.adobe.com/www.adobe.com/content/dam/acom/en/devnet/rtmp/pdf/rtmp_specification_1.0.pdf
https://www.adobe.com/content/dam/acom/en/devnet/pdf/amf-file-format-spec.pdf
https://www.adobe.com/content/dam/acom/en/devnet/flv/video_file_format_spec_v10_1.pdf
RTMP
53. • Pros?
- 구조적으로 심플하다.
- Packet 오버헤드가 적다.
- 낮은 레이턴시/딜레이
• Cons?
- 오래돼서 일부 환경에서는 지원하지 않는다. (e.g. 브라우저)
- 애플이 싫어합니다.
- 방화벽 문제
- CDN 문제!!!
- Full-duplex라서 세션 유지에 대한 오버헤드가 크다.
- H.265 같은 최신 코덱은 스펙에 없다. (별도 커스터마이징 필요)
따라서 송출단은 rtmp, 시청단은 http기반 프로토콜로 구성
RTMP
54. Tip (삽질 내용)
• 비디오만 전송하면 제대로 재생되지 않는다. (오디오 only 또는 오디오+비디오)
RTMP
56. 공통기술개발에서는...
- 보다 안정적인 송출과 좋은 화질 (QoE)
- 다양한 코덱 및 프로토콜
- Multi-threading 및 성능 최적화
- 딥러닝 / 머신러닝
- 다양한 비디오/오디오 효과
- 2D/3D graphics
- Computer vision
- Digital signal processing
마치며