Ant Media Server와 함께 HLS 스트리밍을 활성화하라: HLSMerger로 스트림을 원활하게 병합하세요.
- wjlee202501
- Feb 5
- 3 min read
HLS (HTTP Live Streaming) 스트리밍은 CDN(Content Delivery Networks)과의 호환성 덕분에 대규모 청중에게 스트리밍하기에 적합하여 널리 사용되는 프로토콜입니다. 전통적으로 HLS 스트림은 약 8-10초의 지연 시간이 있지만, 저지연 HLS(LL-HLS)를 사용하면 이 시간을 약 3초로 줄일 수 있습니다. Ant Media Server는 HLS와 LL-HLS를 모두 지원합니다.
그러나 콘텐츠 제작자와 방송사는 서로 다른 해상도와 오디오 트랙을 단일 스트림으로 병합하는 데 어려움을 겪고 있습니다. 이에 스트리머는 각 해상도와 오디오 옵션에 대해 별도의 스트림을 유지해야 하므로 비효율적이고 관리하기 어렵습니다. 이러한 분할로 인해 서버 부하가 증가하고, 대역폭 사용량이 높아지며, 시청자와 방송사 모두에게 더 복잡한 워크플로우가 발생합니다.
이 블로그 게시물에서는 이러한 문제를 해결하는 새로운 HLSMerger 플러그인을 소개합니다:
여러 해상도를 가진 HLS 스트림 생성 – 다양한 인터넷 속도를 가진 시청자를 위해 원활한 품질 전환을 제공합니다.
여러 오디오 트랙을 가진 HLS 스트림 생성 – 사용자들이 단일 스트림에서 다른 언어 또는 해설 트랙을 선택할 수 있도록 합니다.
플러그인 설치부터 시작해 보겠습니다.
HLSMerger 플러그인 빌드 및 설치
플러그인 빌드
Clone the Ant Media Plugins repository.
git clone https://github.com/ant-media/Plugins.git
Navigate to the HLSMergerPlugin folder.
cd Plugins
cd HLSMergerPlugin
Run the following Maven command to build the plugin:
mvn clean install -Dmaven.javadoc.skip=true -Dmaven.test.skip=true -Dgpg.skip=true
The HLSMerger.jar file will be created in the target folder.
플러그인 설치
Copy the HLSMerger.jar file to the ant media server’s plugins directory.
sudo cp HLSMerger.jar /usr/local/antmedia/plugins/
Restart the Ant Media Server service.
sudo chown -R antmedia:antmedia /usr/local/antmedia
sudo service antmedia restart
위에서 언급한 두 가지 방법의 테스트를 진행해 보겠습니다.
여러 해상도로 HLS 스트림 생성
여러 해상도로 스트리밍하는 것은 적응형 비트레이트 스트리밍(ABR)에 필수적입니다. ABR은 시청자의 인터넷 속도에 따라 동적으로 비디오 품질을 조정하여 원활한 시청 경험을 제공합니다. 그러나 ABR은 CPU 집약적인 트랜스코딩을 필요로 합니다. Ant Media Server는 ABR을 지원하지만, 일부 사용자는 클라이언트 측에서 이 프로세스를 처리하기를 선호할 수 있습니다.
HLSMerger 플러그인은 사용자가 다양한 해상도로 스트림을 생성하고 이를 단일 HLS 마스터 파일로 병합할 수 있도록 하여 이러한 문제를 해결합니다. 이를 통해 서버 측의 트랜스코딩이 필요 없게 되어 CPU 사용량을 줄일 수 있습니다.

Usage
1단계: 다양한 해상도와 비트레이트로 여러 RTMP 스트림을 게시하려면, FFmpeg을 사용하여 다음 명령어를 실행하세요:
ffmpeg -re -stream_loop -1 -i src/test/resources/test_video_720p.flv -codec copy -f flv rtmp://localhost/LiveApp/stream1
ffmpeg -re -stream_loop -1 -i src/test/resources/test_video_360p.flv -codec copy -f flv rtmp://localhost/LiveApp/stream2
2단계: 이러한 스트림이 서버에 게시되면, 다음 REST API 호출을 사용하여 병합하세요.
export MASTER_M3U8=merged_stream
export SERVER_ADDR=localhost
curl -X POST -H "Accept: application/json" -H "Content-Type: application/json" \
http://${SERVER_ADDR}:5080/LiveApp/rest/v1/hls-merger/multi-resolution-stream/$MASTER_M3U8 -d '["stream1", "stream2"]'
이 작업은 스트림의 다양한 해상도를 가리키는 단일 마스터 HLS 파일을 생성합니다.
3단계: 출력 스트림 재생 출력 파일은 애플리케이션(LiveApp)의 스트림 폴더에 생성됩니다. URL은 다음과 같이 됩니다:
호환되는 HLS 플레이어를 사용하여 2단계에서 생성된 m3u8 파일 URL을 재생하세요. 예를 들어, hls.js에서 다음과 같이 할 수 있습니다:
마스터 파일 URL을 이미지와 같이 URL 필드에 복사합니다.
"Apply" 버튼을 클릭합니다. 플레이어가 스트림 재생을 시작할 것입니다.
"Quality-levels" 버튼을 클릭합니다. 플레이어 아래에 사용 가능한 해상도가 표시될 것입니다.
원하는 해상도를 선택하여 품질을 전환합니다.

4단계: 병합된 스트림을 삭제하려면, 아래 API를 호출하세요:
curl -X DELETE -H "Accept: application/json" -H "Content-Type: application/json" \
http://${SERVER_ADDR}:5080/LiveApp/rest/v1/hls-merger/multi-resolution-stream/$MASTER_M3U8
2. 여러 오디오 트랙으로 HLS 스트림 생성
여러 오디오 트랙을 단일 비디오 스트림에 추가하는 것은 다국어 스트리밍에 이상적입니다. HLSMerger 플러그인은 사용자가 여러 오디오 스트림을 비디오 스트림과 병합하여 단일 HLS 재생 목록(M3U8 파일)으로 만드는 것을 가능하게 합니다. HLS 플레이어는 이러한 오디오 옵션을 시청자에게 제공하여 원하는 언어 또는 오디오 트랙을 선택할 수 있도록 합니다.

이를 달성하기 위해, 먼저 FFmpeg을 사용하여 비디오 스트림과 별도의 오디오 스트림을 생성하세요.
1단계: Ant Media Server 대시보드의 LiveApp 애플리케이션 설정에서 세그먼트 지속 시간을 10초로 설정하세요.
2단계: 비디오 스트림 생성
ffmpeg -re -stream_loop -1 -i src/test/resources/test_video_720p.flv -an -codec copy -f flv rtmp://localhost/LiveApp/videoStream
3단계: 오디오 스트림 생성
ffmpeg -re -stream_loop -1 -i src/test/resources/test_video_720p.flv -vn -codec copy -f flv rtmp://localhost/LiveApp/audiostream1
ffmpeg -re -stream_loop -1 -i src/test/resources/test_video_720p.flv -vn -codec copy -f flv rtmp://localhost/LiveApp/audiostream2
4단계: 다음 REST API 호출을 사용하여 오디오 스트림을 비디오 스트림과 병합하세요.
export MASTER_M3U8=merged_stream
export SERVER_ADDR=localhost
curl -X POST -H "Accept: application/json" -H "Content-Type: application/json" \
http://${SERVER_ADDR}:5080/LiveApp/rest/v1/hls-merger/videoStream/multi-audio-stream/$MASTER_M3U8 -d '["audiostream1", "audiostream2"]'
병합이 완료되면, M3U8 파일은 HLS의 오디오 그룹 기능을 사용하여 호환 가능한 플레이어에서 오디오 선택을 가능하게 합니다.
5단계: 출력 스트림 재생 출력 파일은 애플리케이션(LiveApp)의 스트림 폴더에 생성됩니다. URL은 다음과 같이 됩니다:
호환되는 HLS 플레이어를 사용하여 2단계에서 생성된 m3u8 파일 URL을 재생하세요. 예를 들어, hls.js에서 다음과 같이 할 수 있습니다:
마스터 파일 URL을 이미지와 같이 URL 필드에 복사합니다.
"Apply" 버튼을 클릭합니다. 플레이어가 스트림 재생을 시작할 것입니다.
"Audio-tracks" 버튼을 클릭합니다. 플레이어 아래에 사용 가능한 오디오 트랙이 표시될 것입니다.
원하는 오디오 트랙을 선택하여 청취합니다."

6단계: 이 병합된 스트림을 삭제하려면, 다음을 호출하세요:
curl -X DELETE -H "Accept: Application/json" -H "Content-Type: application/json" http://localhost:5080/LiveApp/rest/v1/hls-merger/multi-audio-stream/merged_stream
결론
이 블로그에서는 HLS 스트리밍 경험을 향상시키기 위한 강력한 도구인 HLSMerger 플러그인을 소개했습니다. 이 플러그인은 여러 해상도와 오디오 트랙을 가진 HLS 스트림을 생성할 수 있게 하여 다양한 스트리밍 시나리오에 유연성과 효율성을 제공합니다. 서버 성능을 최적화하거나 다국어 콘텐츠를 제공하려는 경우, HLSMerger 플러그인은 여러분의 필요를 충족시켜 줄 것입니다.
Comentarios