top of page
YnB logo (1).png

HLS 스트리밍을 초강력하게: HLSMerger로 스트림을 원활하게 병합하세요.

HLS(HTTP 라이브 스트리밍)은 콘텐츠 전송 네트워크(CDN)와의 호환성으로 인해 라이브 스트리밍에 널리 사용되는 프로토콜입니다. 이로 인해 대규모 관중에게 스트리밍하기에 적합합니다. 전통적으로 HLS 스트림의 지연 시간은 약 8-10초였으나, 저지연 HLS(LL-HLS)를 사용하면 약 3초로 줄일 수 있습니다. Ant Media Server는 HLS와 LL-HLS를 모두 지원합니다.

그러나 콘텐츠 제작자와 방송인은 단일 스트림에서 다른 해상도와 오디오 트랙을 가진 개별 스트림을 병합하는 데 어려움을 겪고 있습니다. 이러한 솔루션이 없으면 스트리머는 각 해상도 및 오디오 옵션에 대해 별도의 스트림을 유지해야 하며, 이는 비효율적이고 관리하기 어려울 수 있습니다. 이로 인해 서버 부하가 증가하고, 대역폭 사용이 높아지며, 시청자와 방송인 모두에게 더 복잡한 워크플로우를 초래합니다.

이번 블로그 게시물에서는 이러한 문제를 해결할 새로운 HLSMerger 플러그인을 소개하려고 합니다:

  1. 여러 해상도를 가진 HLS 스트림 생성 - 다양한 인터넷 속도를 가진 시청자를 위한 원활한 품질 전환 제공

  2. 여러 오디오 트랙을 가진 HLS 스트림 생성 - 사용자가 하나의 스트림에서 다른 언어 또는 해설 트랙을 선택할 수 있도록 함

이제 플러그인 설치를 시작해 보시죠.


HLSMerger 플러그인 빌드 및 설치

플러그인 빌드

  1. Ant Media 플러그인 저장소를 클론하십시오.

  1. HLSMergerPlugin 폴더로 이동하십시오.

cd Plugins
cd HLSMergerPlugin
  1. 플러그인을 빌드하려면 다음 Maven 명령을 실행하십시오:

mvn clean install -Dmaven.javadoc.skip=true -Dmaven.test.skip=true -Dgpg.skip=true
  1. HLSMerger.jar 파일이 target 폴더에 생성됩니다.


플러그인 설치

  1. HLSMerger.jar 파일을 Ant Media 서버의 플러그인 디렉토리로 복사하십시오.

sudo cp HLSMerger.jar /usr/local/antmedia/plugins/
  1. Ant Media Server를 재시작합니다.

sudo chown -R antmedia:antmedia /usr/local/antmedia
sudo service antmedia restart

앞서 언급된 두 가지 방법을 테스트해 봅시다.


1. 여러 해상도를 가진 HLS 스트림 생성

여러 해상도로 스트리밍하는 것은 적응형 비트레이트 스트리밍(ABR)에서 매우 중요합니다. ABR은 시청자의 인터넷 속도에 따라 동적으로 비디오 품질을 조정하여 원활한 시청 경험을 제공합니다. 하지만 ABR은 트랜스코딩이 필요하며, 이는 CPU 집약적일 수 있습니다. Ant Media Server는 ABR을 지원하지만, 일부 사용자는 이 과정을 클라이언트 측에서 처리하기를 선호할 수 있습니다.

HLSMerger 플러그인은 사용자가 다른 해상도를 가진 스트림을 생성한 후 이 스트림들을 단일 HLS 마스터 파일로 병합할 수 있게 함으로써 해결책을 제공합니다. 이를 통해 서버 측에서 트랜스코딩이 필요하지 않게 되어 CPU 사용량을 줄일 수 있습니다.


사용법

1단계: FFmpeg를 사용하여 다양한 해상도와 비트레이트로 여러 RTMP 스트림을 게시하려면 다음 명령을 실행하십시오:

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 call을 사용하여 병합하십시오:

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은 다음과 같습니다: http://localhost:5080/LiveApp/streams/merged_stream.m3u8


호환 가능한 HLS 플레이어를 사용하여 2단계에서 생성된 m3u8 파일 URL을 재생하십시오. 예를 들어 hls.js에서 다음 단계를 따릅니다:

  1. 마스터 파일 URL을 이미지에 표시된 URL 필드에 복사합니다.

  2. 'Apply' 버튼을 클릭합니다. 플레이어가 스트림 재생을 시작해야 합니다.

  3. 'Quality-levels' 버튼을 클릭합니다. 플레이어 아래에 사용 가능한 해상도가 표시되어야 합니다.

  4. 원하는 해상도를 선택하여 품질을 전환합니다.


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
  1. 여러 오디오 트랙을 가진 HLS 스트림 생성

    다양한 언어로 스트리밍하기 위해 단일 비디오 스트림에 여러 오디오 트랙을 추가하는 것은 이상적입니다. HLSMerger 플러그인은 사용자가 여러 오디오 스트림과 비디오 스트림을 단일 HLS 재생 목록(M3U8 파일)으로 병합할 수 있게 합니다. 그런 다음 HLS 플레이어는 시청자에게 이러한 오디오 옵션을 제공하여 원하는 언어 또는 오디오 트랙을 선택할 수 있도록 합니다.


이 작업을 달성하려면 FFmpeg를 사용하여 비디오 스트림과 별도의 오디오 스트림을 생성하십시오.

1단계: Ant Media Server 대시보드의 LiveApp 애플리케이션 설정에서 세그먼트 지속 시간(Segment Duration)을 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에서 다음 단계를 따릅니다:

  1. 마스터 파일 URL을 이미지에 표시된 URL 필드에 복사합니다.

  2. 'Apply' 버튼을 클릭합니다. 플레이어가 스트림 재생을 시작해야 합니다.

  3. 'Audio-tracks' 버튼을 클릭합니다. 플레이어 아래에 사용 가능한 오디오 트랙이 표시되어야 합니다.

  4. 원하는 오디오 트랙을 선택하여 청취합니다.


6단계: 이 병합된 스트림을 삭제하려면 다음 API를 호출하십시오:

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 플러그인이 해결책을 제공합니다.

한번 시도해 보고 스트리밍 경험을 한 단계 끌어올려 보세요!

Comments


Commenting on this post isn't available anymore. Contact the site owner for more info.
bottom of page