적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

초보 iOS 개발자의 일상/개발 업무

FFmpeg-mobile / VLC Player

hongssup_ 2021. 7. 31. 22:50
반응형

동영상 재생을 다루는 앱들이 많은데, 동영상 재생에 쓰이는 라이브러리들과 용어들에 대해 탐구해보자. 

nefu - AVFoundation, MobileVLCKit, HaishinKit, mobile-ffmpeg-full, YTLiveStreaming, XCDYouTubeKit

딸기콩 - AVFoundation, MediaPlayer

Heystars - AVFoundation, youtube-ios-player-helper

Soribada - youtube-ios-player-helper

 

Codec 코덱

영상 데이터를 압축하고, 또 압축을 푸는 프로그램을 코덱이라고 한다. 

영상 전송을 위해 용량이 큰 파일을 작게 만들어주는 것이 인코딩, 본래대로 재생할 수 있게 압축을 푸는 것이 디코딩.  

 

HLS (HTTP Live Streaming) 

: 애플이 개발하여 2009년 출시한 HTTP 기반 적응 비트레이트 스트리밍 통신 프로토콜. 

여러 미디어 플레이어, 웹 브라우저, 모바일 기기, 스트리밍 미디어 서버에서 지원되고 있는 가장 대중적인 스트리밍 포맷으로 간주된다. 

 

* 적응 비트레이트 스트리밍 (Adaptive bitrate streaming) : 컴퓨터 네트워크를 경유하여 멀티미디어를 스트리밍하기 위해 사용되는 기술. 과거 대부분의 동영상, 오디오 스트리밍 기술들은 RTSP+RTP 등의 스트리밍 프로토콜을 이용하였으나 오늘날 적응 스트리밍 기술들은 HTTP에 기반을 두며 인터넷 등 대형 분산 HTTP 네트워크 상에서 효율적으로 동작하도록 설계되었다. 소스 콘텐츠가 여러 비트레이트로 인코딩되는, HTTP 경유 비디오 스트리밍 방식의 하나. 

 

RTP (Real-time Transport Protocol) : 실시간 전송 프로토콜

IP 네트워크 상에서 오디오와 비디오를 전달하기 위한 통신 프로토콜. 화상 통화 분야 등의 스트리밍 미디어를 수반하는 통신 등에 사용된다. 

 

RTSP (Real Time Streaming Protocol) : 실시간 스트리밍 프로토콜

스트리밍 데이터를 제어하기 위한 방법을 제공

오디오, 비디오 등 멀티미디어 데이터를 포함하는 미디어 서버를 원격으로 제어하기 위한 목적으로 설계된 네트워크 제어 프로토콜.

스트리밍 데이터 / 미디어 서버를 제어할 목적으로 설계된 네트워크 제어 프로토콜. 

 play, record, pause 등의 명령을 통해 시간 정보를 바탕으로 서버에 접근. 

실제 스트리밍 데이터를 전송하지는 않고, RTP 규약을 사용해 전송계층으로 실제 오디오/비디오 데이터를 전송. 

서버 - 클라이언트 사이의 실시간 미디어 스트리밍 제어를 용이하게 만들어준다. 미디어 서버를 원격으로 제어할 때 사용. 

RTSP client 중에는 FFmpeg, QuickTime, VLC media player 등이 있다. 

 

RTMP (Real Time Messaging Protocol) : 리얼타임 메시징 프로토콜 

오디오, 비디오 및 기타 데이터를 인터넷을 통해 스트리밍할 때 쓰임. 어도비 플래시 플레이어와 서버 사이 통신에 이용됨. 

 

Sample rate :

주로 오디오에서 사용되는, 신호가 디지털 방식으로 샘플링되는 주파수(진동수)로 일반적으로 헤르츠 또는 킬로헤르츠로 표시됨. 1 헤르츠는 초당 하나의 샘플. (1 Hz는 1초에 1번, 2 Hz는 1초에 2번 주기적인 현상이 일어나는 것)

 

bitrate (비트 전송률) : Bits per second 1초의 영상을 구성하는 데이터 크기 

초당 데이터를 저장하는 데 사용되는 비트. 초당 비트 수(bps)를 사용하여 계산. 

1초에 해당하는 영상/오디오를 저장하는 데 얼마의 비트 수를 사용하느냐. 비트레이트가 높을수록 더 많은 정보(비트)를 가지게 되므로 화질/음질은 더 좋아지지만 용량또한 커지게 된다. 

mp3 파일의 일반적인 비트 전송률은 128kbit/s(표준), 192kbit/s(중간 품질), 256kbit/s(고품질) 및 320kbit/s(최고 품질)

표준보다 낮은 비트 전송률은 오디오 품질을 저하시킴.

비트레이트 방식

- CBR(Constant BitRate) 고정 비트레이트 

처음부터 끝까지 고정된 비트레이트를 사용하여 프레임을 압축. 인코딩 하는데 걸리는 시간이 짧다는 장점이 있지만, 처음부터 끝까지 항상 고정된 비트레이트만을 사용하기 때문에 움직임이 많은 곳에서는 화질 저하가 생기게 되므로 움직임이 많은 동영상(스포츠, 액션 영화 등)에 사용하기에는 부적절하다. 

- VBR(Variable BitRate) 가변 비트레이트

Average(보통), Max, Min 의 세가지 방식으로 압축. 평상시에는 Average 비트를 사용하다가 움직임이 빠른 곳에서는 최대 비트를 사용하고 움직임이 없는 곳에서는 최소 비트만을 사용하여 압축을 하게 된다. 경우에 따라 CBR 방식에 비해 더 좋은 화질을 만들어 효율적일 수 있지만 압축하려는 비디오 전체를 한번 읽고 압축을 행하기 때문에 압축하는데 걸리는 시간이 보통 CBR보다 두배 이상 걸리게 된다.  

 

frame rate : 

1초 동안 재생되는 프레임 수. (초당 이미지 갯수) 

 

 

FFmpeg (fast forward MPEG)

음성 및 영상 스트림을 다양한 종류의 형태로 기록하고 변환(디코딩/인코딩)하는 오픈소스 프로젝트. 

쉽게 말하면, 동영상을 재생할 때 쓰이는 코덱으로 거의 대부분의 비디오 관련 프로그램들에 사용되고 있다.

FFmpeg에서 제공하는 것들

- ffmpeg : 미디어 포맷 변환 도구

- ffserver : 라이브 방송을 하는 멀티미디어 스트리밍 서버

- libavcodec : 오디오/비디오 코덱 라이브러리

- libavformat : 멀티미디어 컴테이너의 디먹서/먹서 라이브러리

- libavdevice : 입출력 장치 제어 라이브러리

- libavfilter : 이미지 필터 라이브러리

- libswscale : 이미지 처리 라이브러리

- libswresample : 오디오 처리 라이브러리 

 

 

VLC 미디어 플레이어 

오픈소스 크로스 플랫폼 미디어 플레이어. (미디어 재생 + 관리, 메타데이터 편집, 컨버터, 스트리밍 등 광범위한 기능 보유)

iOS에서 비디오 재생을 다루기 위해서는 기본적으로 AVFoundation 프레임워크의 AVPlayer를 많이들 사용하지만, AVPlayer에서 지원하지 않는 미디어가 많아 다른 미디어 플레이어를 찾아보게 된다. 

그중의 하나가 VLC SDK에서 나온 VLC MediaPlayer로, 아주 다양한 형식의 미디어를 지원하고 있다. 

하지만 SDK 설치와 사용법에 대해 가이드가 거의 없다는 것이 문제.. 

iOS에서 사용하기 위해서는 MobileVLCKit을 설치하여 사용할 수 있다.  

 

 

 

 

 

 

 

YTLiveStreaming

: YTLiveStreaming is an iOS framework which can be used for creating live broadcasts and video streams on YouTube using YouTube Live Streaming API

 

참고 : 

https://medium.com/@essammohamedomran/swift-installing-and-using-vlckit-for-tvos-ios-and-macos-dc805e9ca117

728x90
반응형