DASH

HEETAE HEO·2023년 4월 11일
0
post-thumbnail

DASH 란?

Dynamic Adaptive Streaming over HTTP의 줄임말로 HTTP 프로토콜을 통해 동적으로 적응형 스트리밍을 가능하게 하는 기술입니다. 온라인 미디어 스트리밍에서 가장 큰 문제 중 하나는 네트워크 상태에 따라 스트리밍 품질이 떨어지는 것입니다. DASH는 이러한 문제를 해결하기 위해 개발되었습니다.

DASH는 네트워크 상태에 따라 스트리밍 콘텐츠의 비트레이트를 자동으로 조정하여 최적의 스트리밍 품질을 유지합니다. 이는 네트워크 상태가 좋을때는 높은 품질의 스트리밍을, 네트워크 상태가 나쁠 때는 낮은 품질의 스트리밍을 제공하여 스트리밍 중 끊김이나 버퍼링 문제를 최소화합니다.

위의 기능을 사용하는 곳이 대표적으로 유튜브입니다. 유튜브에서의 동영상을 틀면 네트워크 상태에 따라 (자동)으로 화질을 선택해 영상을 받게됩니다.

추가적으로 말하자면 Android에서는 DASH를 적용하기 위해서는 안드로이드 미디어 플레이어 라이브러리, 예를 들어 Exoplayer 또는 미디어 플레이어 구현 라이브러리 등을 사용하여 DASH를 적용할 수 있습니다.

장단점

장점

  1. 네트워크 상태에 따라 스트리밍 품질을 자동으로 조정하여 스트리밍 중 끊김이나 버퍼링 문제를 최소화합니다.

  2. HTTP 프로토콜을 사용하여 스트리밍이 가능하므로 프록시, 파이어웨이 등의 제약 없이 스트리밍이 가능합니다.

  3. 다양한 디바이스에서 재생이 가능하므로 호환성이 높습니다.

단점

  1. 스트리밍 서버와 클라이언트 모두 DASH에 대한 지원이 필요합니다.

  2. 처음 설정하는 것이 복잡할 수 있으며 높은 전송률이 필요하며, 네트워크 상태가 좋지 않은 경우 스트리밍 품질이 떨어질 수 있습니다.

간단 DASH 사용 방식

ExoPlayer 라이브러리를 프로젝트에 추가합니다.

implementation 'com.google.android.exoplayer:exoplayer:2.x.x'

Hilt를 사용하여 ExoPlayer 객체를 주입합니다.

@Module
@InstallIn(ActivityComponent::class)
class ExoPlayerModule {
    @Provides
    fun provideExoPlayer(context: Context): SimpleExoPlayer {
        return ExoPlayerFactory.newSimpleInstance(context)
    }
}

MVVM 구조를 사용하여 ViewModel 클래스를 생성합니다.

@HiltViewModel
class PlayerViewModel @Inject constructor(
    private val exoPlayer: SimpleExoPlayer
) : ViewModel() {
    ...
}

클린 아키텍처를 적용하여 Activity 클래스에서 ExoPlayer 객체를 사용할 수 있도록 설정합니다.

@AndroidEntryPoint
class PlayerActivity : AppCompatActivity() {

    @Inject
    lateinit var exoPlayer: SimpleExoPlayer

    override fun onCreate(savedInstanceState: Bundle?) {
        AndroidInjection.inject(this)
        super.onCreate(savedInstanceState)
        ...
        playerView.player = exoPlayer
    }
    ...
}

DASH 스트리밍 URL을 ExoPlayer 객체에 제공하여 재생합니다.

val dashUrl = "http://url.mpd"
val mediaSource = DashMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(dashUrl))
exoPlayer.prepare(mediaSource)
exoPlayer.playWhenReady = true

다음과 같이 코드를 사용하면 DASH 스트리밍을 재생할 수 있습니다.

profile
Android 개발 잘하고 싶어요!!!

0개의 댓글