Android 용 Native SDK를 사용하는 코드 스 니펫

제품 (들)
Brightcove Player
비디오 클라우드
역할
장치 SDK 개발자
작업
네이티브 SDK로 개발
주제
코드 샘플
아피스)
재생 API
SDK
기계적 인조 인간

이 항목에서는 SDK를 사용하여 개발할 때 유용한 참고 자료 모음을 찾을 수 있습니다. 보다 자세한 솔루션을 보시려면 Android 플레이어 샘플.

차례

광고
해석학
캡션
개념
콘텐츠 보안 (DRM)
실시간 스트림
재생
플레이어 컨트롤
재생 목록
동영상 콘텐츠

Android TV 용 컨트롤 맞춤 설정

기기 또는 Android TV 용 컨트롤 막대에 버튼을 추가 할 수 있습니다. 아래 단계는 Android TV 용 컨트롤 막대에 전체 화면 버튼을 추가하는 과정을 안내합니다.

  1. 열기 사용자 정의 컨트롤 샘플 앱. 이것을 시작점으로 사용하겠습니다. 샘플 앱을 검토합니다. README 파일에서 플레이어 컨트롤 사용자 지정에 대한 자세한 내용을 확인하십시오.
  2. 열기 res / layout / land / my_media_controller.xml Android Studio의 파일
  3. 복사 단추 요소 전체 화면 단추. 코드는 다음과 유사해야합니다.
    Android : layout_width = "wrap_content"android : layout_gravity = "center_vertical"android : layout_height = "wrap_content"android : padding = "4dp"android : layout_gravity = "center_vertical"android : layout_height = "wrap_content"android : visibility = "visible"android : text = "@ string / brightcove_controls_enter_full_screen"/>
  4. 열기 res / layout / my_tv_media_controller.xml Android Studio의 파일
  5. 복사 된 내용 붙여 넣기 단추 요소를이 레이아웃 파일에 추가하십시오. 요소의 위치는 컨트롤 막대에서의 위치를 ​​결정합니다.
  6. 상단으로 스크롤 res / layout / my_tv_media_controller.xml 파일. 스타일 속성이로 설정되어 있는지 확인하십시오. @ 스타일 / BrightcoveControlBar.TV.Custom. 코드는 다음과 같아야합니다.
    <? xml version = "1.0"encoding = "utf-8"?> <com.brightcove.player.mediacontroller.BrightcoveControlBar xmlns : android = "http://schemas.android.com/apk/res/android"xmlns : bmc = "http://schemas.android.com/apk/res-auto"xmlns : tools = "http://schemas.android.com/tools"tools : ignore = "오버 드로, InconsistentLayout"android : id = " 안드로이드 : layout_width = "match_parent"android : layout_height = "wrap_content"android : 패딩 = "8dp"android : orientation = "horizontal"android : layout_gravity = "bottom android : background ="@ color / bmc_background " " style ="@ style / BrightcoveControlBar.TV.Custom ">
  7. 열기 res / values ​​/ styles.xml Android Studio의 파일
  8. 스타일 요소가있는 이름 의 가치 BrightcoveControlBar.TV.Custom, 요소를 전체 화면 버튼으로 설정하고 참된 그것을 표시합니다.
    <item name = "brightcove_full_screen"> true </ item> < / item> <style name = "BrightcoveControlBar.TV.Custom"> <item name = "brightcove_vr_mode"
  9. 그게 전부 야. Android TV 실제 또는 가상 장치에서 샘플 앱을 실행합니다. 제어 막대에서 전체 화면 버튼을 볼 수 있습니다.
    전체 화면 버튼
    전체 화면 버튼

실시간 스트림의 지속 시간 가져 오기

실시간 스트리밍의 재생 시간을 보려면 MAX_POSITION. 이것은 라이브 스트림 (즉, 스크롤바를 드래그 할 수있는 가장 먼 위치)에서 가장 큰 탐색 가능한 위치를 제공합니다. 코드는 다음과 유사해야합니다.

이벤트가 발생했을 때, 이벤트가 발생했을 경우, 이벤트가 발생했을 경우는 true를 돌려줍니다.

미리보기 이미지의 URL 가져 오기

Brightcove 라이브러리의 미리보기 이미지 또는 비디오 스틸 이미지를 사용할 수 있습니다. 다음 코드를 사용하여 이미지의 URL을 가져옵니다.

Edge Catalog (com.brightcove.player.edge.Catalog)를 사용하는 Video Cloud 고객은 다음과 같이 축소판 URL을 얻을 수 있습니다.

String thumbnailUrl = video.getProperties (). get ( "thumbnail"). toString ();

미리보기 이미지가 너무 작 으면 비디오 정지 이미지를 얻을 수 있습니다.

String videoStillUrl = video.getProperties (). get ( "stillImageUri"). toString ();

구글 분석

Brightcove 플레이어와 카탈로그 클래스를 사용하면 비디오 분석이 자동으로 수집되어 Video Cloud Analytics 모듈에 표시됩니다. 추가 측정 항목에 대해서는 Google 애널리틱스를 앱에 추가 할 수 있습니다.

Google 애널리틱스를 앱과 통합하려면 다음 단계를 따르십시오.

  1. 프로젝트에 Google 서비스 플러그인을 추가하십시오.
  2. Google 구성 파일을 가져 와서 프로젝트에 추가하십시오.
  3. 응용 프로그램을 확장하고 응용 프로그램 추적기를 반환하는 도우미 메서드를 제공하십시오. 그것은 google-services AnalyticsApplication.
  4. BrightcovePlayer를 확장하는 별도의 클래스에서 공유 추적기 인스턴스를 얻습니다.
    // 공유 추적기 인스턴스 얻기 AnalyticsApplication application = (AnalyticsApplication) getApplication (); 추적기 = application.getDefaultTracker ();
  5. 화면 변경 사항을 기록하고 /하거나 추적을 위해 맞춤 이벤트를 보내려면 적절한 메소드를 재정의하십시오.

자세한 단계는 Google의 문서를 참조하십시오. Android 앱에 애널리틱스 추가.

전체 화면으로보기

코드를 사용하여 전체 화면 모드를 관리 할 수 ​​있습니다.

  • 다음은 전체 화면 모드를 설정하는 코드입니다.

    brightcoveVideoView.getEventEmitter (). emit (EventType.ENTER_FULL_SCREEN);
  • 다음은 전체 화면 모드를 종료하는 코드입니다.

    brightcoveVideoView.getEventEmitter (). emit (EventType.EXIT_FULL_SCREEN);

수동으로 DRM 컨텐츠 추가

Brightcove Player 고객은 자신의 서버에서 DRM으로 보호 된 콘텐츠를 사용할 수 있습니다. 다음과 같이 DRM 컨텐츠를 수동으로로드 할 수 있습니다.

import com.brightcove.player.display.WidevineMediaDrmCallback; 비디오 비디오 = Video.createVideo ( "https://storage.googleapis.com/wvmedia/cenc/h264/tears/tears.mpd"); video.getProperties (). put (WidevineMediaDrmCallback.DEFAULT_URL, "https://proxy.uat.widevine.com/proxy?video_id=&provider=widevine_test"); brightcoveVideoView.add (video); brightcoveVideoView.start ();

방법 : 동기식 또는 비동기식?

다음은 Android 용 Native Player SDK에있는 비동기 메소드 중 일부입니다.

  • 그만큼 스타트(), seekTo () 그리고, stopPlayback () 메서드는 시스템의 다른 구성 요소에 대한 이벤트를 처리하기 때문에 비동기입니다.
  • 그만큼 명확한() 메서드는 목록 업데이트와 관련하여 동기화되지만 현재 비디오를 언로드하는 것과 비동기입니다.

DRM을 사용한 오프라인 재생

오프라인 재생을 위해 다운로드 한 비디오의 경우 다운로드 상태가 알림 영역에 표시 될 수도 있습니다. 알림 제목은 비디오 제목으로 설정됩니다. 다운로드가 일시 중지되거나 취소되면 알림이 제거됩니다.

알림 상태 다운로드
다운로드 상태 알림 내용 텍스트 알림 아이콘
다운로드 R.string.odrm_download_running - 기본적으로 "다운로드 중 ..."입니다.

완료율을 보여주는 진행률 막대가 나타납니다.
플랫폼 기본 애니메이션 "다운로드"아이콘 - android.R.drawable.stat_sys_download
재시도 R.string.odrm_download_waiting_retry - 기본적으로 "재시도 대기 중 ..."입니다.  
실패한 R.string.odrm_download_failed - 이것은 "실패했습니다!" "기본적으로  
완료 R.string.odrm_download_complete - 기본적으로 "저장 됨"입니다. 플랫폼 기본 정적 "다운로드"아이콘 - android.R.drawable.stat_sys_download_done

다시 시도 또는 실패 상태의 경우 알림 하위 텍스트는 오류 유형에 따라 적절한 리소스로 설정됩니다. 다음은 전체 목록입니다.

  • R.string.odrm_error_none
  • R.string.odrm_error_cannot_resume
  • R.string.odrm_error_device_not_found
  • R.string.odrm_error_file_already_exists
  • R.string.odrm_error_file_error
  • R.string.odrm_error_http_data_error
  • R.string.odrm_error_insufficient_space
  • R.string.odrm_error_too_many_redirects
  • R.string.odrm_error_unhandled_http_code
  • R.string.odrm_error_unknown

재생 API로 페이징하기

재생 API에서 Video Cloud 컨텐츠를 검색 할 때 재생 목록에 대한 호출을 구현할 수 있습니다.

재생 목록에서 일련의 동영상으로 페이지를 이동하려면 다음 요청 URL 매개 변수를 사용하십시오.

  • 한도 - 재생 API에서 반환 할 동영상 수를 정의합니다.
  • 오프셋 - 재생 API에서 재생 목록을 건너 뛸 동영상 수를 설정합니다.

쿼리 매개 변수는 Map 메서드로 Catalog 메서드에 전달됩니다. 객체를 키 - 값 쌍으로 사용합니다. 이 예는 재생 목록의 6 번째 동영상으로 시작하는 10 동영상을 반환합니다.,>

Map <String, String> queryParameters = new HashMap <> (); queryParameters.put ( "limit", "6"); queryParameters.put ( "offset", "9"); 카탈로그 카탈로그 = 새 카탈로그 (eventEmitter, "myAccount", "myPolicy"); catalog.findPlaylistByID ( "myPlaylistId", null, queryParameters, myListener);

로컬 비디오 재생

로컬에 저장된 MP4 비디오를 재생하려면 응용 프로그램 자산 폴더에 저장해야합니다.

Uri video = Uri.parse ( "file : ///android_asset/path/to/video.mp4"); brightcoveVideoView.add (Video.createVideo (video.toString ())); brightcoveVideoView.start ();

광고없이 검색

당신은을 사용할 수 있습니다 adsDisabled 재산 VideoPlaybackController 동영상을 검색하는 동안 광고 재생을 사용 중지합니다.

이 기능을 사용하려면 다음과 같이하십시오.

  1. 가져오기 VideoPlaybackController ~의 인스턴스 BrightcoveVideoView.

    VideoPlaybackController playbackController = brightcoveVideoView.getPlaybackController ();
  2. 광고 재생을 사용 중지합니다.

    playbackController.setAdsDisabled (true);
  3. 현재 비디오에서 원하는 시간 위치로 탐색하십시오.
  4. 정상적인 광고 동작을 재개하십시오.

    playbackController.setAdsDisabled (false);

코드는 다음과 같아야합니다.

최종 VideoPlaybackController playbackController = brightcoveVideoView.getPlaybackController (); eventEmitter.on (EventType.VIDEO_DURATION_CHANGED, 새 EventListener () {@ 오버라이드 public void processEvent (최종 이벤트 이벤트) {playbackController.setAdsDisabled (true); brightcoveVideoView.seekTo (10000);}}); eventEmitter.on (EventType.DID_SEEK_TO, 새로운 EventListener () {@Override public void processEvent (최종 이벤트 이벤트) {playbackController.setAdsDisabled (false);}}));

버퍼 크기 설정

다음 세그먼트의 전송이 CDN에서 지연되는 경우 플레이어의 버퍼링을 제거하기 위해 버퍼 길이를 늘릴 것을 고려할 수 있습니다. 그러나 HLS가 이미 수동으로 더 잘 수행 할 수는 없습니다.

HLS는 즉시 작동하고 유지할 수없는 경우 품질을 저하 시키도록 설계되었습니다. 이렇게하면 버퍼를 미리로드 할 필요가 없습니다. 계속 유지할 수없는 경우 중단을 방지하기 위해 최대한 많은 비디오를로드합니다.

즉, ExoPlayer 1 구현을 사용하는 경우 다음을 제어 할 수 있습니다.

예를 들어 버퍼 길이를 120 초로 설정하려면 다음과 같이 설정할 수 있습니다. minBufferMs to 120 * 1000.

캡션 및 테마 설정

현재, BrightcoveCaptionPropertiesActivity Brightcove Player SDK의 매니페스트 파일에 설정되므로 개발자는 응용 프로그램에서이를 지정할 필요가 없습니다.

<? xml version = "1.0"encoding = "utf-8"?> <manifest xmlns : android = "http://schemas.android.com/apk/res/android"package = "com.brightcove.player"android : versionCode = "1"android : versionName = "1.0"> <application> <! - 매니페스트에이 활동을 등록하지 않으면 SDK를 사용하는 앱이 액세스하려고 할 때 응용 프로그램이 중단됩니다. -> <! - 앱의 빌드 과정 중에이 매니페스트가 앱 수준의 항목과 병합됩니다. -> <activity android : name = "com.brightcove.player.captioning.BrightcoveCaptionPropertiesActivity"/> </ application> </ manifest>

그만큼 BrightcoveCaptionPropertiesActivity 에서 기본 테마를 상속받습니다. <활동> 앱 매니페스트의

에 단일 앱 테마를 설정하면 <신청서> 수준이면 BrightcoveCaptionPropertiesActivity 이 응용 프로그램 수준 테마의 속성을 상속받습니다. 일부 테마의 경우, 활동이 이상하게 보이거나 보이지 않게 보일 수 있습니다.

이러한 경우에는 BrightcoveCaptionPropertiesActivity 자신의 매니 페스트에서 다음과 같이 테마를 거기에 적용하십시오.

<activity android : name = "com.brightcove.player.captioning.BrightcoveCaptionPropertiesActivity" android : theme = "@ style / MyCustomCaptionSettingsTheme"/>

기본 캡션 설정

비디오에서 여러 개의 언어 캡션을 사용하는 경우 재생이 시작될 때 프로그래밍 방식으로 기본 언어를 설정할 수 있습니다. 코드는 다음과 유사해야합니다.

BrightcoveVideoView.setClosedCaptioningEnabled (true); brightcoveVideoView.setSubtitleLocale ( "fr");}}); 한 번 (EventType.CAPTIONS_LANGUAGES, 새 EventListener () {@ 오버라이드 public void processEvent (이벤트 이벤트)

최대 비트 전송률 설정

플레이어에 비트 전송률 선택기를 구현하는 데 도움이되도록 다음 코드를 사용하여 최대 비트 전송률을 설정할 수 있습니다.

((ExoPlayerVideoDisplayComponent) videoView.getVideoDisplay ()). setPeakBitrate (bitRate);

360 ° 동영상 용 VR 고글 모드 설정

360 ° 비디오를 재생할 때 사용자는 컨트롤 막대에서 비디오 360 버튼을 선택하여 VR 고글 모드로 전환 할 수 있습니다. 다음 중 하나를 사용하는 경우 BrightcovePlayer or BrightcovePlayerFragment VR 고글 모드가 활성화되면 화면 방향이 가로 방향으로 변경됩니다.

사용자 정의 액티비티를 사용하는 경우 다음을 추가해야합니다.

이벤트가 발생했을 때 이벤트 핸들러에서 이벤트가 발생하면 이벤트 핸들러에 이벤트가 발생합니다. 이벤트가 발생하면 이벤트 핸들러에 이벤트가 발생합니다. 이벤트가 발생하면 이벤트 핸들러에 이벤트가 발생합니다.

비디오 스틸 이미지 표시 / 숨기기

비디오 클라우드 라이브러리에서 비디오를 가져올 때의 기본 동작은 재생이 시작될 때까지 비디오 스틸 이미지를 표시하는 것입니다.

비디오 스틸 이미지 숨기기

비디오를 자동 재생하는 경우 비디오 스틸 이미지를 숨길 수 있습니다. 이를 위해 당신은 SET_VIDEO_STILL 이벤트를 제거하고 다음과 같이 기본 동작을 방지하십시오.

public void processEvent (Event event) {event.preventDefault (); event.stopPropagation ();}}); // 이벤트 콜렉션에 이벤트를 보내면 이벤트가 발생합니다.

비디오 정지 이미지 표시

언제든지 비디오를 표시 할 수 있습니다. SET_VIDEO_STILL 이벤트 VIDEO_STILL 속성은 비디오 스틸의 URI로 설정됩니다.

비디오 중간에서 재생 시작

경우에 따라 동영상 중간에서 재생을 시작해야 할 수도 있습니다. 이렇게하려면 전화를 걸 수 있습니다. BrightCoveVideoView.seekTo () 재생을 시작하기 전에.

비디오 클립 (video 비디오) {Log.v (TAG, "onVideo : video ="+ video), brightcoveVideoView.getEventEmitter ()를 오버라이드 (override)합니다. (동영상), brightcoveVideoView.pause (), BrightcoveVideoView.pause (), BrightcoveVideoView.add (비디오 이벤트), BrightcoveVideoView.start () ;}});

동영상 스와핑

이 예제는 플레이어에서 비디오를 교환하는 한 가지 방법을 보여줍니다.

단일 비디오 사용

이후 명확한() 메서드가 현재 비디오를 언로드 할 때 비동기이면 새 비디오를 플레이어에 추가하기 전에 기다려야합니다. 다음 두 가지 옵션이 있습니다.

  • 비디오 클라우드에서 비디오를 가져올 시간이 재생 목록을 업데이트하는 시간을 줄여야하므로 다음과 같이 시도 할 수 있습니다.

    brightcoveVideoView.clear (); catalog.findVideoByID ( "123456789", 새 VideoListener () {@ public void onVideo (최종 비디오 비디오) {brightcoveVideoView.add (video);
  • 또 다른 방법은 이벤트를 기다리는 것입니다.

    (이벤트 비디오) {public void processEvent (이벤트 이벤트) {brightcoveVideoView.add (이벤트 비디오 이벤트)} { 비디오); brightcoveVideoView.start ();}}); brightcoveVideoView.clear ();}}));

재생 목록 사용

재생 목록으로 작업하는 경우에는 명확한() 메서드는 재생 목록의 모든 요소를 ​​제거합니다. 그래서, 당신은 IndexOutOfBounds 재생 목록의 첫 번째 동영상으로 이동하려고 할 때 예외입니다.

대신 다음과 같이 시도해 볼 수 있습니다.

brightcoveVideoView.pause (); brightcoveVideoView.stopPlayback (); brightcoveVideoView.setCurrentIndex (0);

재생 목록의 비디오 간 전환

재생 목록을 사용하는 경우 다음 코드를 사용하여 재생 목록의 동영상간에 전환 할 수 있습니다.

private void setupControls (List <Video> 비디오) {previousVideoButton = (Button) findViewById (R.id.previous_video_button); nextVideoButton = (버튼) findViewById (R.id.next_video_button); if (videos! = null) {previousVideoButton.setEnabled (false); previousVideoButton.setOnClickListener (새 View.OnClickListener () {public void onClick (View view) {int index = brightcoveVideoView.getCurrentIndex (); int 크기 = brightcoveVideoView.getList (). 크기 (); 이전 비디오 구성 요소 .setEnabled (인덱스> 1); nextVideoButton.setEnabled ((index + 1) <size); if (index> 0) {brightcoveVideoView.setCurrentIndex (index - 1);}}}); nextVideoButton.setEnabled (videos.size ()> 1); nextVideoButton.setOnClickListener (new view.OnClickListener () {public void onClick (View view) {int index = brightcoveVideoView.getCurrentIndex (); int 크기 = brightcoveVideoView.getList (). size (); previousVideoButton.setEnabled (index> = 0) ; nextVideoButton.setEnabled ((index + 2) <size); if ((index + 1) <size) {brightcoveVideoView.setCurrentIndex (index + 1);}}}); }}

볼륨 조절 작업

프로그래밍 방식으로 플레이어를 음소거하거나 음소거를 해제 할 수 있습니다. 가능한 경우 Brightcove는 BrightcoveExoPlayerVideoView를 사용할 것을 권장합니다.

BrightcoveExoPlayerVideoView

를 사용할 때 BrightcoveExoPlayerVideoView다음을 수행하여 프로그래밍 방식으로 플레이어를 음소거 또는 음소거 해제 할 수 있습니다.

float volume = 100; ... BrightcoveVideoView.getEventEmitter (). on (EventType.DID_SET_VIDEO, 새 EventListener () {@Override public void processEvent (이벤트 이벤트) {setMute (true); ... 개인 무효 setMute (부울 음소거) {볼륨 = 음소거? 0 : 100; 지도  properties = new HashMap <> (); properties.put (Event.VOLUME, volume); brightcoveVideoView.getEventEmitter (). emit (EventType.SET_VOLUME, properties); }  ,>

BrightcoveVideoView

귀하가 BrightcoveVideoView, 안드로이드를 사용하는 MediaPlayer다음 코드를 사용하여 플레이어를 프로그래밍 방식으로 음소거 또는 음소거 해제 할 수 있습니다.

float volume = 100; ... BrightcoveVideoView.getEventEmitter (). on (EventType.DID_SET_VIDEO, 새 EventListener () {@Override public void processEvent (이벤트 이벤트) {setMute (true); ... 개인 무효 setMute (부울 음소거) {볼륨 = 음소거? 0 : 1; Map <String, Object> properties = 새로운 HashMap <> (); properties.put (Event.LEFT_VOLUME, volume); properties.put (Event.RIGHT_VOLUME, volume); brightcoveVideoView.getEventEmitter (). emit (EventType.SET_VOLUME, properties); }