Trong thập kỷ qua, phát trực tiếp đã dần trở thành một trong những hình thức giải trí phổ biến nhất. Ngày càng có nhiều người thích chia sẻ cuộc sống của họ với công chúng thông qua phát trực tiếp.
Ngày nay, có rất nhiều lựa chọn về ứng dụng phát trực tuyến như Twitch, Facebook Live và Youtube Live; những ứng dụng này cung cấp nhiều tính năng thú vị như bộ lọc khuôn mặt và bộ thay đổi giọng nói. Nhưng bạn đã bao giờ nghĩ đến việc tự mình xây dựng một ứng dụng phát trực tuyến chưa? Bạn đang do dự vì một số tính năng này có vẻ quá lạ mắt hoặc phức tạp?
May mắn thay, bằng cách sử dụng SDK video Agora và Banuba Face AR SDK giúp việc phát triển ứng dụng phát trực tuyến với bộ lọc khuôn mặt trở nên nhanh chóng và dễ dàng. Hôm nay, tôi sẽ hướng dẫn bạn từng bước cách thực hiện việc này trên Android.
- Hiểu biết từ cơ bản đến trung cấp về Java và Android SDK
- Tài khoản Agora.io
- Ứng dụng demo Banuba Face AR
- Android Studio và 2 thiết bị Android
Xin lưu ý: Mặc dù không cần có kiến thức về Java/Android để theo dõi nhưng một số khái niệm cơ bản nhất định trong Java/Android sẽ không được giải thích trong suốt quá trình.
Hướng dẫn này sẽ trình bày các bước để xây dựng ứng dụng phát trực tiếp trên Android bằng Agora SDK. Đây là danh sách các tính năng cốt lõi sẽ có trong ứng dụng của chúng tôi:
- Người dùng (luồng và khán giả) có thể tạo và đăng nhập vào tài khoản của họ. Thông tin tài khoản người dùng sẽ được lưu trong Cơ sở dữ liệu thời gian thực của Google Firebase.
- Người dùng có thể thiết lập phòng ảo để tổ chức các buổi phát trực tiếp và trở thành người truyền phát.
- Người dùng có thể tìm thấy tất cả các buổi phát trực tiếp và tham gia phòng ảo với tư cách khán giả.
- Người phát trực tiếp có thể sử dụng tính năng lọc khuôn mặt để phát trực tiếp bằng mặt nạ ảo hoặc hoạt ảnh.
- Người truyền phát có thể thay đổi giọng nói của mình thông qua công cụ thay đổi giọng nói.
- Khán giả trong một ảo phòng có thể gửi tin nhắn văn bản mà mọi người trong phòng đó đều có thể nhìn thấy.
- Người dùng có thể tìm kiếm những người dùng khác theo tên của họ và gửi tin nhắn văn bản riêng tư cho họ.
Bạn có thể tìm thấy cái này ứng dụng demo làm tài liệu tham khảo cho bài viết này.
Việc xây dựng ứng dụng của chúng tôi dựa trên nó sẽ dễ dàng hơn Ứng dụng demo Banuba FaceAR. Gói chứa mặc định Ứng dụng demo Banuba SDK chứng minh Thiếu tá Banuba Tính năng SDK và ứng dụng ví dụ làm đẹp với tính năng tô màu mạng lưới thần kinh. Chúng tôi sẽ tập trung vào Ứng dụng demo Banuba SDK cho dự án của chúng tôi. Hãy thoải mái khám phá ứng dụng ví dụ làm đẹp tự mình.
Bây giờ hãy tải xuống Banuba FaceAR ứng dụng demo và mở nó trong Android Studio. Theo hướng dẫn trực tuyến để thiết lập dự án.
Bạn cần có mã thông báo khách hàng Banuba để chạy dự án. Liên hệ info@banuba.com để biết thêm thông tin chi tiết.
Sau khi hoàn tất, hãy chạy dự án “ứng dụng” và bạn sẽ có thể thấy thứ gì đó như thế này với nhiều tùy chọn bộ lọc khuôn mặt thú vị:
Đây sẽ là chế độ xem của người phát trực tiếp của chúng tôi khi anh ấy bắt đầu phát trực tiếp. Tuy nhiên, bản demo Banuba chỉ thêm bộ lọc khuôn mặt vào chế độ xem camera cục bộ. Nếu chúng tôi muốn gửi điều này tới tất cả khán giả, đó là nơi SDK video Agora đi kèm rất tiện dụng.
1. Làm cách nào để sử dụng các bộ lọc AR tinh tế để tồn tại trong các cuộc họp Zoom của bạn?
2. Màn hình ảo không có tai nghe đầu tiên
Để tích hợp Agora SDK vào dự án của bạn, bạn cần thêm các dòng sau vào /app/build.gradle tập tin của dự án.
// Agora RTC SDK cho cuộc gọi điện video
thực hiện 'io.agora.rtc:full-sdk:3.0.1.1'// Agora RTM SDK dành cho nhắn tin trò chuyện
thực hiện 'io.agora.rtm:rtm-sdk:1.2.2'//Agora UIKit
thực hiện 'io.agora.uikit:agorauikit:2.0.1'
Việc triển khai đầu tiên là dành cho SDK video Agora. Trong khi cái thứ hai dành cho SDK nhắn tin thời gian thực của Agora. Và cái cuối cùng là dành cho Agora Android UIKit đó là trình bao bọc giao diện người dùng Android của Agora. Sử dụng UIKit, bạn chỉ cần một vài dòng mã để bắt đầu cuộc gọi điện video. Và tôi sẽ chứng minh điều đó trong phần sau của blog này khi chúng ta xử lý quan điểm của khán giả.
Thêm quyền dự án
Điều tiếp theo chúng ta cần làm là thêm quyền của dự án vào /app/src/main/AndroidManifest.xml tập tin để truy cập thiết bị theo nhu cầu của bạn:
<bảng kê khai xmlns:android="http://schemas.android.com/apk/res/android"
hữu ích. Cảm ơn !>
<quyền sử dụng android:name="android.permission.READ_PHONE_STATE" />
<quyền sử dụng android:name="android.permission.INTERNET" />
<quyền sử dụng android:name="android.permission.RECORD_AUDIO" />
<quyền sử dụng android:name="android.permission.CAMERA" />
<quyền sử dụng android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<quyền sử dụng android:name="android.permission.ACCESS_NETWORK_STATE" />
<quyền sử dụng android:name="android.permission.BLUETOOTH" />
<quyền sử dụng android:name="android.permission.ACCESS_WIFI_STATE" />
<quyền sử dụng android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
hữu ích. Cảm ơn !
</biểu hiện>
Vì ứng dụng của chúng tôi cho phép người dùng tìm kiếm và trò chuyện với những người dùng khác trong ứng dụng nên chúng tôi cần sử dụng Cơ sở dữ liệu thời gian thực Firebase để lưu thông tin tài khoản của người dùng. Dưới đây là các bước bạn cần để kết nối ứng dụng của mình với Cơ sở dữ liệu thời gian thực Firebase:
- Trong Android Studio của bạn, hãy nhấp vào “CÔNG CỤ Sau đó, chọnTường lửa".
2. Ở phía bên phải, bạn sẽ thấy tab trợ lý Firebase hiển thị. Tìm thấy "Cơ sở dữ liệu thời gian thựcSau đóLưu và truy xuất dữ liệu".
3. Sau đó, bạn sẽ thấy trang chi tiết về Cơ sở dữ liệu thời gian thực. Nhấn vào "Kết nối với căn cứ hỏa lựcNút vàThêm Cơ sở dữ liệu thời gian thực vào ứng dụng của bạn" cái nút. Làm theo hướng dẫn trên màn hình, nếu có.
4. Bây giờ ứng dụng của bạn đã được kết nối với Cơ sở dữ liệu thời gian thực Firebase. Điều cuối cùng bạn cần làm là truy cập Firebase của bạn giao diện điều khiển và thay đổi các quy tắc cơ sở dữ liệu. Hãy nhớ chọn Cơ sở dữ liệu thời gian thực thay vì Cloud Firestore. Thay đổi quy tắc đọc và ghi thành “đúng” để bạn có thể truy cập vào cơ sở dữ liệu.
Đầu tiên, hãy xây dựng ứng dụng của chúng ta từ trang đầu tiên. Giống như hầu hết các ứng dụng phát trực tuyến, ứng dụng của chúng tôi cần có trang đăng nhập của người dùng. Và nó sẽ trông như thế này:
Khi người dùng nhấp vào “SauNút ”, chúng tôi cần lấy tên người dùng và chuyển tên đó cho hoạt động tiếp theo, Trang chủHoạt động. Đây là mã cho điều đó.
khoảng trống công cộng onLoginNextClick(Xem chế độ xem) {
EditText userNameEditText = findViewById(R.id.et_login_user_name);
Chuỗi tên người dùng = userNameEditText.getText().toString();if(Tên người dùng == vô giá trị || userName.equals("")) {
Bánh mì nướng.tạo văn bản(điều này, "tên ngươi dung không được để trông", Nướng.LENGTH_SHORT).trình diễn();
}khác {
Ý định có ý định = mới Ý định(điều này, Hoạt động tại nhà.tốt nghiệp lớp XNUMX);
ý định.putExtra("tên tài khoản", tên tài khoản);
startActivity (ý định);
}
}
Trong tạp chí Trang chủHoạt động, chúng ta sẽ tạo một trang ba trang thanh điều hướng phía dưới với một miếng được kết nối với mỗi trang. Nếu người dùng chạm vào menu điều hướng phía dưới đầu tiên, anh ta sẽ được dẫn đến LIVE miếng. Tương tự, menu thứ hai sẽ hướng người dùng đến Trò chuyện mảnh vỡ và mảnh cuối cùng là Nền tảng khác miếng.
Trong tạp chí onTạo phương pháp của Trang chủHoạt động, chúng tôi sẽ lấy tên người dùng được chuyển từ hoạt động trước đó và lưu thông tin người dùng đó trên Cơ sở dữ liệu Firebase.
@Ghi đè
khoảng trống được bảo vệ onCreate(Gói đã lưuInstanceState) {
siêu.onCreate(savedInstanceState);
setContentView(R.layout.hoạt động_home);
tên tài khoản = getIntent().getStringExtra("tên tài khoản");saveUserOnFireDatabase(tên tài khoản);
khoảng trống riêng tư saveUserOnFireDatabase(String userName) {
}
mRef = Cơ sở dữ liệu Firebase.nhận được().getReference("Người dùng");
mRef.xô();
mRef.child(userName).setValue(mới DBUser(tên người dùng, sai));
}
Mảnh sống
Đoạn Trực tiếp nhằm hiển thị tất cả tên của người phát trực tiếp và cho phép người dùng khác tham gia phòng ảo của người phát trực tiếp bằng cách nhấp vào nút.
Ở giữa đoạn này là chế độ xem tái chế hiển thị tất cả các bộ truyền phát trực tiếp. Bạn có thể truy xuất dữ liệu bộ truyền phát từ cơ sở dữ liệu Firebase bằng cách đăng ký Trình nghe sự kiện trẻ em trên tài liệu tham khảo cơ sở dữ liệu Firebase.
childEventListener = mới ChildEventListener() {
@Ghi đè
khoảng trống công cộng onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
Kết quả DBUser = dataSnapshot.getValue(DBUser.tốt nghiệp lớp XNUMX);
if (!result.getName().equals(tên tài khoản) && result.getStreaming() == đúng) {
danh sách phát trực tiếp.add(kết quả);
}
}hữu ích. Cảm ơn !
};
mRef.orderByChild("Tên").addChildEventListener(childEventListener);
Bên cạnh tên của người phát trực tiếp có nút để người dùng tham gia phòng ảo đó. Và điều đó sẽ hướng người dùng đến Khán giả hoạt động sử dụng Intent.
khoảng trống riêng tư joinStream(Chuỗi tên người truyền phát) {
Ý định có ý định = mới Ý định(getActivity(), AudienceActivity.tốt nghiệp lớp XNUMX);
ý định.putExtra("tên người phát trực tuyến", tên người truyền phát);
ý định.putExtra("tên tài khoản", tên tài khoản);
startActivity (ý định);
}
Khi người dùng nhấp vào nút “GO LIVE” ở phía dưới, anh ta sẽ được dẫn đến Hoạt động chủ yêu sử dụng một Ý định. Các Hoạt động chủ yêu là hoạt động kích hoạt tính năng lọc khuôn mặt Banuba mà chúng ta đã thảo luận ở trên.
@Ghi đè
khoảng trống công cộng onClick(Xem v) {
Ý định có ý định = mới Ý định(getActivity(), MainActivity.tốt nghiệp lớp XNUMX);
ý định.putExtra("tên tài khoản", tên tài khoản);
startActivity (ý định);
}
Đoạn trò chuyện
Sản phẩm Trò chuyện đoạn là nơi để người dùng tìm kiếm những người dùng khác và gửi tin nhắn văn bản riêng tư cho họ. Vì vậy, bạn sẽ xây dựng giao diện người dùng của mình như thế này:
Hãy mở Hoạt động chủ yêu lớp học. Từ các bước trước, chúng tôi biết hoạt động này là để thêm các tính năng lọc khuôn mặt trên chế độ xem camera cục bộ. Công việc của chúng tôi ở đây là gửi các chế độ xem camera cục bộ này với các bộ lọc khuôn mặt cho người dùng từ xa.
Khởi tạo RtcEngine và tham gia kênh
Bên trong onTạo gọi lại, lấy tên người dùng được chuyển từ hoạt động chính và khởi tạo Agora RtcEngine.
tên tài khoản = getIntent().getStringExtra("tên tài khoản");thử {
mRtcEngine = RtcEngine.tạo(getBaseContext(), getString(ID ứng dụng), mRtcTrình xử lý sự kiện);
} bắt (Ngoại lệ e) {
Đăng nhập.e(TAG, Nhật ký.getStackTraceString(e));
ném mới Ngoại lệ thời gian chạy("CẦN kiểm tra rtc sdk init lỗi nghiêm trọng" + Nhật ký.getStackTraceString(e));
}
mRtcEngine.enableVideo();
Ở đây bạn cần đặt ID ứng dụng làm tham số khi khởi tạo RtcEngine. Để có được ID ứng dụng trong tham số, hãy làm theo các bước sau:
- Tạo dự án Agora trong Bảng điều khiển Agora.
- Nhấn vào Quản lý dự án tab trên bảng điều hướng bên trái.
- Nhấp vào “Tạo” và làm theo hướng dẫn trên màn hình để đặt tên dự án, chọn cơ chế xác thực và nhấp vào “Gửi”.
- Trên trang Quản lý dự án, tìm ID ứng dụng của dự án của bạn.
Sản phẩm mRtcTrình xử lý sự kiện là trình xử lý để quản lý các sự kiện khác nhau xảy ra với RtcEngine.
Sau đó chúng ta cần gọi setExternalVideoNguồn để chuyển đầu vào video Agora sang nguồn video bên ngoài là khung camera từ Banuba SDK.
mRtcEngine.setExternalVideoSource(đúng, sai, đúng);
Sau đó chúng ta sẵn sàng tham gia kênh bằng cách gọi tham giaChannel() trên phiên bản RtcEngine. Các Tên kênh là tên người dùng chúng tôi nhận được từ hoạt động trước đó. Trong trường hợp này, mỗi người phát trực tiếp sẽ bắt đầu một kênh cuộc gọi điện video với tên người dùng đã nhập của mình khi đăng nhập.
mRtcEngine.joinChannel(mã thông báo, Tên kênh, "Thông tin thêm", 0);
Xin lưu ý: Mã thông báo trong tham số có thể được đặt thành null. Bạn có thể nhận thêm thông tin về mã thông báo tại đây.
Đẩy khung video bên ngoài
Chúng tôi đã cho Agora RtcEngine biết rằng chúng tôi sẽ sử dụng nguồn video bên ngoài làm đầu vào video. Tuy nhiên, chúng tôi vẫn chưa cung cấp khung hình video.
Cuộc gọi đầu tiên startForwardingFrames() trên phiên bản BanubaSDKManager và điều đó sẽ kích hoạt onFrameRendered() gọi lại.
mSdkManager.startForwardingFrames();
Bây giờ, trong onFrameRendered() gọi lại, chúng ta có thể lấy dữ liệu khung camera chứa chế độ xem camera cục bộ và AR Chế độ xem bộ lọc khuôn mặt. Sau đó tạo một AgoraVideoKhung instance và chuyển thông tin này vào. Gọi đẩyExternalKhung video() trên phiên bản Agora RtcEngine và chuyển AgoraVideoKhung ví dụ trong tham số.
@Ghi đè
khoảng trống công cộng onFrameRendered(@NonNull Dữ liệu dữ liệu, int chiều rộng, int chiều cao) {
byte[] mảng = byte mới[dữ liệu.dữ liệu.còn lại()];
dữ liệu.dữ liệu.get(arr);AgoraVideoFrame agoraVideoFrame = mới AgoraVideoFrame();
agoraVideoFrame.buf = mảng;
agoraVideoFrame.stride = chiều rộng;
agoraVideoFrame.cao = chiều cao;
agoraVideoFrame.định dạng = AgoraVideoFrame.FORMAT_RGBA;
agoraVideoFrame.dấu thời gian = Hệ thống.hiện tạiThời gianMillis();
mRtcEngine.pushExternalVideoFrame(agoraVideoFrame);
data.close();
}
Giờ đây, những bộ lọc khuôn mặt và hoạt ảnh thú vị này có thể được gửi đến những người dùng từ xa trong cùng một kênh Rtc.
Bạn có thể kiểm tra nó bằng cách sử dụng Giới thiệu web Agora. Nhập appID, mã thông báo và tên kênh của bạn và bạn sẽ có thể xem video.
Thêm Trình thay đổi giọng nói
Để trải nghiệm phát trực tuyến thú vị hơn, chúng ta có thể thêm tính năng thay đổi giọng nói trong ứng dụng. Tạo một nút trong Hoạt động chủ yêu và đặt phương thức onClick cho điều đó. Khi người dùng nhấp vào đó, chúng tôi sẽ gọi setLocalVoiceChanger để đặt bộ thay đổi giọng nói.
khoảng trống công cộng onVoiceChangerClick(Xem chế độ xem) {
mRtcEngine.setLocalVoiceChanger(VOICE_CHANGER_BABYGIRL);
Bánh mì nướng.tạo văn bản(điều này, "Bộ thay đổi giọng nói BẬT", Nướng.LENGTH_SHORT).trình diễn();
}
Có rất nhiều công cụ thay đổi giọng nói khác nhau mà bạn có thể chọn. Ở đây tôi sử dụng giọng của bé gái. Để biết thêm các tùy chọn thay đổi giọng nói, hãy kiểm tra setLocalVoiceChanger api.
Thiết lập chế độ xem đối tượng dễ dàng hơn. Hãy chuyển đến hoạt động Đối tượng và sử dụng Agora UIKit.
Để sử dụng UIKit, chỉ cần gọi nó trong onTạo() phương pháp.
@Ghi đè
khoảng trống được bảo vệ onCreate(Gói đã lưuInstanceState) {
hữu ích. Cảm ơn !
AgoraRTC.ví dụ().bootstrap(điều này, ID ứng dụng, Tên kênh);
setContentView(R.layout.nhóm_mẫu);
}
Ở đây, id ứng dụng là giống nhau ID ứng dụng chúng tôi đã bước vào Hoạt động chủ yêu và Tên kênh là tên của người phát trực tiếp mà chúng tôi đã chuyển từ mảnh sống.
Để biết thêm thông tin, hãy truy cập UIKit Github.
Chỉ cần 2 dòng mã là bạn có thể bắt đầu cuộc gọi điện video!
Tuy nhiên, trong trường hợp của chúng tôi, chúng tôi cần thêm một số tùy chỉnh để hiển thị cho chế độ xem của khán giả. Đầu tiên, chúng tôi không muốn khán giả gửi luồng video và âm thanh đến kênh.
AgoraRTC.ví dụ().muteLocalVideoStream(đúng);
AgoraRTC.ví dụ().muteLocalAudioStream(đúng);
Ngoài ra, chúng tôi muốn chế độ xem từ xa (streamer view) luôn ở trên màn hình chính. Để làm được điều này chúng ta cần đăng ký IRtcEnginTrình xử lý sự kiện ví dụ.
IRtcEngineTrình xử lý sự kiện xử lý sự kiện = mới IRtcEngineEventHandler() {@Ghi đè
khoảng trống công cộng onRemoteVideoStateChanged(int cuối cùng uid, int tiểu bang, int lý do, int đã trôi qua) {
siêu.onRemoteVideoStateChanged(uid, trạng thái, lý do, đã trôi qua);if (trạng thái == REMOTE_VIDEO_STATE_STARTING) {
@Ghi đè
runOnUiThread(mới Có thể chạy được() {
@Ghi đè
khoảng trống công cộng chạy() {
agoraXem.setUID(uid);
}
});
}
}
};
khoảng trống được bảo vệ onCreate(Gói đã lưuInstanceState) {
hữu ích. Cảm ơn !
agoraXem = findViewById(R.id.max_view);
AgoraRTC.ví dụ().registerListener(xử lý sự kiện);
hữu ích. Cảm ơn !
}
Tùy chỉnh cuối cùng chúng ta cần làm là thêm trình nghe nút bấm vào nút kết thúc cuộc gọi để chuyển hướng người dùng về hoạt động trước đó khi người dùng nhấp vào nút kết thúc cuộc gọi.
endCallButton.setOnClickListener(mới View.OnClickListener() {
@Ghi đè
khoảng trống công cộng onClick(Xem v) {
hoàn thành();
}
});
Cho đến thời điểm này, ứng dụng phát trực tuyến của chúng tôi có thể cho phép người dùng phát trực tiếp bằng tính năng lọc khuôn mặt hoặc xem luồng với tư cách khán giả. Hãy làm cho nó mạnh mẽ hơn bằng cách thêm hệ thống nhắn tin văn bản bằng cách sử dụng SDK RTM của Agora.
Tin nhắn văn bản trong ứng dụng phát trực tuyến có thể được chia thành hai phần: nhắn tin theo kênh và nhắn tin riêng tư. Cái đầu tiên gửi tin nhắn đến kênh và mọi người trong kênh có thể nhận được tin nhắn đó trong khi cái thứ hai gửi tin nhắn riêng tư từ ngang hàng này sang ngang hàng khác.
Tin nhắn kênh
Chúng tôi muốn cho phép tất cả khán giả gửi tin nhắn trong phòng của người phát trực tiếp. Để đạt được điều đó, chúng ta cần tạo ra một RtmClient sử dụng SDK nhắn tin Agora.
mRtmclient = RtmClient.tạo sơ thẩm(mContext, ID ứng dụng, mới RtmClientListener() {
@Ghi đè
khoảng trống công cộng onConnectionStateChanged(int tiểu bang, int lý do){
cho (Trình nghe RtmClientListener: mListenerList) {
Listen.onConnectionStateChanged(trạng thái, lý do);
}
}@Ghi đè
khoảng trống công cộng onMessageReceured (RtmMessage rtmMessage, Chuỗi ngang hàng) { hữu ích. Cảm ơn ! }
});
Ở đây, chúng ta vượt qua tương tự ID ứng dụng như chúng tôi đã sử dụng khi khởi chạy công cụ Agora Video.
Trong tạp chí trênCreateView phương pháp trong mảnh sống, chúng ta cần đăng nhập RtmClient.
mRtmClient.đăng nhập(vô giá trị, tên tài khoản, mới io.agora.rtm.ResultCallback () {
@Ghi đè
khoảng trống công cộng onSuccess(Void aVoid) {
hữu ích. Cảm ơn !
} @Ghi đè
khoảng trống công cộng onFailure(ErrorInfo errorInfo) {
hữu ích. Cảm ơn !
}
});
chúng tôi sử dụng như nhau tên tài khoản như kênh chúng tôi đã từng tham gia kênh gọi điện video. Trong trường hợp này, người dùng sẽ tham gia kênh RTM và kênh RTC có cùng tên kênh.
Trong tạp chí Đối tượngHoạt động phương thức onCreate(), chúng ta sẽ gọi createChannel() trên mRtmClient chúng tôi đã khởi tạo trước đó để tạo một phiên bản RtmChannel.
mRtmKênh = mRtmClient.createChannel(mChannelName, mới MyChannelListener());
Chúng ta cần xác định các Trình nghe kênh của tôi thực hiện Trình nghe RtmChannel với cuộc gọi lại onMessageReceived() để xử lý logic khi chúng ta nhận được tin nhắn gửi từ thành viên bất kỳ trong phòng chat.
tốt nghiệp lớp XNUMX Trình nghe kênh của tôi thực hiện RtmChannelListener {
@Ghi đè
khoảng trống công cộng onMessageReceived(cuối cùng Tin nhắn RtmMessage, cuối cùng RtmChannelMember từMember) {
runOnUiThread(mới Có thể chạy được() {
@Ghi đè
khoảng trống công cộng chạy() {
Tài khoản chuỗi = fromMember.getUserId();
Chuỗi tin nhắn = message.getText();
MessageBean messageBean = mới MessageBean(tài khoản, tin nhắn, sai);
messageBean.setBackground(getMessageColor(tài khoản));
mMessageBeanList.add(messageBean);
mMessageAdapter.notifyItemRangeChanged(mMessageBeanList.size(), 1);
mRecyclerView.scrollToPosition(mMessageBeanList.size() - 1);
}
});
}
hữu ích. Cảm ơn !
}
Sau đó tham gia kênh bằng cách gọi tham gia() trên phiên bản RtmChannel.
mRtmKênh.tham gia(mới Kết quảGọi lại () {
@Ghi đè
khoảng trống công cộng onSuccess(Void replyInfo) { ... }@Override
khoảng trống công cộng onFailure(ErrorInfo errorInfo) { ... }
});
Trong tạp chí onSuccess() gọi lại, chúng ta có thể gọi getMembers() trên phiên bản RtmChannel để lấy số lượng thành viên trong phòng trò chuyện.
Chúng tôi cũng cần thêm một số thành phần giao diện người dùng để cho phép người dùng nhập tin nhắn văn bản của họ và xem lịch sử trò chuyện. Bố cục khán giả phải tương tự như thế này:
Khi người dùng nhấp vào nút “Gửi”, chúng tôi sẽ gửi tin nhắn của họ tới kênh bằng cách gọi gửi tin nhắn() phương thức trên phiên bản RtmChannel.
khoảng trống riêng tư sendChannelMessage(Nội dung chuỗi) {
// bước 1: tạo tin nhắn
Tin nhắn RtmMessage = mRtmClient.soạn tin nhắn();
message.setText(nội dung); // bước 2: gửi tin nhắn tới kênh
mRtmKênh.sendMessage(tin nhắn, mới Kết quảGọi lại () {
@Ghi đè
khoảng trống công cộng onSuccess(Void aVoid) {
hữu ích. Cảm ơn !
}@Ghi đè
khoảng trống công cộng onFailure(ErrorInfo errorInfo) {
hữu ích. Cảm ơn !
}
});
}
Tin nhắn cá nhân
Trong tạp chí Đoạn trò chuyện, người dùng có thể tìm thấy bạn bè của mình bằng cách tìm kiếm tên của người bạn đó và gửi tin nhắn văn bản riêng tư cho họ.
Để tìm kiếm bạn bè theo tên, bạn cần đăng ký ChildEventListener và lấy dữ liệu từ Cơ sở dữ liệu Firebase.
childEventListener = mới ChildEventListener() {
@Ghi đè
khoảng trống công cộng onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
Kết quả DBUser = dataSnapshot.getValue(DBUser.tốt nghiệp lớp XNUMX);
hiển thịBạn bèVăn bản.setText(result.getName());
mRef.orderByChild("Tên").startAt(tên bạn bè).kết thúc tại(tên bạn bè + "uf8ff").removeEventListener(childEventListener);
}
hữu ích. Cảm ơn !
};mRef.orderByChild("Tên").startAt(tên bạn bè).kết thúc tại(tên bạn bè + "uf8ff").addChildEventListener(childEventListener);
Gửi tin nhắn trò chuyện riêng tư rất giống với gửi tin nhắn nhóm. Có một số khác biệt bạn cần chú ý:
- Bạn không cần tạo kênh RTM để gửi tin nhắn.
- Bạn cần đăng ký RtmClientListener và nhận tin nhắn từ onMessageĐã nhận gọi lại.
tốt nghiệp lớp XNUMX Trình nghe MyRtmClient thực hiện RtmClientListener {@Ghi đè
khoảng trống công cộng onMessageReceived(cuối cùng Tin nhắn RtmMessage, cuối cùng Chuỗi ngang hàng) {
runOnUiThread(mới Có thể chạy được() {
@Ghi đè
khoảng trống công cộng chạy() {
Nội dung chuỗi = message.getText();
if (peerId.equals(mPeerId)) {
MessageBean messageBean = mới MessageBean(peerId, nội dung,sai);
messageBean.setBackground(getMessageColor(peerId));
mMessageBeanList.add(messageBean);
mMessageAdapter.notifyItemRangeChanged(mMessageBeanList.size(), 1);
mRecyclerView.scrollToPosition(mMessageBeanList.size() - 1);
} khác {
MessageUtil.thêmMessageBean(peerId, nội dung);
}
}
});
}
hữu ích. Cảm ơn !
}
3. Khi bạn gửi tin nhắn đi, hãy gọi sendMessageToPeer() thay vì gửi tin nhắn() mà chúng tôi đã sử dụng để gửi tin nhắn kênh.
mRtmClient.sendMessageToPeer(mPeerId, tin nhắn, mChatManager.getSendMessageOptions(), mới Kết quảGọi lại () {
@Ghi đè
khoảng trống công cộng onSuccess(Void aVoid) {
hữu ích. Cảm ơn !
}@Ghi đè
khoảng trống công cộng onFailure(ErrorInfo errorInfo) {
hữu ích. Cảm ơn !
}
});
Bây giờ hãy chạy ứng dụng của chúng tôi!
Trong Android Studio, hãy đảm bảo thiết bị Android của bạn đã được cắm và nhấp vào Chạy.
Chúc mừng! Bạn vừa xây dựng cho mình một ứng dụng live streaming với tính năng lọc khuôn mặt và nhắn tin chat!
Thank you for following along. If you want to see more features such as virtual gifting and in app gaming, please leave a comment below! Here is the email address for any of the questions you might have: devrel@agora.io.