【이벤트 리뷰】Elixir를 사용하여 HLS 라이브 브로드캐스트 백엔드 서비스 개발

Tubi가 후원하고 조직한 제8회 Elixir Meetup이 지난 토요일에 성공적으로 끝났습니다.Elixir 시니어 사용자인 Horvo, Scott 및 Yang Miao는 660명 이상의 온라인 및 오프라인 함수형 프로그래밍 애호가들과 Elixir 관련 응용 프로그램 및 아이디어를 공유했습니다. 이 기사는 Tubi의 선임 백엔드 엔지니어인 Horvo가 제공한 첫 번째 공유 "Elixir로 HLS Live 백엔드 서비스 개발"을 검토합니다.

Bitu Technology의 공식 계정에 관심을 가져 주셔서 감사합니다 . 다른 두 Elixir Meetup의 공유 리뷰를 공개합니다.


다음은 청중 Liu Lang의 메모입니다.

온라인 스트리밍 미디어 콘텐츠 제공업체인 Tubi는 사용자에게 주문형 영화 및 TV 쇼는 물론 기존 TV 프로그램의 온라인 라이브 스트리밍을 포함한 다양한 콘텐츠 선택권을 제공합니다. 이러한 콘텐츠 뒤에 Tubi는 이러한 콘텐츠의 백엔드 지원을 구현하기 위해 Elixir를 선택했습니다. 이번 밋업의 첫 번째 공유는 Tubi 수석 엔지니어 Horvo가 가져온 "Tubi Live Backend Service의 Elixir 적용"입니다.

왜 HLS인가

HTTP Live Streaming(일명 HLS)은 인터넷에서 오디오 및 비디오를 전송하기 위한 스트리밍 미디어 전송 프로토콜로, 2009년 Apple Inc.에서 제안했습니다. 기본 계층이 HTTP를 기반으로 하기 때문에:

- 대부분의 방화벽의 기본 설정을 충족합니다(TCP 포트 1935의 RTMP 요구 사항과 비교).

- 글로벌 CDN 네트워크와 같은 HTTP 키 인프라 사용 가능(Nginx-rtmp-module도 확장이 쉽기 때문에 HLS 비디오 재생 지원)

- 우수한 플랫폼 및 장치 호환성(HTTP-FLV는 BiliBili에서 개발한 flv.js와 같은 타사 도구에 의존하며 MPEG-DASH는 iOS 기본 지원이 없음) 이러한 기능은 HLS를 RTMP, MPEG-DASH 및 다른 프로토콜 군중에서 눈에 띄고 Tubi의 라이브 스트리밍 비즈니스에서 선택되고 사용됩니다.

나만의 엘릭서 TV

Tubi의 생방송 비즈니스 프로세스에서 Elixir의 적용을 더 잘 이해할 수 있도록 Horvo는 처음부터 Elixir TV를 구축하는 방법을 시연했습니다.

전체 Elixir TV 시스템은 다음 부분으로 나뉩니다.

트랜스코더

원본 MP4 및 기타 형식 비디오 파일을 수락하고 Elixir 코드에서 FFmpeg 명령을 호출하고(전문 작업은 전문 도구에 맡기십시오), 정의된 목표 비트 전송률에 따라 비디오 파일에 해당하는 다중 비트 전송률 세그먼트를 생성합니다. 전진. 이 단계의 초점은 모듈 간에 정보를 전달할 때 사용될 데이터 스키마를 정의하는 것입니다.

스케줄러

스케줄러는 Elixir TV의 핵심 모듈입니다. 정적 고정 길이 파일을 정적 재생 목록 파일 및 세그먼트 파일로 한 번만 변환하면 되는 기존 VOD(Video on Demand) 플랫폼과 달리 Elixir TV 생방송 방송국은 각 채널에 대한 실시간 콘텐츠 대기열을 유지해야 합니다. .

Scheduler는 상태 관리를 위해 Exilir의 GenServer를 사용하고 슬라이딩 윈도우에서 비디오 세그먼트 및 해당 설명 정보를 정기적으로 업데이트하여 실시간 재생 목록 파일을 얻을 수 있는 기능을 제공하고 Elixir TV 실행에 필요한 기능을 간단하게 구현합니다. 깨끗하고 깔끔하며 효율적인 방식.

HLS 서버

HLS 서버는 클라이언트 호출을 위한 세 가지 HTTP 인터페이스, 즉 다음을 제공합니다.

- GET /playlist.m3u8 => 정적 마스터 재생 목록

- GET /:variant/playlist.m3u8 => 라이브 변형 재생 목록

- GET /:variant/:video_id/:media_segment_name.ts => 로컬 파일 시스템에서 비디오 파일 제공

처음 두 인터페이스는 재생 목록 파일을 가져오는 데 사용되며, 클라이언트는 마스터 재생 목록의 정보를 기반으로 플레이어를 초기화하고 변형 재생 목록의 정보를 기반으로 미디어 세그먼트 리소스의 주소를 가져옵니다. 생방송이기 때문에 클라이언트는 이 정보를 정기적으로 업데이트해야 합니다. 세 번째 포트는 클라이언트가 재생할 특정 비디오 파일을 얻기 위한 것입니다.

결론

위의 모듈을 통해 Elixir TV가 구체화되었습니다.

그런 다음 Horvo는 실제 대규모 라이브 방송 제품 아키텍처를 공유하고 Elixir TV의 몇 가지 단점을 지적했습니다.

동영상을 암호화해야 함

Da Liu의 설명에서 실제 우주는 악의로 가득 찬 어두운 숲이며 모든 사람은 자신을 보호하기 위해 가장하고 침묵해야 합니다. 동영상 플랫폼으로서 - Elixir TV는 핵심 콘텐츠인 동영상 파일을 보호하는 것도 고려해야 합니다.

Horvo는 세 가지 보호 전략을 소개합니다.

- 비디오 클립 파일은 전송 보안을 위해 AES-128 알고리즘으로 암호화할 수 있습니다.

- 위에서 언급한 대칭 암호화 키의 획득 인터페이스는 비디오 암호 해독이 적법한 클라이언트에서 시작되도록 하기 위해 방문자의 신원을 인증해야 합니다.

- DRM 및 기타 기술과 같은 고급 콘텐츠 보호를 통해 비디오 파일이 다른 장치 간에 복사 및 전송되지 않도록 할 수 있습니다.

금전 문제를 해결해야 합니다.

다윈의 설명에서 실제 세계는 자연 선택과 적자 생존입니다. Elixir TV도 처음부터 수익 창출에 대해 생각해야 합니다. 무료 동영상 + 광고를 사용하여 수익을 창출하는 Tubi의 모델을 참조하여 Elixir TV는 사용자가 프로그램 목록에 액세스하고 적시에 광고 플랫폼에 대한 입찰 초대를 시작하고 더 많은 것을 선택할 수 있도록 광고 삽입 서비스를 외관으로 구축해야 합니다. 플랫폼에 이익이 되는 광고 시트를 판매하고, 이러한 동영상을 사용자에게 돌려주는 동영상 재생 설명 파일에 삽입하여 수익을 얻습니다.

Horvo는 또한 서버 측에서 광고 삽입의 이점을 소개했습니다. 광고 동영상 파일은 일반 동영상 파일과 동일하며, 동영상 재생 재생 목록 파일에 서버 측의 Ad Insertion Service가 삽입되어 광고의 특성을 상실하고 일부 브라우저 광고 차단 플러그인에 의해 차단되는 것을 피할 수 있으며, 이를 통해 플랫폼과 광고주의 권리와 이익을 보호합니다.

멋진 상호 작용

광고 삽입 서비스는 어떻게 각 사용자에 대해 개인화된 광고 삽입을 가능하게 합니까?

Horvo: SSAI(Server Side Ad Insertion) 서비스는 각 사용자의 재생 세션에 대해 별도의 미디어 재생 목록을 유지합니다. 라이브 방송 장면의 미디어 재생 목록은 시간이 지남에 따라 스크롤되고 새로 고쳐집니다. 광고 시간 정보가 재생 목록에 나타나면 SSAI An 광고 요청은 Ad Server로 시작되고 이 광고 요청은 사용자의 일부 특성 정보를 전달하여 Ad Server가 사용자를 위한 개인화 추천을 할 수 있도록 합니다. 또한 HLS 스트림의 광고 삽입에 대한 산업 사양(SCTE-35)이 있으며 HLS 콘텐츠 제작자는 산업 표준 태그를 사용하여 광고 위치를 표시해야 합니다.

광고(광고)가 클라이언트에 의해 변조됩니까?

Horvo: 우리 SSAI의 주요 목적은 클라이언트가 차단하거나 변조하는 것을 방지하는 것입니다. 광고 시간 간격의 원래 미디어 세그먼트는 실제 광고 세그먼트로 대체됩니다. 클라이언트는 Ad-break Marker를 감지하여 광고의 위치를 ​​모니터링할 수 없으므로 변조가 발생하지 않습니다.

그리고 SSAI 서비스를 사용하지 않고 클라이언트 측에서 광고 요청 및 광고 삽입을 하면 클라이언트 측에서 M3U8 파일의 Ad-break를 인식할 수 있습니다. 또는 광고를 차단합니다.

M3U8 파일은 어느 부분에서 생성되나요? 스케줄러의 의미는 무엇입니까?

Transcoder 이후에 HLS 출력 형식을 얻을 것입니다. 이 HLS는 특정 비디오에 대한 주문형 형식일 뿐입니다. 스케줄러가 정렬한 후의 HLS 출력은 라이브 방송 형태의 실제 콘텐츠입니다.

왜 엘릭서를 사용합니까?

Tubi와 Elixir에 대한 이야기는 Tubi 엔지니어링 부사장 Chen Tian이 공유한 이야기 ​​-  Elixir를 사용하는 이유는 무엇입니까? 몇몇 엔지니어들이 그 비하인드 스토리를 들려주었습니다 .

Horvo는 Elixir를 사용한 5년 간의 개발 경험을 바탕으로 Elixir 개발 경험과 프로덕션 환경에서 Elixir의 성능에 대해 간략하게 공유했습니다. 예를 들어 Elixir의 창시자인 Jose Valim은 Ruby의 핵심 개발자 중 한 명이었기 때문에 Elixir는 개발자 경험 측면에서 Ruby와 매우 유사하고 매우 친숙합니다.

또한 실제 프로덕션 환경에서 Elixir는 웹 서버가 높은 동시성 요청을 처리해야 할 때 매우 잘 작동합니다.”

투비의 엘릭서 적용 사례

Elixir/OTP를 사용하여 멀티미디어 E2E 처리 플랫폼 구축

Elixir 프로젝트에 Ruby 아이디어 적용

Elixir 코드베이스에 숨어 있는 7년 된 성능 문제

투비와 함께 성장하고 함께 강해지세요!

인기 직업: https://tubi.tech/careers/

WeChat 공식 계정: [활동 후기] Elixir를 사용하여 HLS 라이브 방송 백엔드 서비스 개발

Supongo que te gusta

Origin blog.csdn.net/weixin_49193714/article/details/131575841
Recomendado
Clasificación