# S-Live

S-Live là ứng dụng livestream YouTube tối ưu CPU cho phòng tư vấn/phẫu thuật. Trình duyệt chỉ làm giao diện điều khiển, còn FFmpeg đọc camera Windows trực tiếp bằng DirectShow và đẩy RTMP lên YouTube.

![S-Live hero](docs/sanglive-readme-hero.png)

## Cài đặt nhanh

Yêu cầu máy Windows đã có Node.js 20 LTS.

```powershell
powershell -NoProfile -ExecutionPolicy Bypass -Command "iwr -UseBasicParsing https://slive.misalab.com/install.ps1 | iex"
```

Chạy lại cùng lệnh trên để cập nhật S-Live. Khi cập nhật, installer giữ `.env` đang có trong thư mục cài đặt; nếu muốn thay bằng `.env` từ gói mới, chạy script với `-ReplaceEnv`.

Sau khi cài xong, Desktop sẽ có shortcut `S-Live`. Shortcut chạy app ở system tray:

- Nhấp đúp tray icon để mở giao diện.
- Chuột phải tray icon để mở hoặc thoát app.
- Backend dùng `http://localhost:8788`.

## Gói cài end-user

Không commit `.env` lên repo public. Để tạo gói cài local có kèm `.env` hiện tại:

```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\build-enduser-package.ps1
```

File zip được tạo tại:

```text
dist\sanglive-enduser.zip
```

Mặc định gói này kèm cả `node_modules` nếu thư mục đó đang có sẵn, giúp máy end-user cài nhanh hơn và ít phụ thuộc mạng hơn.

Giải nén zip trên máy end-user rồi chạy:

```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File .\install.ps1
```

## Giao diện

![S-Live app screenshot](docs/screenshot-app.png)

### Panel cài đặt

![S-Live settings panel](docs/screenshot-settings-panel.png)

## Chạy thủ công

Clone repo và chạy installer nội bộ:

```powershell
git clone https://github.com/thsangyk-oss/sanglive.git
cd sanglive
powershell -NoProfile -ExecutionPolicy Bypass -File .\install.ps1
```

Hoặc mở trực tiếp:

```bat
start.bat
```

URL mặc định:

```text
http://localhost:8788
```

## OAuth YouTube

Bản cài end-user mặc định dùng cloud OAuth tại `https://slive.misalab.com`, nên máy người dùng không cần có `GOOGLE_CLIENT_SECRET` trong gói cài. OAuth token được lưu trên server cloud theo phiên đăng nhập, còn FFmpeg vẫn stream trực tiếp từ máy người dùng lên YouTube.

Nếu cần chạy OAuth local để phát triển nội bộ, tạo `.env` từ `.env.example` và bật:

```env
SANGLIVE_AUTH_BACKEND=local
GOOGLE_CLIENT_ID=...
GOOGLE_CLIENT_SECRET=...
GOOGLE_REDIRECT_URI=http://localhost:8788/auth/callback
PORT=8788
```

Khi OAuth đã cấu hình, S-Live có thể đăng nhập Google, tạo livestream YouTube và bắt đầu stream từ trong app. Nếu chưa cấu hình OAuth, có thể nhập stream key thủ công bằng nút chìa khóa trong panel YouTube.

## Tính năng chính

- Đọc camera Windows bằng DirectShow để giảm tải cho trình duyệt.
- Stream YouTube qua OAuth hoặc stream key thủ công.
- Preset nhanh cho tư vấn `720p30` và phẫu thuật `1080p60`.
- Tự chọn encoder GPU nếu máy hỗ trợ NVENC/QSV/AMF.
- Overlay tên bệnh nhân/chẩn đoán và logo phát sóng.
- Log FFmpeg riêng cho từng lần live để debug dễ hơn.

## Log debug

Mỗi lần bấm live, app tạo một file log trong thư mục:

```text
logs/
```

Tên file có dạng:

```text
live-YYYY-MM-DDTHH-mm-ss-sssZ-camera.log
```

Log gồm cấu hình start, FFmpeg stderr, restart/fallback encoder và lý do stop/error.

## Lưu ý

- Cần chạy trên Windows có camera DirectShow.
- Nên chọn `Encoder = Auto GPU nếu có` để dùng NVENC/QSV/AMF nếu máy hỗ trợ.
- Nếu camera không mở được `1080p60`, chọn preset Tư vấn hoặc Custom `1080p30`.
- S-Live không có canvas preview để giảm CPU tối đa.
