<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<application
...
android:hardwareAccelerated="true"
android:usesCleartextTraffic="true"
tools:replace="android:theme"
>
<activity
...
android:supportsPictureInPicture="true"
android:windowSoftInputMode="adjustResize"
android:hardwareAccelerated="true"
android:usesCleartextTraffic="true"
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation|keyboardHidden
>
dependencies {
...
implementation files('libs/NCPlayerSDK.aar')
implementation 'com.google.code.gson:gson:2.10.1'
...
}
class MainActivity : AppCompatActivity() {
...
/**
* Video Player Enhancement (VPE) 라이선스키
*/
private val licenseKey = "{라이선스키}"; //라이선스키
...
}
class MainActivity : AppCompatActivity() {
...
/**
* 플레이어 비율
*/
private var aspectRatio = 16.0f / 9.0f //16/9로 조절
...
}
Android DRM은 화면캡쳐를 방지하지 않습니다.
class MainActivity : AppCompatActivity() {
...
/**
* 화면 캡쳐 금지 여부 설정
- 안드로이드 DRM은 화면캡쳐를 방지하지 않습니다.
- isScreenCaptureDeny = true 시 캡쳐 및 녹화 방지가 VPE 플레이어에서 적용됩니다.
*/
private val isScreenCaptureDeny = true
...
}
class MainActivity : AppCompatActivity() {
...
/**
* PIP 전환시 UI 변경
* PIP 모드 진입시 플레이어 외 모든 뷰를 숨깁니다.
*/
private fun hideUiElements() {
...
binding.currentTimeText.visibility = View.GONE
...
}
/**
* PIP 해제시 UI 변경
* PIP 모드 해제시 플레이어 외 모든 뷰를 표시합니다.
*/
private fun showUiElements() {
...
binding.currentTimeText.visibility = View.VISIBLE
...
}
...
}
class MainActivity : AppCompatActivity() {
...
/**
* Picture-in-Picture mode enter callback
* 앱이 백그라운드에 있을때 PIP 모드로 전환 호출
*/
override fun onUserLeaveHint() {
player.enterPip(this, 16, 9) //pip 실행시 비율 설정
isInPipMode = true
}
...
}
DRM 콘텐츠 이용시 Backend 서버에서 설정을 받아 처리하세요.
class MainActivity : AppCompatActivity() {
...
private fun startPlayer() {
// 서버에서 플레이어 설정 받아오기 예제 -----------------------
/**
* - TIP : Backend 서버에서 설정을 받아 처리하는 예제 (fetchPlayerOptionsFromServer)
* - ※ DRM 콘텐츠 이용시 Backend 서버에서 설정을 받아 처리하세요.
*
* Backend 서버 예제 목업 API 목록
* - 일반 hls 예제 : https://vpe.sgrsoft.com/api/playUrl
* - Pallycon DRM 테스트 예제 : https://vpe.sgrsoft.com/api/drmTestPallycon
* - One Click Multi DRM 테스트 예제 : https://vpe.sgrsoft.com/api/drmTest
*/
fetchPlayerOptionsFromServer("https://vpe.sgrsoft.com/api/playUrl")
// 코드에서 직접 설정하는 예제 ---------------------------
/**
* Tip : 플레이어에 설정을 전달하는 예제 (setupPlayer)
* - 서버방식을 이용할때는 아래 코드를 제거하세요.
*/
/*setupPlayer("""
{
"playlist":[
{
"file":"{동영상 URL}",
"poster":"{포스터 URL}",
"description":{
"title":"네이버클라우드 테스트 영상",
"created_at":"2024.07.13",
"profile_name":"네이버클라우드",
"profile_image":"{프로필 이미지 URL}"
}
}
],
"autostart":true,
"muted":true,
"progressBarColor":"#ff0000"
}
""");
*/
}
...
}
MainActivity.kt#/code/android/mainactivity