Android용 브라이트코브 네이티브 플레이어 SDK를 사용하는 경우, 현재 동영상 재생에 Google ExoPlayer 프레임워크를 사용하고 있을 가능성이 높습니다. 2016년에 Google ExoPlayer 팀은 플레이어의 두 번째 주요 버전을 출시하면서 코드를 대대적으로 리팩토링했습니다. 그런 다음 업그레이드 시점에 맞춰 코드가 더 안정화될 수 있도록 ExoPlayer 2로 전환하기 전에 약간의 시간을 주기로 결정했습니다.
2017년에 ExoPlayer 2를 평가한 결과, 업그레이드할 시기가 되었다고 결론을 내렸으며, 이를 통해 브라이트코브 SDK와 사용자에게 큰 도움이 될 것입니다.
엑소플레이어 2로 업그레이드
ExoPlayer 2로 업그레이드할 때, 기존 플레이어를 유지하면서 최소한의 노력으로 SDK v6.0.1+로 업그레이드할 수 있도록 Android용 브라이트코브 네이티브 플레이어 SDK에 두 가지 ExoPlayer 버전을 모두 유지하기로 결정했습니다.
엑소플레이어 2를 탐색하려면 다음을 수정하여 build.gradle
파일을 대체할 compile project(':players:exoplayer')
와 함께 compile project(':players:exoplayer2')
를 종속성 블록에 추가합니다.
구글 엑소플레이어 팀이 두 번째 버전의 플레이어에 적용한 아키텍처 변경 사항에 이미 익숙하실 수도 있지만, 그렇지 않다면 첫 번째 버전에 비해 리팩터링이 상당 부분 이루어졌고 많은 획기적인 변화가 있었다는 점을 알아두셔야 합니다. 일부 공개 클래스의 이름이 바뀌었고, 일부 클래스는 제거되었으며, 몇 가지 기능이 추가되었습니다. 이에 대한 자세한 내용은 엑소플레이어 2 - 새로운 패키지 및 클래스 이름에서 확인할 수 있습니다.
Android용 브라이트코브 네이티브 플레이어 SDK에서 이러한 아키텍처 변경 사항을 관리하기 위해 많은 노력을 기울여 ExoPlayer 2로 업그레이드하는 과정을 최대한 수월하게 만들었습니다. 애플리케이션에서 브라이트코브 클래스만 사용하는 경우 업그레이드 작업은 최소화해야 합니다. 그러나 노출된 ExoPlayer 레거시 클래스 또는 일부 ExoPlayerVideoDisplayComponent
내부 리스너를 ExoPlayer 콜백에 의존하는 내부 리스너로 변경하면 몇 가지 변경 사항이 발생할 수 있습니다.
오류가 발생하면 ExoPlayer 2 프레임워크로 마이그레이션 문서의 주요 변경 사항 섹션을 확인하세요.
엑소플레이어 2로 업그레이드할 때의 이점
안드로이드용 브라이트코브 네이티브 SDK의 엑소플레이어 2는 기존 엑소플레이어와 동일한 기능을 제공합니다. 여기에는 여러 오디오 트랙을 지원하는 간편한 주문형 비디오(VOD) 재생, WebVTT 및 EIA-608과 같은 폐쇄 캡션, 와이드바인 모듈러 보호 콘텐츠 재생, 구글 인터랙티브 미디어 광고(IMA) 및 프리휠을 통한 클라이언트 측 광고, 안드로이드 TV 및 파이어 TV, 비디오 360 및 오프라인 재생 지원 등이 포함됩니다. 또한 비디오 클라우드 및 동적 전송과 같은 브라이트코브 서비스와의 완벽한 통합도 포함됩니다.
구글 엑소플레이어 팀은 엑소플레이어 2를 통해 프레임워크에 새로운 기능을 추가하고 기존 기능에 대한 지원을 개선했으며 많은 버그를 수정하여 엑소플레이어 2를 더욱 강력하고 안정적으로 만들었습니다. 이를 통해 특히 VOD 및 라이브 재생을 위한 HTTP 라이브 스트리밍(HLS) 관련 사용자 지정 코드가 많았던 레거시 플레이어에 사용된 포크된 ExoPlayer 버전에서 벗어날 수 있었습니다. 우리의 목표는 향후 업데이트를 더 빠르고 더 자주 적용할 수 있도록 포크가 아닌 구글 엑소플레이어를 직접 사용하는 것입니다.
엑소플레이어 2 프레임워크의 중요한 영역에서 많은 개선과 추가가 이루어졌습니다.
- DASH 다중 기간에 대한 완벽한 지원.
- DRM을 위한 추가 암호화 체계 및 오프라인 라이선스 지원.
- ID3의 잘못된 메타데이터에 대한 처리 기능이 개선되었습니다.
- WebVTT 및 EIA608 캡션에 대한 지원이 개선되었습니다.
- 버퍼링된 콘텐츠 내에서 앞으로 이동하는 기능이 개선되어 매우 빠르고 효율적입니다.
안드로이드용 브라이트코브 네이티브 SDK를 엑소플레이어 2와 함께 사용하면 앱이 자동으로 이러한 모든 향상된 기능을 활용할 수 있습니다.
위에서 언급했듯이 ExoPlayer는 HLS에 대한 지원도 대폭 개선했습니다.
- EXT-X-DISCONTINUITY, EXT-X-START, EXT-X-DISCONTINUITY-SEQUENCE 및 EXT-X-PROGRAM-DATE-TIME과 같은 HLS 태그에 대한 지원을 추가하거나 개선합니다.
- HLS 마스터 재생 목록에서 사용 가능한 경우 평균 대역폭 사용에 대한 지원이 추가되었습니다.
- 여러 측면에서 MPEG-TS에 대한 지원이 개선되었습니다.
- 라이브 콘텐츠를 식별하고 작업하기 위한 몇 가지 유틸리티 방법.
- 안드로이드용 브라이트코브 네이티브 플레이어 SDK에서 더 나은 HLS 라이브 경험을 제공하기 위해 활용된 향상된 기능인 BehindLiveWindowException 처리가 개선되었습니다.
엑소플레이어 2 라이브러리의 전체 추가 및 수정 사항 목록은 릴리즈 노트에서 확인할 수 있습니다.
엑소플레이어 2 플레이어 객체에 직접 액세스하여 활용할 수 있는 다른 기능도 있습니다. 하지만 ExoPlayer 2 클래스로 직접 작업할 경우 새로운 ExoPlayer 버전이 출시될 때 코드에 변경 사항이 발생할 가능성이 높아진다는 점에 유의해야 합니다. 엑소플레이어 인스턴스에 액세스하려면 getExoPlayer()
메서드의 ExoPlayerVideoDisplayComponent
클래스입니다. 우리는 현재 SimpleExoplayerInstance
를 사용하여 이 객체로 캐스팅하고 아래와 같이 유틸리티 메서드를 사용할 수 있습니다.
ExoPlayerVideoDisplayComponent displayComponent = (ExoPlayerVideoDisplayComponent) brightcoveVideoView.getVideoDisplay();
ExoPlayer exoPlayer = displayComponent.getExoPlayer();
if (exoPlayer instanceof SimpleExoPlayer) {
SimpleExoPlayer simpleExoPlayer = (SimpleExoPlayer) exoPlayer;
}
관심을 가질 만한 기능의 한 가지 예로 ExoPlayer로 가변 속도 재생을 설정하는 것을 들 수 있습니다.
아직 업그레이드하지 않으셨다면, 기존 ExoPlayer 프레임워크에 대한 지원이 중단되었으므로 ExoPlayer 2로 업그레이드하는 것을 적극 권장합니다.