Skip to content

Примеры интеграции Android SDK

Этот раздел демонстрирует примеры интеграции Teleport SDK с популярными Android-плеерами: ExoPlayer и Media3.

1. Пример интеграции с ExoPlayer

Интеграция с ExoPlayer включает в себя создание TeleportDataSourceFactory и передачу его в ExoPlayer.Builder.

kotlin
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.google.android.exoplayer2.ExoPlayer
import com.google.android.exoplayer2.MediaItem
import com.google.android.exoplayer2.Player
import com.google.android.exoplayer2.source.DefaultMediaSourceFactory
import com.google.android.exoplayer2.ui.PlayerView
import com.teleport.TeleportApi
import com.teleport.TeleportConfiguration
import com.teleport.exoplayer.TeleportDataSourceFactory // Импорт для ExoPlayer

class MainActivity : AppCompatActivity() {

    private var exoPlayer: ExoPlayer? = null
    private var teleportApi: TeleportApi? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 1. Создаем конфигурацию Teleport с вашим API_KEY
        val teleportConfiguration = TeleportConfiguration.Builder("YOUR_API_KEY") // Замените на ваш API_KEY
            .build()

        // 2. Инициализируем TeleportApi
        val teleportApi = TeleportApi(this, teleportConfiguration)
            .also { this.teleportApi = it }

        // 3. Создаем фабрику для DataSource, которая будет взаимодействовать с Teleport
        val dataSourceFactory = TeleportDataSourceFactory(teleportApi)

        // 4. Создаем MediaSourceFactory, используя нашу TeleportDataSourceFactory
        val mediaSourceFactory = DefaultMediaSourceFactory(this)
            .setDataSourceFactory(dataSourceFactory)

        // 5. Создаем ExoPlayer, передавая ему нашу MediaSourceFactory
        val exoPlayer = ExoPlayer.Builder(this)
            .setMediaSourceFactory(mediaSourceFactory)
            .build()
            .also { this.exoPlayer = it }

        // 6. Добавляем слушатель для отслеживания событий плеера (например, буферизации)
        exoPlayer.addListener(object : Player.Listener {
            override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) {
                if (playbackState == Player.STATE_BUFFERING) {
                    teleportApi.buffering() // Сообщаем Teleport о буферизации
                }
            }
        })

        // 7. Привязываем плеер к PlayerView и устанавливаем медиа-элемент
        val playerView = findViewById<PlayerView>(R.id.playerView)
        playerView.player = exoPlayer
        val item = MediaItem.fromUri("YOUR_STREAM_URL") // Замените на URL вашего видеопотока
        exoPlayer.setMediaItem(item)
    }

    override fun onResume() {
        super.onResume()
        exoPlayer?.play() // Возобновляем воспроизведение при возобновлении активности
    }

    override fun onPause() {
        super.onPause()
        exoPlayer?.pause() // Приостанавливаем воспроизведение при паузе активности
    }

    override fun onDestroy() {
        super.onDestroy()
        exoPlayer?.release() // Освобождаем ресурсы ExoPlayer
        exoPlayer = null
        // Важно: Высвобождаем ресурсы TeleportApi после высвобождения ресурсов плеера
        teleportApi?.release()
        teleportApi = null
    }
}

Важно

Не забудьте заменить "YOUR_API_KEY" на ваш реальный API-ключ из кабинета Teleport и "YOUR_STREAM_URL" на URL вашего видеопотока.

2. Пример интеграции с Media3

Интеграция с Media3 очень похожа на интеграцию с ExoPlayer, поскольку Media3 является следующим поколением библиотек для медиа в Android, построенным на базе ExoPlayer. Основное отличие заключается в использовании соответствующих пакетов Media3.

kotlin
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.media3.exoplayer.ExoPlayer // Изменено на Media3
import androidx.media3.common.MediaItem // Изменено на Media3
import androidx.media3.common.Player // Изменено на Media3
import androidx.media3.exoplayer.source.DefaultMediaSourceFactory // Изменено на Media3
import androidx.media3.ui.PlayerView // Изменено на Media3
import com.teleport.TeleportApi
import com.teleport.TeleportConfiguration
import com.teleport.media3.TeleportDataSourceFactory // Изменено на Media3

class MainActivity : AppCompatActivity() {

    private var exoPlayer: ExoPlayer? = null // Тип остается ExoPlayer
    private var teleportApi: TeleportApi? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val teleportConfiguration = TeleportConfiguration.Builder("YOUR_API_KEY").build()

        val teleportApi = TeleportApi(this, teleportConfiguration)
            .also { this.teleportApi = it }

        val dataSourceFactory = TeleportDataSourceFactory(teleportApi)

        val mediaSourceFactory = DefaultMediaSourceFactory(this)
            .setDataSourceFactory(dataSourceFactory)
        val exoPlayer = ExoPlayer.Builder(this)
            .setMediaSourceFactory(mediaSourceFactory)
            .build()
            .also { this.exoPlayer = it }

        exoPlayer.addListener(object : Player.Listener {
            override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) {
                if (playbackState == Player.STATE_BUFFERING) {
                    teleportApi.buffering()
                }
            }
        })

        val playerView = findViewById<PlayerView>(R.id.playerView)
        playerView.player = exoPlayer
        val item = MediaItem.fromUri("YOUR_STREAM_URL")
        exoPlayer.setMediaItem(item)
    }

    override fun onResume() {
        super.onResume()
        exoPlayer?.play()
    }

    override fun onPause() {
        super.onPause()
        exoPlayer?.pause()
    }

    override fun onDestroy() {
        super.onDestroy()
        exoPlayer?.release()
        exoPlayer = null
        teleportApi?.release()
        teleportApi = null
    }
}

Примечание

Основное отличие при интеграции с Media3 заключается в использовании классов из пакетов androidx.media3.* вместо com.google.android.exoplayer2.* и использовании com.teleport.media3.TeleportDataSourceFactory. Логика инициализации и взаимодействия остается практически идентичной.