Skip to content
Open

cm #1

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
local.properties
3 changes: 3 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions .idea/.name

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/compiler.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 20 additions & 0 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 22 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

167 changes: 165 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,165 @@
# sigma-interactive-android-tv-sdk-example
Sigma Interactive Android TV Sdk example
# SigmaInteractive SDK

## Requirement: Android minSdk 21, Exoplayer 2.17.+

### I. Cài đặt

Thêm file [SigmaInteractiveTVSDK.aar](https://github.com/truongnguyen1804/sigma-interactive-android-tv-sdk-example/tree/main/libs) vào thư mục libs cùng cấp với thư mục app của project.

Thêm vào app/build.gradle:

```
dependencies {
...
implementation files('../libs/SigmaInteractiveTVSDK.aar')

}
```

### II. Sử dụng

1. Thêm SigmaInteractive sdk vào project (mục **I**).

2. Thêm sự kiện lắng nghe khi id3 bắt đầu parse để gửi dữ liệu cho sdk tương tác

[SigmaRendererFactory](https://github.com/phamngochai123/sigma-interactive-sdk-example/blob/mobile-android/app/src/main/java/com/example/sigmainteractive/SigmaRendererFactory.java) xem trong demo

```java
DefaultRenderersFactory renderersFactory = new SigmaRendererFactory(this, metadata -> {
if (metadata != null) {
for (int i = 0; i < metadata.length(); i++) {
Metadata.Entry entry = metadata.get(i);
if (entry instanceof TextInformationFrame) {
String des = ((TextInformationFrame) entry).description;
String value = ((TextInformationFrame) entry).value;
if (des.toUpperCase().equals("TXXX")) {
_interactiveWebview.sendID3TagInstant(value);
}
}
}
}
});

exoPlayer = new ExoPlayer.Builder(this, renderersFactory).build();

```

3. Thêm sự kiện lắng nghe khi id3 trả ra đúng thời điểm hẹn giờ để gửi dữ liệu cho sdk tương tác

```java
exoPlayer.addAnalyticsListener(new AnalyticsListener() {
@Override
public void onMetadata(EventTime eventTime, Metadata metadata) {
Log.d("checkListener", new Gson().toJson(metadata));
if (metadata != null) {
for (int i = 0; i < metadata.length(); i++) {
Metadata.Entry entry = metadata.get(i);
if (entry instanceof TextInformationFrame) {
String des = ((TextInformationFrame) entry).description;
String value = ((TextInformationFrame) entry).value;
if (des.toUpperCase().equals("TXXX")) {
_interactiveWebview.sendID3Tag(value);
}
}
}
}
}
});
```

4. Tạo SigmaWebViewCallback để lắng nghe các sự kiện từ sdk tương tác.

4.1 Trong hàm onReady gửi dữ liệu dạng json string cho sdk tương tác (bắt buộc)

```java
_interactiveWebview.sendOnReadyBack(new Gson().toJson(getUserOption(token, currrentChannelId)));
```

4.2 Trong hàm onKeyDown lắng nghe các sự kiện phím trả về từ webview và xử lý các sự kiện đó.

```java

@Override
public void onKeyDown(int code) {
Log.d("_interactiveWebview", "onKeyDown " + code);

KeyEvent event = null;

switch (code) {
case SigmaWebView.KEYCODE_UP:
event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_UP);
break;
case SigmaWebView.KEYCODE_DOWN:

btnGuest.requestFocus();
((WebView) _interactiveWebview).setFocusable(true);
((WebView) _interactiveWebview).clearFocus();
break;
case SigmaWebView.KEYCODE_LEFT:
event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_LEFT);
break;
case SigmaWebView.KEYCODE_RIGHT:
event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_RIGHT);
break;
case SigmaWebView.KEYCODE_ENTER:
event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_CENTER);
break;
case SigmaWebView.KEYCODE_ESCAPE:
event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK);
break;
case SigmaWebView.KEYCODE_0:
event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_0);
break;
case SigmaWebView.KEYCODE_1:
event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_1);
break;
case SigmaWebView.KEYCODE_2:
event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_2);
break;
case SigmaWebView.KEYCODE_3:
event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_3);
break;
case SigmaWebView.KEYCODE_4:
event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_4);
break;
case SigmaWebView.KEYCODE_5:
event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_5);
break;
case SigmaWebView.KEYCODE_6:
event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_6);
break;
case SigmaWebView.KEYCODE_7:
event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_7);
break;
case SigmaWebView.KEYCODE_8:
event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_8);
break;
case SigmaWebView.KEYCODE_9:
event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_9);
break;
case SigmaWebView.KEYCODE_PAGEUP:
event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_PAGE_UP);
break;
case SigmaWebView.KEYCODE_PAGEDOWN:
event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_PAGE_DOWN);
break;
}

if (event != null) {
PlayerActivity.this.onKeyDown(event.getKeyCode(), event);
}
}
```

4.3 Hàm onReload được gọi khi token hết hạn, gửi lại dữ liệu dạng json string cho sdk tương tác

```java
_interactiveWebview.sendOnReadyBack(new Gson().toJson(getUserOption(token, currrentChannelId)));
```



####



1 change: 1 addition & 0 deletions app/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
3 changes: 3 additions & 0 deletions app/.idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions app/.idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions app/.idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions app/.idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions app/.idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

73 changes: 73 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
plugins {
id 'com.android.application'
}

android {
compileSdk 31

defaultConfig {
applicationId "com.tdm.tdminteractive"
minSdk 21
targetSdk 31
versionCode 1
versionName "1.0"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

dependencies {

implementation 'androidx.appcompat:appcompat:1.4.2'
implementation 'com.google.android.material:material:1.6.1'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

// implementation project(path: ':sigma_interactive')

implementation files('../libs/SigmaInteractiveTVSDK.aar')

implementation 'com.google.android.exoplayer:exoplayer:2.17.1'

// for core support in exoplayer.

implementation 'com.google.android.exoplayer:exoplayer-core:2.17.1'
// for adding dash support in our exoplayer.

implementation 'com.google.android.exoplayer:exoplayer-dash:2.17.1'

// for adding hls support in exoplayer.

implementation 'com.google.android.exoplayer:exoplayer-hls:2.17.1'

// for smooth streaming of video in our exoplayer.

implementation 'com.google.android.exoplayer:exoplayer-smoothstreaming:2.17.1'

implementation 'com.google.code.gson:gson:2.9.0'

implementation 'com.android.volley:volley:1.2.1'

implementation 'com.auth0:java-jwt:3.19.2'





// for generating default ui of exoplayer


}
Loading