개요
실시간으로 스트리밍을 할 수 있는 방안을 찾기 위해 RTP 를 검토하는 중, 이를 지원하는 live555 라이브러리를 이용하여 개발 환경을 구축하는 방법과 간단한 테스트를 해볼 수 있는 내용을 공유하고자 이 글을 작성한다.
Live555 library란?
Live555는 RTP/RTCP, RTP 를 이용해서 멀티미디어 스트리밍을 하기 위해 사용할 수 있는 라이브러리이다. Linux 를 비롯한 Unix 계열과 Windows 플랫폼 모두 사용 가능하다. MPEG, H.265, H.264, JPEG 등의 비디오와 AAC와 MP3 같은 오디오 전송을 기본적으로 지원하고 있다. 다음 URL 로 홈페이지에 방문할 수 있다.
http://www.live555.com/liveMedia/
live555 source code 다운로드
다음 링크를 이용해서 최신 소스 코드를 받을 수 있다. Linux 경우에는 binary 파일로 받을 수 있으나, 내 플랫폼 환경에 가장 최적화된 라이브러리를 사용하는 것이 좋을 것이므로, 직접 빌드해서 사용하는 것을 권장한다.
http://www.live555.com/liveMedia/public/live555-latest.tar.gz
다운로드 받아서 압축을 해제하면 소스 코드는 아래와 같은 구조로 되어 있다. 관심을 둬야 할 부분은 BasicUsageEnvironment, groupsock, liveMedia, UsageEnvironment 디렉토리에 포함되어 있다. 이 디렉토리에 포함되어 있는 소스 코드를 컴파일하여 라이브러리로 구성해, RTP/RTSP 용 서버 및 클라이언트로 개발하는데 이용할 수 있다.
Linux 용으로 빌드하는 과정은 어렵지 않기 때문에, 이 글에서는 Windows 환경에서 구축하는 과정을 정리한다.
win32config 파일 수정
win32config 파일은 visual studio 에 따라 변경해서 사용해야 한다. 현재 visual studio 2015 가 설치되어 있는 환경에서 작업한 내용을 정리한다.
- Debug 용으로 build 하기 위해서 win32config 파일의 NODEBUG=1 을 주석처리.
- include <ntwin32.mak>를 주석 처리. 윈도우 버전이나 CPU 종류 등에 따른 컴파일러 옵션들이 정의되어 있는 파일인데, 현재는 필요 없는 것으로 보인다.
- TOOLS32 값으로 설치된 visual studio 에 맞는 위치로 지정.
- LINK_OPTS_0 값을 msvcrt.lib 로 수정
수정한 결과는 아래의 캡쳐 화면과 같이 된다. 빨간 사각형으로 표시된 부분이 수정된 부분이다.
라이브러리 빌드
MSBuild Command Prompt for VS2015 실행한다. Live555는 visual studio 환경에 맞는 sln 이나 prj 파일을 제공하지 않으며, mak 파일로 빌드하도록 되어 있다. 이 프롬프트 상에서는 nmake를 이용해서 빌드하기 용이하도록 관련 환경 변수 내용이 자동으로 설정된다.
Live555 소스 코드의 가장 상위에 genWindowsMakefiles.cmd 파일이 있으며, 이 배치 파일을 실행하게 되면, 윈도우에서 nmake 를 이용해서 빌드할 수 있도록 mak 파일이 생성된다.
.\genWindowsMakefiles
BasicUsageEnvironment, groupsock, liveMedia, UsageEnvironment 를 각각 진입하여, nmake 실행하면 각 디렉토리마다 라이브러리 파일을 얻을 수 있다.
cd BasicUsageEnvironment
nmake /B –f BasicUsageEnvironment.mak
cd groupsock
nmake /B –f groupsock.mak
cd liveMedia
nmake /B –f liveMedia.mak
cd UsageEnvironment
nmake /B –f UsageEnvironment.mak
라이브러리를 이용한 테스트 프로그램 빌드 및 디버깅 환경 구축
H.264 스트리밍을 지원하는 가장 간단한 서버 test 프로그램인 testH264VideoStreamer.cpp 를 이용해서 프로그램 빌드 및 디버깅 환경을 구축해본다.
우선, visual studio 에서 empty project 하나 생성한다. mediaServer 라는 이름으로 project 를 생성했다고 가정하겠다.
live555 소스 코드에서 testProgs 디렉토리에 들어있는 testH264VideoStreamer.cpp를 Project 디렉토리에 복사하고 project 에 소스 파일을 추가한다.
Live555의 소스 파일 – 실제로는 헤더 파일과 라이브러리 파일만 필요하다 – 의 위치를 편의상 절대 위치로 지정하나, 프로젝트 자체로 구성하기 위해서는 프로젝트 내에 이 파일들을 포함시키고 상대적인 위치로 설정하는 것이 용이하다.
프로젝트 프로퍼티 메뉴로 진입해서 아래의 그림과 같이 각 설정값을 입력한다.
- C/C++ -> General -> Additional Include Directories
Live555 라이브러리를 사용하기 위한 헤더 파일의 위치를 설정한다.
- C/C++ -> Preprocessor -> Preprocessor Definitions
Live555가 windows 의 CRT 에 안전하지 않은 함수들을 사용하는 것으로 보인다. 이것을 모두 대응할 수는 없기 때문에, 이 함수도 포함될 수 있도록 _CRT_SECURE_NO_WARNINGS를 추가시켜준다. 포함하지 않을 경우에는 빌드 시 에러가 발생한다.
- Linker -> General -> Additional Library Directories
필요한 라이브러리는 libBasicUsageEnvironment.lib, libgroupsock.lib, libliveMedia.lib, libUsageEnvironment.lib 이다.
이 라이브러리들이 위치한 디렉토리를 지정한다.
- Linker -> Input -> Additional Dependencies
필요한 라이브러리를 지정한다. Live555 는 winsock 을 이용하도록 되어 있으므로, wsock32.lib 를 추가적으로 넣어줘야 한다.
동영상 파일을 H.264 스트림으로 추출
testH264VideoStreamer 프로그램은 영상 입력으로 H.264 스트림을 필요로 한다. 이것은 h.264 로 압축된 동영상으로부터 쉽게 추출할 수 있다.
ffmpeg -i h264.mp4 -c:v copy -bsf:v h264_mp4toannexb -an out.h264
추출한 스트림을 실행파일 혹은 project 위치로 옮긴다.
디버깅 혹은 실행.
Visual studio 의 Start Debugging(F5)을 실행하거나 현재는 실행파일이 정적으로 링크되어 있기 때문에, 바로 실행해주면 된다. 단, 입력 스트림으로 “test.264” 를 찾도록 되어 있기 때문에, 앞서 추출한 out.h264를 test.264로 이름을 변경해줘야 한다.
Stream을 끌어서 보기 위해서는, VLC player와 같이 RTSP/RTP 를 지원하는 프로그램을 이용한다.
'잡(job)기술 > ffmpeg 라이브러리' 카테고리의 다른 글
명령 라인 처리 옮기기 (0) | 2022.04.01 |
---|---|
remuxing.c 를 c++로 wrapping하기 (0) | 2022.03.30 |
remuxing.c 빌드하기 (0) | 2022.03.28 |
av_frame_free에 대한 고찰 (0) | 2018.03.13 |
Audio sample과 frame (0) | 2018.03.13 |