이제 클라이언트에서 녹음한 파일이 서버로 전송이 되었으니, 이를 잘 가공해서 스트리밍 할 수 있도록 해 보아야 한다.

 

음성 파일을 ts 파일(Transport stream)으로 나누고, 그 리스트들을 가지고 있는 m3u8 manifest 파일을 생성해야 한다.

 

 

일단 음성 파일을 MPEG-TS 파일로 변경하는 것은 내 개인 능력으로는 터무니 없이 불가능하다는 생각이 드는 것은 자명하다(?)

 

따라서 무조건 ffmpeg 코덱을 이용해서 변환을 해야 하는데, m3u8파일은 포맷에 맞춰서 직접 만들어야 할 줄 알았다.

 

왜냐면 text파일 형식에 간단해보였기에... 하지만 ffmpeg에서 m3u8 파일 역시 생성해주는 옵션들이 있었다.

 

 

Nodejs 모듈 중에서 fluent-ffmpeg이라는 모듈이 있었다.

https://github.com/fluent-ffmpeg/node-fluent-ffmpeg

 

fluent-ffmpeg/node-fluent-ffmpeg

A fluent API to FFMPEG (http://www.ffmpeg.org). Contribute to fluent-ffmpeg/node-fluent-ffmpeg development by creating an account on GitHub.

github.com

 

맨 처음 요녀석을 보고 그냥 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

 

Einstrasse/hls-service

Nodejs base hls server. Contribute to Einstrasse/hls-service development by creating an account on GitHub.

github.com

 

그리고 클라이언트에서 음성 파일들을 보내는데, 이전에는 길게 녹음해서 한번 큰 덩어리를 보내는 식이었는데,

 

라이브 스트리밍이라는 컨샙을 맞추기 위해서, 짧은 시간 동안 녹음한 내용을 주기적으로 서버로 보내도록 코드를 변경해 보았다.

 

여기까지 변경한 코드 스냅샷 부분이다.

 

https://github.com/Einstrasse/hls-service/tree/d55e4a6cb72f7d59917b4d62905b43db31f29039

 

Einstrasse/hls-service

Nodejs base hls server. Contribute to Einstrasse/hls-service development by creating an account on GitHub.

github.com

 

+ Recent posts