Dokumen ini menjelaskan cara mengintegrasikan Native RTS SDK untuk Android dengan ApsaraVideo Player SDK guna menggunakan fitur RTS (Real-Time Streaming).
Integrasi SDK
Gunakan salah satu metode berikut untuk menambahkan dependensi ApsaraVideo Player SDK dan Native RTS SDK.
Panggil metode ApsaraVideo Player SDK
Gunakan metode ApsaraVideo Player SDK untuk mengakses fitur RTS. Untuk detail lebih lanjut tentang fitur ApsaraVideo Player SDK, lihat Fitur Lanjutan dan Referensi API.
Kode contoh berikut memberikan ilustrasi. Untuk kode lengkap, kunjungi halaman Proyek Sumber Terbuka.
Saat menggunakan ApsaraVideo Player SDK untuk menarik aliran melalui RTS, Anda tidak dapat memanggil metode pause untuk menjeda pemutaran. Namun, Anda dapat memanggil metode stop untuk menghentikan pemutaran dan prepare untuk memutar ulang aliran.
Pencarian tidak didukung.
Muat pustaka
Tambahkan
System.loadLibrary("RtsSDK");ke aktivitas yang relevan sesuai kebutuhan bisnis Anda.static { System.loadLibrary("RtsSDK"); }Buat pemain
Gunakan kelas AliPlayerFactory untuk membuat pemain. Dua jenis pemain tersedia: AliPlayer dan AliListPlayer. Gunakan AliPlayer untuk memutar satu aliran. Berikut adalah contoh kode untuk membuat AliPlayer:
AliPlayer aliyunVodPlayer; ..... aliyunVodPlayer = AliPlayerFactory.createAliPlayer(getApplicationContext());Atur pendengar pemain
ApsaraVideo Player SDK menyediakan berbagai pendengar, seperti onPrepared dan onCompletion. Gunakan kode berikut untuk mengatur pendengar:
aliyunVodPlayer.setOnErrorListener(new IPlayer.OnErrorListener() { @Override public void onError(ErrorInfo errorInfo) { // Mendengarkan terjadinya kesalahan. } }); aliyunVodPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() { @Override public void onPrepared() { // Mendengarkan persiapan yang berhasil. } }); aliyunVodPlayer.setOnVideoSizeChangedListener(new IPlayer.OnVideoSizeChangedListener() { @Override public void onVideoSizeChanged(int width, int height) { // Mendengarkan perubahan resolusi video. } }); aliyunVodPlayer.setOnRenderingStartListener(new IPlayer.OnRenderingStartListener() { @Override public void onRenderingStart() { // Mendengarkan tampilan frame pertama. } }); aliyunVodPlayer.setOnInfoListener(new IPlayer.OnInfoListener() { @Override public void onInfo(int type, long extra) { // Mendengarkan peristiwa lainnya, seperti mulai putar ulang berulang, posisi buffer, posisi pemutaran saat ini, dan mulai putar otomatis. } }); aliyunVodPlayer.setOnLoadingStatusListener(new IPlayer.OnLoadingStatusListener() { @Override public void onLoadingBegin() { // Mendengarkan mulai buffering. } @Override public void onLoadingProgress(int percent, float kbps) { // Mendengarkan kemajuan buffering. } @Override public void onLoadingEnd() { // Mendengarkan akhir buffering. } }); aliyunVodPlayer.setOnSubtitleDisplayListener(new IPlayer.OnSubtitleDisplayListener() { @Override public void onSubtitleShow(long id, String data) { // Mendengarkan tampilan subtitle. } @Override public void onSubtitleHide(long id) { // Mendengarkan penghilangan subtitle. } }); aliyunVodPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() { @Override public void onChangedSuccess(TrackInfo trackInfo) { // Mendengarkan keberhasilan beralih antara aliran audio dan video atau antara resolusi. } @Override public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) { // Mendengarkan kegagalan beralih antara aliran audio dan video atau antara resolusi. } }); aliyunVodPlayer.setOnStateChangedListener(new IPlayer.OnStateChangedListener() { @Override public void onStateChanged(int newState) { // Mendengarkan perubahan status pemain. } }); aliyunVodPlayer.setOnSnapShotListener(new IPlayer.OnSnapShotListener() { @Override public void onSnapShot(Bitmap bm, int with, int height) { // Mendengarkan tangkapan snapshot. } });Konfigurasikan sumber pemutaran
ApsaraVideo Player mendukung empat jenis sumber pemutaran: VidSts, VidAuth, VidMps, dan UrlSource. Jika menggunakan UrlSource, tambahkan awalan
artc://pada URL untuk mengaktifkan fitur RTS.UrlSource urlSource = new UrlSource(); urlSource.setUri("artc://<Streaming URL>"); aliyunVodPlayer.setDataSource(urlSource);Atur tampilan antarmuka pengguna (UI)
Jika sumber pemutaran mencakup gambar video, atur tampilan UI untuk menampilkan gambar tersebut. SurfaceView dan TextureView didukung. Contoh kode untuk SurfaceView:
surfaceView = (SurfaceView) findViewById(R.id.playview); surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { aliyunVodPlayer.setDisplay(holder); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { aliyunVodPlayer.surfaceChanged(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { aliyunVodPlayer.setDisplay(null); } });Atur kontrol pemutaran
Buat tombol kontrol pemutaran dan kaitkan peristiwa klik dengan metode kontrol pemutaran untuk mengimplementasikan fungsi dasar seperti memutar dan menghentikan. Berikut adalah contoh kode:
// Persiapkan pemutaran. Anda dapat menentukan metode start() dalam callback sehingga pemutaran dimulai setelah persiapan selesai. aliyunVodPlayer.prepare(); // Mulai pemutaran. aliyunVodPlayer.start(); // Hentikan pemutaran. aliyunVodPlayer.stop(); // Reset pemain. aliyunVodPlayer.reset(); // Lepaskan pemain. Pemain tidak dapat digunakan setelah dilepaskan. aliyunVodPlayer.release();Atur parameter pemutaran
Atur parameter pemutaran untuk meningkatkan efek RTS.
// Periksa konfigurasi. PlayerConfig config = mAliyunVodPlayer.getConfig(); // Atur latensi maksimum menjadi 1 detik. Protokol Alibaba Real-Time Communication (ARTC) mengontrol latensi. config.mMaxDelayTime = 1000; // Atur periode buffer menjadi 10 milidetik. Protokol ARTC mengontrol periode buffer. config.mHighBufferDuration = 10; config.mStartBufferDuration = 10; .... // Konfigurasikan pengaturan lainnya. // Muat pengaturan untuk pemain. mAliyunVodPlayer.setConfig(config);Aktifkan atau nonaktifkan pencatatan
// Aktifkan pencatatan. Logger.getInstance(context).enableConsoleLog(true); Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_TRACE); // Nonaktifkan pencatatan. Logger.getInstance(context).enableConsoleLog(false); Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_NONE);Gunakan protokol terdegradasi untuk streaming langsung
Ubah awalan URL sumber dari artc:// ke format HTTP-FLV, lalu perbarui UrlSource di ApsaraVideo Player untuk menggunakan protokol terdegradasi dalam memutar aliran langsung.
/** * Konfigurasikan kebijakan degradasi. */ private void willBeDemoted() { mRtsAliPlayer.stop(); if (mUrl.startsWith("artc://")) { setDataSource("http://xxxx.flv"); mRtsAliPlayer.prepare(); } }Peroleh TraceId
Saat pesan yang diteruskan oleh komponen pemutaran dikembalikan dalam panggilan balik acara pemain, analisis string JSON yang menggambarkan acara pemain. Kode yang diperoleh merupakan pesan dalam RTS SDK. Saat menerima E_HELP_SUPPORT_ID_SUBSCRIBE, analisis bagian string setelah "-sub-" untuk mendapatkan TraceId.
private static final int TRACE_ID_CODE = 104; // 1. Dengarkan callback onInfo dan analisis pesan acara RTS. mRtsAliPlayer.setOnInfoListener(infoBean -> { if (infoBean.getCode() == InfoCode.DirectComponentMSG) { String extraMsg = infoBean.getExtraMsg(); parseDirectComponentMSG(extraMsg); } }); private void parseDirectComponentMSG(String msg) { if (msg.contains("code=" + TRACE_ID_CODE)) { parseTraceId(msg); } } /** * Analisis TraceId. */ private void parseTraceId(String msg) { String[] split = msg.split("-sub-"); if (split.length >= 1) { mTraceId = "RequestId:" + (split[1].substring(0, split[1].length() - 1)); mTraceId = mTraceId.replace("\"", "").replace("\\", ""); } }
