Chuyển đến nội dung chính
Hướng dẫn AI

Xây dựng phòng livestream AI thời gian thực từ con số 0: Thực hành với nhân vật số, điều phối bình luận và phát luồng OBS

Bài viết này sẽ hướng dẫn bạn cài đặt phòng livestream AI thời gian thực, cấu hình Vidu, nhân vật, tủ đồ và giọng nói, tích hợp bộ lọc và điều phối bình luận, đồng thời xuất hình ảnh livestream qua OBS hoặc phương thức tích hợp sẵn.

Xây dựng phòng livestream AI thời gian thực với nhân vật số, bình luận và OBS

Giới thiệu dự án

Phòng livestream AI thời gian thực là một dự án mã nguồn mở cho phép nhân vật số AI tự livestream. Khi khán giả gửi bình luận, hệ thống sẽ lọc nội dung trước, sau đó xếp hàng xử lý dựa trên trạng thái giọng nói và hành động hiện tại, tránh chèn lệnh tiếp theo khi câu trước chưa nói xong.

Dự án sử dụng nhân vật số thời gian thực Vidu S2 để tạo hình ảnh, âm thanh và câu trả lời. Dự án này phụ trách lọc và điều phối bình luận, hồ sơ nhân vật, tủ đồ, lớp phủ phòng livestream, bàn làm việc cục bộ, cũng như xuất hình sang OBS hoặc phát trực tiếp.

Mã nguồn được cấp phép MIT. Kho mã không bao gồm hình ảnh nhân vật, tính cách, giọng nói và thư viện tư liệu của tác giả, vì vậy sau khi triển khai, bạn cần chuẩn bị tài sản nhân vật của riêng mình và tự chịu trách nhiệm về bản quyền cũng như việc tuân thủ nội dung.

Tính năng và hạn chế

Tính năng hiện được hỗ trợ

  • Trả lời trò chuyện theo tính cách tùy chỉnh và cấu hình lời mở đầu.
  • Chuyển đổi cả bộ trang phục từ tủ đồ được chuẩn bị trước; mỗi lần thay đồ mất khoảng 6 giây.
  • Kích hoạt các động tác nhỏ như tạo hình trái tim, vẫy tay và nháy mắt bằng từ khóa.
  • Khi không có khán giả phát biểu, tự động làm nóng không khí từ kho chủ đề của nhân vật, tránh lặp lại trước khi một chủ đề kết thúc.
  • Tự động lọc bình luận tục tĩu và câu kéo người xem; quà tặng không được chen hàng.
  • Có thể bật tùy chọn tự động phát trực tiếp lại sau khi Vidu ngắt giữa chừng.

Các hạn chế cần lưu ý

  • Mặc định không bật thay đổi phông nền, ăn uống và cầm đạo cụ, vì việc vẽ lại theo thời gian thực có thể khiến trang phục nhân vật bị biến dạng.
  • Hiện dự án không phù hợp để hát, phát nhạc, đứng, thực hiện động tác toàn thân, nhảy mạnh hoặc bán hàng qua livestream.
  • Không ghi nhớ khán giả cũ giữa các phiên livestream.
  • Bình luận Douyin không có chức năng thu thập tích hợp. Hãy sử dụng API mở chính thức của nền tảng, không thu thập từ trang web phòng livestream.

Tính năng thay đổi phông nền và đạo cụ mặc định bị tắt. Nếu chỉ thử nghiệm riêng tư, bạn có thể đặt {"safety":{"live_visual_edits":true}} trong config.json. Không khuyến nghị bật tính năng này khi livestream công khai.

Chuẩn bị môi trường chạy

Trước khi bắt đầu, hãy chuẩn bị môi trường và tài khoản sau:

  • macOS hoặc Linux.
  • Python 3.11 trở lên; tác giả sử dụng Python 3.13.
  • ffmpeg có libx264 và aac.
  • API Key của nền tảng mở Vidu, khóa bắt đầu bằng vda_; hãy đảm bảo tài khoản còn điểm khả dụng.
  • API Key Evolink tùy chọn tại Evolink, dùng để tạo hình ảnh nhân vật, quần áo, đạo cụ và phông nền, hoặc tải âm thanh lên khi nhân bản giọng nói.
  • OBS 30 trở lên tùy chọn, dùng cho camera, lớp phủ và phát trực tiếp.
  • Mã phát trực tiếp YouTube tùy chọn; chỉ cần khi sử dụng chức năng phát trực tiếp tích hợp.

Nhân vật số thời gian thực Vidu tính phí theo thời lượng. Giá chính thức được nêu trong README là 1,5 điểm mỗi giây, 1 điểm tương đương 0,03125 nhân dân tệ, khoảng 169 nhân dân tệ mỗi giờ. Bạn nên dùng chế độ chạy thử và dịch vụ mô phỏng cục bộ để xác minh quy trình trước.

Lưu trữ khóa an toàn

Khóa chỉ nên được lưu trong tệp trên máy cục bộ và do máy chủ đọc; chúng sẽ không được gửi đến trình duyệt. Trước tiên, hãy tạo các thư mục mặc định:

mkdir -p ~/.deepsea/vidu ~/.deepsea/evolink && chmod 700 ~/.deepsea/vidu ~/.deepsea/evolink

Trên macOS, bạn có thể lưu Vidu Key trong bộ nhớ tạm vào đường dẫn mặc định:

pbpaste > ~/.deepsea/vidu/api.key && chmod 600 ~/.deepsea/vidu/api.key

Đặt Evolink Key tại ~/.deepsea/evolink/api.key. Nếu sử dụng tính năng phát trực tiếp tích hợp của YouTube, đặt mã phát trực tiếp tại ~/.deepsea/youtube/stream.key; đặt mật khẩu OBS WebSocket tại ~/.deepsea/obs/ws.password. Có thể thay đổi các đường dẫn mặc định trong config.json.

Cài đặt dự án

Sao chép kho từ GitHub và đi vào thư mục dự án:

git clone https://github.com/garycaogan/ai-live-avatar.git
cd ai-live-avatar

Tạo môi trường ảo Python và cài đặt các phần phụ thuộc:

python3 -m venv .venv
.venv/bin/pip install -r requirements.txt

Trang sân khấu phụ thuộc vào SDK web RTC của Alibaba Cloud. Dự án không phân phối lại SDK này mà sử dụng tập lệnh để tải xuống và kiểm tra từ CDN chính thức:

./tools/fetch_vendor.sh

Cuối cùng, sao chép tệp cấu hình mẫu:

cp config.example.json config.json

Khởi động bàn làm việc

Chạy dịch vụ:

.venv/bin/python server.py

Dịch vụ mặc định chỉ lắng nghe trên máy cục bộ. Sau khi khởi động, mở http://127.0.0.1:28900/workbench trong trình duyệt để vào bàn làm việc.

Nếu tạm thời không muốn tiêu tốn điểm Vidu, bạn có thể sử dụng phát trực tiếp chạy thử trên trang phòng livestream. Chế độ này không gọi Vidu mà chỉ trình diễn việc lọc, xếp hàng bình luận và lớp phủ. Dự án cũng cung cấp tests/dev_mock_stack.py, kết nối với Vidu mô phỏng cục bộ để giúp bạn kiểm thử toàn bộ quy trình điều khiển.

Tạo nhân vật số của riêng bạn

1. Chuẩn bị hình ảnh nhân vật

Tải một hình ảnh nhân vật lên trang tư liệu hoặc sử dụng Evolink để tạo. Hình ảnh nền sẽ ảnh hưởng đến khuôn mặt, trang phục, căn phòng và biểu cảm thường trực của nhân vật. README khuyến nghị sử dụng ảnh cận cảnh một người, hai tay đặt trên bàn và biểu cảm tự nhiên.

Bố cục ngang sẽ được đặt vào một khung nhỏ ở phía trên, tương tự trang livestream dọc của Douyin, và được cắt theo tỷ lệ 1.2:1. Vì vậy, nên điều chỉnh bố cục hình ảnh nền từ trước.

2. Tạo hồ sơ nhân vật

Tạo nhân vật mới trên trang nhân vật, chọn hình ảnh nhân vật làm ảnh nền, sau đó điền tên, tính cách và lời mở đầu. Tính cách nên tập trung mô tả phong cách nói chuyện; không nên viết các câu ví dụ hoàn chỉnh, nếu không mô hình có thể đọc nguyên văn ví dụ.

3. Thêm tủ đồ

Thêm vài bộ trang phục trên trang tủ đồ. Mỗi bộ nên là một ảnh hoàn chỉnh; căn phòng, ánh sáng và bố cục nên tương đồng với hình ảnh nền, nếu không hình ảnh có thể chuyển đổi đột ngột rõ rệt khi thay đồ.

4. Cấu hình giọng nói

Chọn giọng hệ thống trên trang giọng nói hoặc tải lên 10 đến 20 giây giọng người sạch để nhân bản. Tính năng nhân bản giọng nói của Vidu có tính phí. Trước khi tải tư liệu lên, hãy xác nhận bạn có quyền sử dụng giọng nói đó.

5. Cấu hình hành động

Trên trang hành động, bạn có thể chỉnh sửa các hành động tương ứng với từ khóa bình luận. Trong phần cài đặt nhân vật, bạn cũng có thể chỉnh sửa các chuyển động chờ nhỏ để hình ảnh tự nhiên hơn khi không có bình luận mới.

Hồ sơ nhân vật được lưu trong assets/avatars/profiles.json, còn tính cách được lưu trong personas/. Các tệp này đã được loại khỏi kho bằng .gitignore và sẽ không được commit.

Tìm hiểu quy trình xử lý bình luận

Trang phòng livestream của bàn làm việc hỗ trợ gửi bình luận mô phỏng thủ công. Bình luận thật có thể được gửi qua API sau:

curl -s -X POST http://127.0.0.1:28900/api/danmaku \
  -H 'Content-Type: application/json' \
  -d '{"user":"观众A","text":"换件衣服","gift":0}'

Sau khi vào hệ thống, bình luận sẽ được kiểm tra các từ bị lọc trong moderation.json, sau đó live/router.py sẽ nhận diện theo quy tắc thành trò chuyện, thay đồ, đạo cụ, phông nền, hành động hoặc khôi phục. Quá trình nhận diện này không gọi mô hình lớn nên không làm tăng thêm độ trễ hay chi phí.

Mặc định, yêu cầu về đạo cụ và phông nền sẽ được xử lý như trò chuyện thông thường. Nhận diện bình luận phù hợp hơn với cách diễn đạt đơn giản, rõ ràng, chẳng hạn hỏi những việc nhỏ xung quanh streamer, dùng tên trang phục trong tủ đồ để thay đồ hoặc chỉ yêu cầu một hành động mỗi lần.

Các nội dung sau thường ảnh hưởng đến hiệu quả: một câu chứa nhiều nhiệm vụ, hỏi tin tức hoặc thời tiết theo thời gian thực, yêu cầu hát hoặc phát nhạc. Bạn nên chia yêu cầu phức tạp thành nhiều bình luận đơn giản.

Kết nối OBS

Trên trang phát trực tiếp của bàn làm việc, chuyển phương thức đầu ra sang OBS, sau đó thêm nguồn trình duyệt trong OBS. Chọn địa chỉ phù hợp:

  • Chỉ hiển thị nhân vật số: http://127.0.0.1:28900/stage?obs=1&role=obs&layer=avatar
  • Chỉ hiển thị lớp phủ trong suốt: http://127.0.0.1:28900/stage?overlay=1
  • Hiển thị nhân vật số và lớp phủ: http://127.0.0.1:28900/stage?obs=1&role=obs&layer=all

Đối với hình ảnh đầy đủ, nên đặt chiều rộng 1080 và chiều cao 1920. Nguồn trình duyệt cần bật tùy chọn “Điều khiển âm thanh qua OBS”. Vì dịch vụ chỉ lắng nghe trên máy cục bộ, OBS và dịch vụ dự án phải chạy trên cùng một máy tính.

Nếu muốn tự động tạo cảnh OBS, bạn có thể sử dụng tools/obs_control.py. Lớp phủ sẽ luôn hiển thị nhãn “Hình ảnh do AI tạo theo thời gian thực”; đây là yêu cầu của nền tảng đối với livestream nhân vật số AI và cần được giữ lại.

Cấu hình hình ảnh livestream Douyin

Phòng livestream nhân vật số phổ biến trên Douyin sử dụng hình ảnh ngang. Trên điện thoại, hình ảnh nằm ở khu vực phía trên và bình luận hiển thị bên dưới. Bạn có thể chạy lệnh sau để tạo cảnh “Phòng livestream Douyin”:

.venv/bin/python tools/obs_control.py setup douyin --camera FaceTime

Lệnh này sẽ đặt canvas OBS thành 1296×1080, tức tỷ lệ 1.2:1, đồng thời cấu hình nhân vật số, thẻ thông tin, phụ đề và camera người thật. Sau --camera, hãy điền một phần tên camera; nếu bỏ qua, hệ thống sẽ sử dụng camera thật đầu tiên được tìm thấy.

Khi chạy lần đầu, macOS có thể yêu cầu cấp quyền cho OBS sử dụng camera. Sau khi cho phép, hãy chạy lại một lần để áp dụng chính xác việc cắt camera. Có thể chuyển đổi cảnh ngang và dọc bất cứ lúc nào; cả hai dùng chung một lớp nhân vật số và không chiếm thêm số lượng người tham gia.

Có hai cách kết nối với Douyin Live Companion: bật camera ảo OBS rồi chọn OBS Virtual Camera trong Live Companion; hoặc thêm nguồn cửa sổ trong Live Companion để bắt cửa sổ trình chiếu OBS. Camera ảo chỉ truyền hình ảnh, không truyền âm thanh, vì vậy bạn cũng cần xác nhận Live Companion có thể thu âm thanh máy tính trong cảnh “Phòng livestream Douyin”.

Nếu tài khoản có quyền phát trực tiếp qua bên thứ ba, bạn cũng có thể điền trực tiếp địa chỉ phát do nền tảng cung cấp vào OBS. Bình luận Douyin sẽ không tự động đi vào dự án; bạn cần xin quyền thông qua API tính năng livestream của nền tảng mở Douyin, sau đó đẩy dữ liệu đến /api/danmaku.

Chỉnh sửa thẻ thông tin phòng livestream

Các thẻ thông tin ở góc trên bên trái và bên phải của trang sân khấu dùng để hiển thị những gì livestream có thể và tạm thời không thể thực hiện, cũng như cách gửi bình luận hiệu quả hơn. Nội dung lấy từ assets/stage_panel.json; nếu tệp này không tồn tại, hệ thống sẽ sử dụng assets/stage_panel.example.json.

Sau khi sao chép tệp mẫu, bạn có thể chỉnh sửa thành nội dung của riêng mình. Trang sân khấu sẽ tự động làm mới trong vòng một phút; lớp phủ của tính năng phát trực tiếp tích hợp sẽ sử dụng nội dung mới ngay lập tức. outfit_hint có thể được dùng để đặt gợi ý thay đồ cho từng nhân vật.

Bật tự động phát trực tiếp lại

Vidu đôi khi có thể ngắt kết nối trong lúc livestream. Sau khi bật khôi phục tự động, dự án sẽ chờ 3 giây rồi phát trực tiếp lại, tối đa 6 lần mỗi giờ. Tuy nhiên, việc ngắt do không đủ điểm hoặc kiểm duyệt nội dung sẽ không được tự động thử lại.

Bật qua API:

curl -s -X POST http://127.0.0.1:28900/api/settings \
  -H 'Content-Type: application/json' \
  -d '{"auto_recover":true}'

Bạn cũng có thể đặt trong config.json:

{"schedule":{"auto_recover":true}}

Trước khi livestream trong thời gian dài, nên kiểm tra số dư tài khoản, tư liệu nhân vật và trạng thái mạng, đồng thời dùng chế độ chạy thử hoặc dịch vụ mô phỏng cục bộ để xác minh quy trình khôi phục.

Kiểm thử và cấu trúc dự án

Dự án sử dụng Vidu mô phỏng cục bộ để kiểm thử và không phát sinh chi phí. Bạn có thể chạy:

python -m unittest tests.test_logic tests.test_workbench tests.test_e2e

Công dụng của các thư mục và tệp chính như sau:

  • server.py: Điểm vào dịch vụ và cấu hình mặc định.
  • live/: Điều phối livestream, API thời gian thực Vidu, nhận diện bình luận, tủ đồ, tạo tài nguyên, phát luồng tích hợp và API bàn làm việc.
  • static/: Bàn làm việc, trang sân khấu và bảng điều khiển phiên bản cũ.
  • WORKBENCH_API.md: Toàn bộ API được sử dụng cho bàn làm việc.
  • tests/: Mã kiểm thử và dịch vụ mô phỏng cục bộ.

Lời kết

Dự án này kết nối nhân vật số thời gian thực Vidu, quy tắc bình luận, tài sản nhân vật và đầu ra livestream thành một quy trình làm việc cục bộ. Bạn nên bắt đầu với chế độ chạy thử để làm quen với việc lọc, xếp hàng, tủ đồ và lớp chồng, sau đó cấu hình hình ảnh, giọng nói và cảnh OBS của riêng mình, rồi mới kết nối với nền tảng thực tế.

Khi livestream công khai, nên tắt tính năng chỉnh sửa phông nền và đạo cụ theo thời gian thực nếu chúng có thể làm biến dạng hình ảnh, sử dụng API tương tác chính thức của nền tảng và giữ lại nhãn nội dung do AI tạo. Đồng thời, cần xác nhận trước quyền sử dụng giọng nói của người thật, hình ảnh nhân vật, âm nhạc và các tài nguyên khác.