2020. 4. 14. 22:50ㆍDev
Video streaming을 Client(Android platform)에서 구현하기 위해 전체적인 구조와 메커니즘, 프로토콜을 확인하고 기록하기 위해 작성하는 글입니다.
Streaming?
스트리밍(영어: streaming)은 주로 소리(음악)나 동영상 등의 멀티미디어 파일을 전송하고 재생하는 방식의 하나이다.
보통 파일은 내려받고 난 뒤에 열리는 작업을 하지만, 동영상과 같이 크기가 큰 파일을 재생할 때에는 내려받는 데에 시간이 오래 걸릴 수 있다. 파일을 다운로드하는 것과 더불어 재생을 함으로써 기다리는 시간을 크게 줄일 수 있다.
이 기술을 응용하여, 디브이 카메라 등을 사용해 컴퓨터 네트워크 위에 스트리밍 하여(스트리밍-streaming-은 "흘리다"라는 뜻) 실시간 중계도 가능하다.
Video coding format
비디오 스트림은 파일 크기를 더 작게 만들기 위해 비디오 코딩 포맷을 사용하여 압축된다. 비디오 코딩 포맷에는 H.264, HEVC, VP8, VP9이 포함된다.
H.264 (MPEG-4 AVC)
- 기존의 표준(MPEG-2, H.263, MPEG-4 파트 2)과 비교했을 때, 낮은 (절반 이하의) 비트레이트에서 비슷하거나 더 좋은 화질을 얻을 수 있도록 개발되었다.
- 또한 비메오, 유튜브, 아이튠즈 스토어 영상 등의 인터넷 스트리밍 서비스와 어도비 플래시 플레이어 및 마이크로소프트 실버라이트 등의 웹 소프트웨어, 다양한 HDTV 방송에 널리 사용된다 (= 가장 많이 사용되는 표준)
Container bitstream
인코딩 된 오디오와 비디오 스트림들은 MP4, FLV, WebM, ASF, ISMA 등의 컨테이너 비트스트림(바이트가 나열된 것으로 일반적으로 각각 8비트로 되어 있으며 특별한 경우의 비트스트림으로 취급할 수 있다.) 내에 조합된다.
Transfer Protocol
비트스트림은 어도비의 RTMP, RTP 등의 전송 프로토콜을 사용하여 스트리밍 서버에서 스트리밍 클라이언트로 전달된다. 2010년대에는HLS, 마이크로소프트의 스무스 스트리밍(Smooth Streaming), 어도비의 HDS, 또 MPEG-DASH 등의 비 사유 포맷 등의 기술들이 등장하여 사유 전송 프로토콜을 사용하지 않고도 HTTP를 통한 가변 비트레이트 스트리밍을 가능케 하였다.
- RTMP
- RTP
- HLS
- Smooth Streaming
- HDS
- MPEG-DASH
Control Protocol
스트리밍 클라이언트(최종 사용자)는 MMS 또는 RTSP와 같은 제어 프로토콜을 사용하여 스트리밍과 통신할 수 있다.
- MMS
- RTSP
Video streaming flow
[ Server ]
1. 비디오
2. 압축 (use coding format)
3. Encoding video
4. Transfer (Bitstream)
[ Client ]
4. Transfer (Bitstream)
5. Decoding video (android.media.MediaCodec?)
6. Streaming
7. Communication to server(Control Protocol)
Part1 ) Video Streaming Structure
Part2 ) Transfer Protocol
Part3 ) Decoding video
Part4 ) Streaming
Part5 ) Control Protocol
Reference
'Dev' 카테고리의 다른 글
Rxjava interval로 Timer구현하기 (0) | 2020.04.11 |
---|