동영상 스트리밍 서비스 구현 방안

이상문
3 min readOct 2, 2021

--

유튜브에서 영상 받기

유튜브 영상을 받을 수 있는 툴이 있다. youtube-dl 이라는 툴인데 다음 사이트를 통해 받을 수 있다.

윈도우용은 exe 파일이 제공되기 때문에 파일을 다운로드 받아서 그대로 사용하면 된다.

만약, 유튜브에서 아이유의 블루밍 뮤직비디오를 검색했다면,

URL은 `https://www.youtube.com/watch?v=D1PvIWdJ8xo`

중요한 것은 `D1PvIWdJ8xo` 값이다. 이 영상은 다음 명령으로 받을 수 있다.

youtube-dl D1PvIWdJ8xo

youtube-dl 에는 많은 옵션이 있다. 그러나, 동영상 받는 것만 사용한다면 이것만으로도 충분하다. 유투브의 제목과 동일한 이름으로 해서 파일로 저장되는 것 같다.

이제는 ffmpeg으로 동영상을 서비스할 서버를 구동하는 것이다. 출력하는 포멧을 여러가지로 할 수 있지만, flv로 시도한다. 서비스할 수 있는 포멧은 여러가지겠지만 처음 성공한 방식이 flv이라서 그냥 이것을 사용한다.

ffmpeg -i blueming.mp4 -c copy -f flv tcp://localhost:7000?listen

다운로드 받은 동영상 파일 이름을 입력하기 편하게 blueming.mp4로 바꿨다. -c 는 코덱 옵션으로 원본에 있는 코덱을 그대로 사용하는 것으로 했다. 아니면 출력되는 포멧에 맞춰서 ffmpeg이 자동으로 맞추기 때문에 트랜스코딩이 발생할 수 있고, CPU를 많이 잡아 먹는다. 서비스하는 프로토콜은 tcp를 사용하고, 접속을 대기하도록 하기 위해서 ?listen을 추가로 넣어준다.

이제 tcp로 서비스되는 동영상을 재생할 차례이다.

ffplay -i tcp://localhost:7000

그러나, 재생이 되지 않는다. 서버 측에서 난 에러를 보면,

[flv @ 000001ac1eecd100] FLV does not support sample rate 48000, choose from (44100, 22050, 11025)
[flv @ 000001ac1eecd100] Audio codec opus not compatible with flv
Could not write header for output file #0 (incorrect codec parameters ?): Function not implemented

즉, flv 포멧에서는 opus 코덱을 지원하지 않는 것을 알 수 있다.

flv 에 맞는 코덱을 찾아보기엔 게으르다. 오디오는 트랜스코딩할 때 비디오에 비해 상대적으로 부하를 덜 먹는다. ffmpeg에 자체적으로 트랜스코딩해서 서비스하도록 맡기자.

ffmpeg -i blueming.mp4 -c:v copy -f flv tcp://localhost:7000?listen

뭐가 달라진거냐고? -c copy를 -c:v copy로 바뀌었다. 즉, 비디오에 대해서만 copy하고 오디오는 flv에 맞춰서 변환해달라는 것이다.

다시 ffplay로 재생을 시도하자. 멋진 아이유 뮤직비디오가 나오는 것을 확인할 수 있다.

--

--

이상문
이상문

Written by 이상문

software developer working mainly in field of streaming, using C++, javascript

No responses yet