이제 클라이언트에서 녹음한 파일이 서버로 전송이 되었으니, 이를 잘 가공해서 스트리밍 할 수 있도록 해 보아야 한다.
음성 파일을 ts 파일(Transport stream)으로 나누고, 그 리스트들을 가지고 있는 m3u8 manifest 파일을 생성해야 한다.
일단 음성 파일을 MPEG-TS 파일로 변경하는 것은 내 개인 능력으로는 터무니 없이 불가능하다는 생각이 드는 것은 자명하다(?)
따라서 무조건 ffmpeg 코덱을 이용해서 변환을 해야 하는데, m3u8파일은 포맷에 맞춰서 직접 만들어야 할 줄 알았다.
왜냐면 text파일 형식에 간단해보였기에... 하지만 ffmpeg에서 m3u8 파일 역시 생성해주는 옵션들이 있었다.
Nodejs 모듈 중에서 fluent-ffmpeg이라는 모듈이 있었다.
https://github.com/fluent-ffmpeg/node-fluent-ffmpeg
맨 처음 요녀석을 보고 그냥 ffmpeg을 nodejs로 포팅한 대단한 녀석이라고 생각했다.
ffmpeg은 딱봐도 계산량이 많아서 C나 C++등으로 작성된 네이티브 바이너리일 것이고, Nodejs는 Javascript 런타임인데, Javascript로 코덱을 만든다라 대단하다 생각했는데
사실 fluent-ffmpeg 이녀석은 실제 ffmpeg 바이너리를 가지고 있을 때, ffmpeg의 수많은 인자들을 javascript API로 바꾸어주는 녀석정도 밖에 안되는 녀석이었다. ffmpeg 실행 커맨드라인 래퍼(wrapper) 정도 인 녀석이다.
그래도뭐 chile_process.exec("ffmpeg -args"); 요런식으로 하는 것 보다는 좀 나으니, 사용해보도록 했다.
여기 까지 작성해본 코드 스냅샷이다.
https://github.com/Einstrasse/hls-service/tree/2d41cf29fa853142e891d4cbedb638e9b66b3ba7
그리고 클라이언트에서 음성 파일들을 보내는데, 이전에는 길게 녹음해서 한번 큰 덩어리를 보내는 식이었는데,
라이브 스트리밍이라는 컨샙을 맞추기 위해서, 짧은 시간 동안 녹음한 내용을 주기적으로 서버로 보내도록 코드를 변경해 보았다.
여기까지 변경한 코드 스냅샷 부분이다.
https://github.com/Einstrasse/hls-service/tree/d55e4a6cb72f7d59917b4d62905b43db31f29039
'개발 & CS 지식' 카테고리의 다른 글
Win bash 설정 (WSL: Windows Subsystem for Linux) (0) | 2019.12.16 |
---|---|
HLS를 이용한 라이브 라디오 방송 웹 앱 개발기 (5) (0) | 2019.07.17 |
HLS를 이용한 라이브 라디오 방송 웹 앱 개발기 (3) (0) | 2019.07.17 |
[Apple iOS 튜토리얼] Swift로 iOS 앱 개발(1) - Start Developing iOS Apps (Swift) Jump Right In (0) | 2019.01.10 |
Node.js Async 이용하여 콜백 함수 풀어내기 (0) | 2018.06.23 |