Phát lại luồng trực tiếp theo yêu cầu với Amazon IVS (3 phần sê-ri) 1 Tự động ghi các luồng trực tiếp Amazon IVS lên S3 2 Cách lưu trữ tin nhắn trò chuyện trên web bằng Amazon IVS Chat Logging 3 Phát lại luồng trực tiếp Amazon IVS với Phát lại trò chuyện Trong , chúng ta đã xem xét cách tự động ghi các luồng trực tiếp của Amazon Interactive Video Service (Amazon IVS) vào bộ chứa Amazon Simple Storage Service (Amazon S3). Tính năng đó là một công cụ mạnh mẽ cho các nền tảng nội dung do người dùng tạo (UGC) vì đây là bước đầu tiên trong việc cung cấp chế độ xem theo yêu cầu các luồng trực tiếp trước đó trong một ứng dụng. Tuy nhiên, việc phát lại luồng trực tiếp sẽ không đầy đủ nếu không có ngữ cảnh đầy đủ của các cuộc trò chuyện tương tác diễn ra bên cạnh luồng. Trong bài đăng này, chúng tôi sẽ thực hiện bước tiếp theo để cung cấp trải nghiệm theo yêu cầu đầy đủ bằng cách tìm hiểu cách ghi nhật ký tin nhắn trò chuyện Amazon IVS. bài đăng trước Cấu hình ghi nhật ký Tương tự như cách ghi tự động vào Amazon S3 yêu cầu cấu hình ghi, ghi nhật ký trò chuyện cũng yêu cầu cấu hình xác định các chi tiết cần thiết cho phòng trò chuyện. Hãy nhớ rằng bạn cũng có thể cần thêm tùy thuộc vào lựa chọn đích ghi nhật ký của bạn. quyền IAM Sử dụng Bảng điều khiển Amazon IVS để tạo cấu hình ghi nhật ký Để tạo cấu hình ghi nhật ký với Bảng điều khiển Amazon IVS, nhấp vào ở thanh bên trái. Cấu hình ghi nhật ký Trên trang danh sách , nhấp vào . Cấu hình ghi nhật ký Tạo cấu hình ghi nhật ký Ghi nhật ký trò chuyện Amazon IVS cung cấp một số đích để lưu trữ các tin nhắn trò chuyện đã ghi. Chúng ta có thể chọn từ Amazon CloudWatch, Amazon Kinesis Data Firehose hoặc Amazon S3 làm đích lưu trữ cho nhật ký trò chuyện của bạn. Cá nhân tôi thấy CloudWatch là điểm đến thuận tiện nhất vì tôi có thể dễ dàng truy xuất tin nhắn trò chuyện qua CloudWatch SDK, vì vậy, hãy sử dụng điều đó cho bản trình diễn này. Tham khảo nếu bạn muốn sử dụng Amazon Kinesis Data Firehose hoặc Amazon S3 làm đích đến trong ứng dụng của mình. tài liệu : Có thể có một chút chậm trễ giữa thời điểm tin nhắn trò chuyện được đăng và khi tin nhắn đó xuất hiện tại đích ghi nhật ký của bạn. Đối với Amazon S3, độ trễ có thể lên tới 5 phút và đối với Amazon CloudWatch và Amazon Kinesis Data Firehose, độ trễ có thể lên tới 10 giây. Lưu ý Để tạo cấu hình cho bản minh họa này, hãy nhập (#1), chọn CloudWatch làm (#2), chọn (#3) và nhập (#4) . tên cấu hình Ghi nhật ký Đích Tạo nhóm nhật ký CloudWatch mới tên nhóm Nhật ký Nhập bất kỳ tùy chọn nào rồi nhấp vào . Thẻ Tạo cấu hình ghi nhật ký Sử dụng SDK AWS để tạo cấu hình ghi nhật ký Giống như với cấu hình ghi, chúng ta có thể tận dụng AWS SDK để tạo cấu hình ghi nhật ký. Vì chúng ta đang đăng nhập vào CloudWatch trong bài đăng này nên chúng ta sẽ cần sử dụng CloudWatch Logs SDK để . tạo một nhóm nhật ký import { CloudWatchLogsClient, CreateLogGroupCommand } from "@aws-sdk/client-cloudwatch-logs"; const cloudWatchLogsClient = new CloudWatchLogsClient(); const createLogGroupInput = { logGroupName: 'ivs-demo-chat-logging-group', }; const createLogGroupRequest = new CreateLogGroupCommand(createLogGroupInput); const createLogGroupResponse = await cloudWatchLogsClient.send(createLogGroupRequest); console.log(createLogGroupResponse); Bây giờ chúng ta có thể sử dụng ứng dụng trò chuyện Amazon IVS để tạo cấu hình ghi nhật ký ( ). docs import { IvschatClient, CreateLoggingConfigurationCommand } from "@aws-sdk/client-ivschat"; const ivsChatClient = new IvschatClient(); const createLoggingConfigInput = { name: 'ivs-demo-chat-logging-config-sdk', destinationConfiguration: { cloudWatchLogs: { logGroupName: 'ivs-demo-chat-logging-group' } } }; const createLoggingConfigRequest = new CreateLoggingConfigurationCommand(createLoggingConfigInput); const createLoggingConfigResponse = await ivsChatClient.send(createLoggingConfigRequest); console.log(createLoggingConfigResponse); Điều này sẽ tạo ra đầu ra tương tự như sau: { "$metadata": { "httpStatusCode": 200, "requestId": "[redacted]", "cfId": "[redacted]", "attempts": 1, "totalRetryDelay": 0 }, "arn": "arn:aws:ivschat:us-east-1:[redacted]:logging-configuration/[redacted]", "createTime": "2023-01-09T14:48:35.358Z", "destinationConfiguration": { "cloudWatchLogs": { "logGroupName": "ivs-demo-chat-logging-group" } }, "id": "[redacted]", "name": "ivs-demo-chat-logging-config-sdk", "state": "ACTIVE", "tags": {}, "updateTime": "2023-01-09T14:48:35.485Z" } Tạo cấu hình ghi nhật ký với AWS CLI Chúng tôi cũng có thể tùy chọn tạo cấu hình ghi nhật ký qua AWS CLI. Một lần nữa, chúng ta sẽ phải tạo nhóm nhật ký CloudWatch, sau đó chuyển tên của nhóm nhật ký mới vào cấu hình nhật ký trò chuyện. $ aws logs \ create-log-group \ --log-group-name ivs-demo-logging-config-log-group $ aws ivschat \ create-logging-configuration \ --name ivs-demo-logging-config \ --destination-configuration cloudWatchLogs={logGroupName=ivs-demo-logging-config-log-group} Liên kết cấu hình ghi nhật ký với Phòng trò chuyện Amazon IVS hiện có thông qua Bảng điều khiển Amazon IVS Giờ đây, chúng tôi có thể liên kết cấu hình ghi nhật ký với phòng trò chuyện Amazon IVS hiện có. Chọn bên dưới ở thanh bên trái, chọn phòng mà bạn muốn liên kết với cấu hình, sau đó nhấp vào . Phòng Trò chuyện Chỉnh sửa Trên trang chỉnh sửa phòng, cuộn xuống và chọn (#1). Trong danh sách thả xuống (#2), tìm kiếm và liên kết cấu hình mà chúng tôi đã tạo ở trên. Lưu ý rằng bạn có thể liên kết nhiều cấu hình với một phòng, vì vậy nếu bạn cũng muốn đăng nhập vào Amazon Kinesis Data Firehose hoặc Amazon S3, bạn có thể tạo các cấu hình riêng biệt và liên kết chúng với phòng của mình. Cũng lưu ý rằng bạn có thể tạo một cấu hình hoàn toàn mới trực tiếp từ trang phòng chỉnh sửa bằng cách nhấp vào nút (#3). Tự động ghi nhật ký tin nhắn và sự kiện Cấu hình ghi nhật ký Tạo cấu hình ghi nhật ký Liên kết cấu hình ghi nhật ký với Phòng trò chuyện Amazon IVS hiện có thông qua AWS SDK Trong sản xuất, bạn có thể sẽ sử dụng SDK để liên kết cấu hình ghi nhật ký của mình với một phòng trò chuyện mới hoặc hiện có. Để làm điều đó, hãy sử dụng ( ) hoặc ( ). Dưới đây là ví dụ về việc cập nhật phòng trò chuyện hiện có với cấu hình ghi nhật ký trò chuyện. Theo dự kiến, chúng ta sẽ cần chuyển ARN làm của phòng trò chuyện và bất kỳ/tất cả ARN cấu hình ghi nhật ký trò chuyện trong một mảng tới . CreateRoomCommand docs UpdateRoomCommand docs identifier loggingConfigurationIdentifiers import { IvschatClient, UpdateRoomCommand } from "@aws-sdk/client-ivschat"; const ivsChatClient = new IvschatClient(); const updateChatRoomInput = { identifier: 'arn:aws:ivschat:us-east-1:[redacted]:room/[redacted]', loggingConfigurationIdentifiers: [ 'arn:aws:ivschat:us-east-1:v:logging-configuration/[redacted]', ] }; const updateChatRoomRequest = new UpdateRoomCommand(updateChatRoomInput); const updateChatRoomResponse = await ivsChatClient.send(updateChatRoomRequest); console.log(updateChatRoomResponse); Bạn có thể chỉ định nhiều cấu hình ghi nhật ký cho phòng trò chuyện. Điều này cho phép bạn sử dụng nhiều điểm đến, nếu muốn. Mảng số nhận dạng ghi nhật ký trò chuyện mà bạn chuyển qua SDK tới sẽ ghi đè lên bất kỳ số nhận dạng hiện có nào, vì vậy nếu bạn đang thêm một cấu hình bổ sung, hãy đảm bảo bao gồm mọi ARN cấu hình hiện có để tránh xóa chúng. Lưu ý: UpdateRoomCommand Truy xuất nhật ký trò chuyện Tại thời điểm này, tất cả tin nhắn mới được đăng lên phòng trò chuyện Amazon IVS sẽ được ghi vào (các) đích được chỉ định bởi (các) cấu hình ghi nhật ký đính kèm. Như đã đề cập ở trên, trong trường hợp CloudWatch là đích ghi nhật ký, chúng ta có thể sử dụng CloudWatch SDK để truy xuất nhật ký trò chuyện của mình trong một khoảng thời gian nhất định. Để làm điều này, chúng ta cần , dấu thời gian bắt đầu và kết thúc (ở định dạng dấu thời gian Unix) và . sẽ có định dạng: . Vì vậy, đối với phòng trò chuyện có ARN là , sẽ là . logGroupName logStreamNames LogStreamName aws/IVSChatLogs/1.0/room_[suffix of chat room ARN] arn:aws:ivschat:us-east-1:[redacted]:room/0wgOPVl4ZRdu logStreamName aws/IVSChatLogs/1.0/room_0wgOPVl4ZRdu Truy xuất tin nhắn trò chuyện đã ghi trên CloudWatch Dưới đây là cách sử dụng để tạo ( ) được sử dụng để truy xuất nhật ký trò chuyện. CloudWatchLogsClient FilterLogEventsCommand docs import { CloudWatchLogsClient, FilterLogEventsCommand } from "@aws-sdk/client-cloudwatch-logs"; const cloudwatchClient = new CloudWatchLogsClient(); const filterLogEventsInput = { logGroupName: 'demo-chat-log-cw-group', logStreamNames: ['aws/IVSChatLogs/1.0/room_0wgOPVl4ZRdu'], startTime: 1672929210000, endTime: 1672929330000, }; const filterLogEventsRequest = new FilterLogEventsCommand(filterLogEventsInput); const filterLogEventsResponse = await cloudwatchClient.send(filterLogEventsRequest); const events = filterLogEventsResponse.events.map(e => JSON.parse(e.message)); Hãy nhớ rằng khi truyền phát tới một kênh. Bạn có thể sử dụng thời gian bắt đầu và kết thúc luồng nếu đang cố truy xuất nhật ký trò chuyện cho một luồng trực tiếp Amazon IVS cụ thể. Làm cách nào để biết thời gian bắt đầu và kết thúc để sử dụng? Amazon IVS gửi các sự kiện tới EventBridge Xin lưu ý rằng không thể trả về vô số sự kiện. Bạn có thể phải kiểm tra để biết sự tồn tại của và xử lý phân trang nếu khoảng thời gian của bạn có nhiều sự kiện hơn mức có thể phù hợp với một phản hồi từ SDK. Tham khảo SDK để biết thêm thông tin. FilterLogEventsCommand FilterLogEventsCommandOutput nextToken tài liệu Theo mặc định, thao tác này trả về nhiều sự kiện nhật ký nhất có thể trong 1 MB (tối đa 10.000 sự kiện nhật ký) hoặc tất cả các sự kiện được tìm thấy trong phạm vi thời gian đã chỉ định. Nếu kết quả bao gồm mã thông báo, điều đó có nghĩa là có sẵn nhiều sự kiện nhật ký hơn. Bạn có thể nhận được kết quả bổ sung bằng cách chỉ định mã thông báo trong cuộc gọi tiếp theo. Thao tác này có thể trả về kết quả trống trong khi có nhiều sự kiện nhật ký hơn thông qua mã thông báo. Tại thời điểm này, chúng tôi có thể làm bất cứ điều gì chúng tôi cần với nhật ký trò chuyện. Hãy nhớ rằng, ghi nhật ký trò chuyện sẽ ghi nhật ký được đăng lên phòng trò chuyện Amazon IVS, bao gồm các sự kiện tùy chỉnh và sự kiện liên quan đến kiểm duyệt trò chuyện. Nếu chúng tôi muốn phát lại luồng trò chuyện, có lẽ chúng tôi sẽ cần phân tích cú pháp các sự kiện một chút để xóa các tin nhắn đã kiểm duyệt và tạo luồng tin nhắn "có thể phát lại". tất cả các sự kiện : Nếu bạn chưa đọc chúng, hãy xem các bài đăng trên blog của tôi về kiểm duyệt trò chuyện và với trò chuyện Amazon IVS. Thông tin thêm về Kiểm duyệt trò chuyện thủ công tự động Một chức năng để phân tích các sự kiện đã ghi có thể trông giống như thế này. Số dặm của bạn có thể thay đổi! const parseEvents = (events) => { let parsedEvents = []; events.forEach(e => { switch (e.type) { case 'MESSAGE': parsedEvents.push(e); break; case 'EVENT': if (e.payload.EventName === 'aws:DELETE_MESSAGE') { const existingEventIdx = parsedEvents.findIndex(parsedEvent => { return parsedEvent.payload.Id === e.payload.Attributes.MessageID }); if (existingEventIdx > -1) { parsedEvents.splice(existingEventIdx, 1); } } break; } }); return parsedEvents; }; Hàm này sẽ trả về một mảng phù hợp cho mục đích phát lại cuộc trò chuyện với các tin nhắn được kiểm duyệt đã xóa khỏi nhật ký trò chuyện. Đây là một ví dụ nhỏ về cách luồng sự kiện có thể trông như thế nào. [ { "event_timestamp": "2023-01-05T14:33:32.894Z", "type": "MESSAGE", "payload": { "Type": "MESSAGE", "Id": "WhO6MW6iRdS5", "RequestId": "", "Attributes": { "username": "gleningp" }, "Content": "bbiab!", "SendTime": "2023-01-05T14:33:32.894089757Z", "Sender": { "UserId": "75758272-f3f2-4f65-83c5-9b8f144116b8", "Attributes": {} } }, "version": "1.0" }, { "event_timestamp": "2023-01-05T14:33:39.896Z", "type": "MESSAGE", "payload": { "Type": "MESSAGE", "Id": "VwEPwPV74GN3", "RequestId": "", "Attributes": { "username": "rpeirazzia" }, "Content": "perfect", "SendTime": "2023-01-05T14:33:39.896519733Z", "Sender": { "UserId": "704D6BF8-22D2-4A52-B6A7-BDEFB115ECE5", "Attributes": {} } }, "version": "1.0" }, { "event_timestamp": "2023-01-05T14:33:47.330Z", "type": "MESSAGE", "payload": { "Type": "MESSAGE", "Id": "00kqu1sPa6dF", "RequestId": "", "Attributes": { "username": "jmycroft2" }, "Content": "🔥🔥🔥", "SendTime": "2023-01-05T14:33:47.330983449Z", "Sender": { "UserId": "2F12AA2D-DF65-42CF-AE99-133A5A06F7B4", "Attributes": {} } }, "version": "1.0" } ] Bản tóm tắt Trong bài đăng này, chúng ta đã tìm hiểu cách ghi nhật ký các tin nhắn đã đăng lên phòng trò chuyện Amazon IVS. Trong bài đăng tiếp theo, chúng ta sẽ xem xét việc kết hợp các luồng trực tiếp được ghi lại tự động và các tin nhắn trò chuyện được ghi lại trong một ứng dụng để tạo trải nghiệm người dùng phát lại "theo yêu cầu" phù hợp.