FFmpeg은 라이브 스트리밍 프로젝트를 진행하면서 처음 접하게 되었다
ARM Cortex Board에 FFmpeg을 사용하는 프로그램을 개발하기 위하여 cross-compile하여 shared library를 보드에 설치하였었다
프로젝트의 구체적인 내용은 WebCam, Mic Device로부터 video, audio를 각각 읽어와 HTTP 프로토콜을 통해 live streaming하는 것이었다
FFmpeg, cross-compile 등을 처음 접하면서 헤맸던 경험을 바탕으로 하여,
FFmpeg으로 Device에서 stream을 읽어오는 프로젝트를 진행하기 위한 이상적인 진행순서를 작성한다.
물론 개인적인 기준이다.

최종 구현은 아래와 같다
cross-compile -> ARM Linux에서 Device -> streaming
cross-compile보다는 streaming을 하는 프로그램 코딩이 더 우선순위가 높아야한다. cross-compile하기전에 코딩을 먼저 진행해야 한다는 의미이다
이것이 가능한 이유는 FFmpeg의 사용법이 Windows나 Linux나 차이가 없기 때문이다
video stream의 container format이 Windows는 dshow이고, Linux는 v4l2라는 것 외에는 동일한 코드를 사용한다
즉 Windows에서 FFmpeg 프로그램을 먼저 코딩해 보라는 것이 첫번째

Windows에서 FFmpeg 코딩을 해보려고 해도, 카메라가 없을 수 있다. 하지만 그것은 문제가 되지 않았다
input으로 카메라가 아닌 동영상 파일을 사용하면 된다
이것 또한 format, codec의 차이 뿐 큰 맥락에서는 거의 동일하다
카메라를 읽어오기 전에 동영상 파일부터 읽어보라는 것이 두번째
(참고로 FFmpeg에서 AVIO 함수들은 카메라에 사용할수 없었다)

필자는 FFmpeg이 Windows와 Linux에서 어떤 차이가 있는지, device와 video file을 읽어오는데에 있어서 어떤 차이가 있는지, container format이 무엇이고 codec이 무엇인지 아는것이 전무했기 때문에 많이 헤매었고,
위 내용은 그 과정에서 알게된 것들이다

요약하자면
Windows에서 동영상 파일을 읽어보고,
카메라 스트림을 읽어보고, 스트리밍을 해보고,
마지막에 cross-compile하여 ARM Linux Board에서 구현해놓은 프로그램을 실행해보는
순서가 이상적이라고 생각한다

다음에 비슷한 프로젝트를 진행할 때 참고하면 시간을 효율적으로 관리할 수 있을것 같다


WRITTEN BY
hojongs
블로그 옮겼습니다 https://hojongs.github.io/