UizaSDK – Giải pháp xử lý video toàn diện
Bài đăng này đã không được cập nhật trong 6 năm
I. Lời giới thiệu
Trong bài viết này mình xin giới thiệu đến các bạn một bộ công cụ in-all-one chuyên về xử lý nội dung video hỗ trợ đa nền tảng (Android, Android TV, iOS, Web-app, WebOS, TizenOS) có tên gọi là UizaSDK. Uiza có thể dùng để xây dựng ứng dụng streaming video với khả năng tương thích và mở rộng mạnh mẽ. Mình sẽ hướng dẫn các bạn tích hợp Uiza với nền tảng Android trong bài viết này (các bạn có thể tham khảo với các nền tảng khác trên github)
II. Nội dung chính
1> Tích hợp thư viện
Bước 1: Thêm JitPack repository vào gradle
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
Bước 2: Thêm dependency
defaultConfig {
multiDexEnabled true
}
dependencies {
//for playing video VOD, LIVE
implementation 'com.github.uizaio.uiza-android-sdk-player:uizacoresdk:[lasted-release-number]'
//for live broadcaster
implementation 'com.github.uizaio.uiza-android-sdk-player:uizalivestream:[lasted-release-number]'
}
Xem phiên bản mới nhất tại đây
2> Khởi tạo SDK
Đầu tiên, các bạn trong trang chủ của Uiza tạo 1 tài khoản để lấy appId và apiKey. Làm theo hướng dẫn tại đây để lấy token.
Trong file Application, các bạn khởi tạo work-space:
public class App extends MultiDexApplication {
@Override
public void onCreate() {
super.onCreate();
UZUtil.initWorkspace(this, api, token, appId);
}
}
Trong file manifest:
<application
android:name=".App " <!-- important -->
>
3> Gọi API
Bước 1: Chúng ta cần extend activity/fragment như sau
public class YourActivity extends BaseActivity{
}
public class YourFragment extends BaseFragment{
}
và chắc chắn phải thêm dòng code sau
UZUtil.setCasty(this);
trước super.onCreate(savedInstanceState); trong onCreate() của activity.
Bước 2: Gọi API sử dụng phương thức sau
UZService service = UZRestClient.createService(UZService.class);
subscribe(service.getListMetadata(), new ApiSubscriber<ResultGetListMetadata>() {
@Override
public void onSuccess(ResultGetListMetadata resultGetListMetadata) {
}
@Override
public void onFail(Throwable e) {
}
});
Cách gọi với các API còn lại cũng tương tự như trên.
4> Cách play video
File layout
<uizacoresdk.view.rl.video.UZVideo
android:id="@id/uiza_video"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
Tạo nội dung trong file MainActivity
public class MainActivity extends BaseActivity implements UZCallback{
...
}
Manifest
<activity
android:name=".MainActivity "
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode" />
Trong onCreate()
uzVideo = (UZVideo) findViewById(R.id.uiza_video);
uzVideo.setUZCallback(this);
UZUtil.initEntity(activity, uzVideo, "put the entity id here");
Play nội dung playlist/folder
UZUtil.initPlaylistFolder(activity, uzVideo, "put the playlist/folder id here");
Xử lý trong các sự kiện của activity life cycle
@Override
public void onDestroy() {
super.onDestroy();
uzVideo.onDestroy();
}
@Override
public void onResume() {
super.onResume();
uzVideo.onResume();
}
@Override
public void onPause() {
super.onPause();
uzVideo.onPause();
}
@Override
public void onStart() {
super.onStart();
uzVideo.onStart();
}
@Override
public void onStop() {
super.onStop();
uzVideo.onStop();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == Constants.CODE_DRAW_OVER_OTHER_APP_PERMISSION) {
if (resultCode == Activity.RESULT_OK) {
uzVideo.initializePiP();
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
5> Customize giao diện
Bước 1: Tạo layout uiza_controller_skin_custom_main.xml như ví dụ.
Bước 2: Tạo layout uiza_controller_skin_custom_detail.xml như ví dụ
- Trong file này, chúng ta có thể chỉnh sửa tùy ý thêm, xóa, sửa các thành phần của layout. Chúng ta sẽ không thay đổi id của các view liên quan đến SDK.
Bước 3: Trong onCreate() chúng ta thêm dòng code
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
UZUtil.setCasty(this);
UZUtil.setCurrentPlayerId(R.layout.uiza_controller_skin_custom_main);
super.onCreate(savedInstanceState);
}
6> Xử lý livestream với UizaSDK
Layout:
<uizalivestream.uiza.UZLivestream
android:id="@+id/uiza_livestream"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Class LivestreamBroadcasterActivity
public class LivestreamBroadcasterActivity extends BaseActivity implements UZLivestream.Callback {
...
}
Phương thức onCreate()
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
uzLivestream = (UZLivestream) findViewById(R.id.uiza_livestream);
uzLivestream.setCallback(this);
Phương thức onResume()
@Override
protected void onResume() {
uzLivestream.onResume();
super.onResume();
}
Thêm dòng code trong surfaceChanged(UZLivestream.StartPreview startPreview);
startPreview.onSizeStartPreview(1280, 720);
Phương thức onPermission()
@Override
public void onPermission(boolean areAllPermissionsGranted) {
if (areAllPermissionsGranted) {
uzLivestream.setId("Put the entity id for livestream here");
}
}
Bắt đầu livestream
if (uzLivestream.prepareAudio() && uzLivestream.prepareVideoHD(false)) {
uzLivestream.startStream(uzLivestream.getMainStreamUrl());
}
Bắt đầu livestream và lưu thành file MP4
if (uzLivestream.prepareAudio() && uzLivestream.prepareVideoHD(false)) {
uzLivestream.startStream(uzLivestream.getMainStreamUrl(), true);
}
Kết thúc streaming
uzLivestream.stopStream();
Chuyển đổi camera:
uzLivestream.switchCamera();
III> Kết
Hiện tại SDK vẫn đang trong quá trình phát triển nên vẫn còn xảy ra một vài issue, tuy nhiên đội ngũ phát triển vẫn đang miệt mài hoàn thiện SDK. Hy vọng với nội dung bài viết này, các bạn sẽ có thêm kinh nghiệm về xử lý nội video để áp dụng cho các ý tưởng của mình.
All rights reserved