Chúng tôi đã xem xét nhiều cách khác nhau để tạo trải nghiệm phát trực tiếp với Amazon Interactive Video Service (Amazon IVS) tại đây trên blog này, nhưng tất cả các ví dụ đó cho đến nay đều tập trung vào các kênh công khai mà bất kỳ ai cũng có thể xem mà không cần bất kỳ quyền phát lại nào. xác minh rằng người xem được phép xem luồng trực tiếp. Nhiều nền tảng nội dung do người dùng tạo (UGC) phát trực tiếp không yêu cầu bất kỳ ủy quyền nào để xem luồng, nhưng có những trường hợp sử dụng mà chúng tôi muốn giới hạn người xem luồng của mình ở một nhóm nhỏ khán giả. Ví dụ: có thể những người tạo nội dung của chúng tôi muốn tính phí đăng ký cho nội dung mà họ sản xuất. Hoặc, có thể có những giới hạn cấp phép đối với nội dung luồng cấm phân phối tới các vị trí địa lý hoặc nhân khẩu học nhất định. Để giải quyết các trường hợp sử dụng mà nền tảng phải thực thi ủy quyền phát lại, Amazon IVS hỗ trợ các kênh riêng tư. Các kênh này sẽ hạn chế phát lại đối với những người xem đã nhận được mã thông báo được ký bằng khóa riêng và được xác minh bằng khóa chung. Trong bài đăng này, chúng ta sẽ xem cách bật ủy quyền phát lại, tạo cặp khóa phát lại, tạo mã thông báo và phát luồng riêng tư.
Bước đầu tiên trong quy trình làm việc này là tạo một kênh riêng. Tạo kênh riêng rất giống với tạo kênh công cộng - điểm khác biệt duy nhất là một cài đặt duy nhất khi tạo kênh để bật ủy quyền phát lại. Chúng tôi có thể kích hoạt ủy quyền phát lại qua Bảng điều khiển Amazon IVS , qua AWS CLI hoặc qua bất kỳ AWS SDK nào.
Hãy bắt đầu bằng cách xem cách tạo kênh riêng thông qua Bảng điều khiển Amazon IVS. Tại danh sách các kênh trong bảng điều khiển, nhấp vào Tạo kênh .
Trên trang Tạo kênh , nhập tên kênh (#1), chọn Cấu hình tùy chỉnh (#2) và bật Bật yêu cầu ủy quyền mã thông báo để phát lại video (#3).
Nếu bạn muốn sử dụng CLI để tạo kênh, bạn có thể thêm tùy chọn --authorized
.
$ aws ivs create-channel --name demo-private-channel --latency-mode LOW --type STANDARD --authorized
Trên thực tế, có thể bạn sẽ sử dụng AWS SDK để tạo kênh cho người dùng của mình. Trong trường hợp này, bạn có thể tham khảo tài liệu AWS SDK cho ngôn ngữ yêu thích của mình để xác định đối số thích hợp cần đặt để phát lại authorized
. Ví dụ: đây là tài liệu về CreateChannelCommandInput
cho AWS SDK dành cho JavaScript v3 nêu rõ rằng chúng ta có thể đặt thuộc tính authorized
boolean khi tạo kênh.
Bây giờ chúng tôi đã bật ủy quyền phát lại, nếu chúng tôi phát tới kênh và cố gắng xem phát lại trực tiếp mà không tạo và chuyển mã thông báo phát lại, chúng tôi sẽ nhận được lỗi phát lại. Dưới đây là ví dụ về phát lại bằng SDK trình phát Amazon IVS nơi chúng tôi đã thêm trình xử lý ERROR
để nắm bắt lỗi phát lại.
const streamUrl = '[private channel Playback Url]'; const ivsPlayer = IVSPlayer.create(); ivsPlayer.attachHTMLVideoElement(document.getElementById('video-player')); ivsPlayer.load(streamUrl); ivsPlayer.play(); ivsPlayer.addEventListener(IVSPlayer.PlayerEventType.ERROR, (err) => { console.log(err); });
Chạy cái này trong trình duyệt khi được chỉ vào một kênh riêng tư sẽ dẫn đến lỗi sau được ghi vào bảng điều khiển.
{ "type": "ErrorAuthorization", "code": 7, "source": "MasterPlaylist", "message": "invalid_playback_auth_token" }
Điều này xác nhận rằng kênh của chúng tôi thực sự là riêng tư và yêu cầu token
được tạo và chuyển cùng với Url phát lại để cho phép phát lại.
Trước khi có thể tạo mã thông báo phát lại, chúng tôi cần tạo một cặp khóa riêng tư/công khai và tải nó lên bảng điều khiển Amazon IVS. Cặp khóa này sẽ được sử dụng để tạo mã thông báo JWT
được ký bằng khóa riêng và được xác minh bằng khóa chung để cho phép phát lại.
Để quản lý các phím Phát lại với Bảng điều khiển Amazon IVS, hãy chọn Phím phát lại trong thanh bên điều hướng bên trái.
Chúng tôi có thể tạo khóa bằng bảng điều khiển hoặc thủ công với OpenSSL ngoại tuyến trên máy cục bộ của mình. Để tạo một cặp khóa trực tiếp trong bảng điều khiển. Đối với điều này, hãy nhấp vào Tạo khóa phát lại .
Đặt tên cho khóa và nhấp vào Tạo .
Khóa chung của cặp này được lưu vào tài khoản AWS của bạn và sẽ được sử dụng để xác minh mọi yêu cầu phát lại có chứa mã thông báo được ký bằng khóa riêng. Khi sử dụng Bảng điều khiển Amazon IVS để tạo cặp khóa, khóa riêng tư sẽ ngay lập tức được tải xuống máy của bạn và không được lưu trong bảng điều khiển hoặc có sẵn để tải xuống thêm .
Nếu muốn tạo cặp khóa của riêng mình, bạn có thể thực hiện việc đó ngoại tuyến rồi nhập khóa chung vào bảng điều khiển Amazon IVS. Đây là một ví dụ về việc tạo một cặp khóa với OpenSSL.
$ openssl ecparam -name secp384r1 -genkey -noout -out demo-private-channel-private-key-1.pem $ openssl ec -in demo-private-channel-private-key-1.pem -pubout -out demo-private-channel-public-key-1.pem
Để nhập khóa chung, nhấp vào Nhập trên trang Danh sách khóa phát lại .
Đặt tên cho khóa đã nhập và duyệt tìm tệp khóa chung (hoặc dán nội dung của tệp khóa chung ).
Điều này cũng có thể được thực hiện thông qua AWS CLI:
$ aws ivs \ import-playback-key-pair \ --name demo-private-channel-playback-key-1 \ --public-key-material "`cat /path/to/your/public-key.pem`"
Hoặc thông qua AWS SDK ( docs for JavaScript example).
Bây giờ chúng tôi đã tạo một kênh riêng và một cặp khóa phát lại, chúng tôi đã sẵn sàng tạo mã thông báo ủy quyền phát lại đã ký. Trong ứng dụng của bạn, logic nghiệp vụ của bạn sẽ chỉ ra người dùng nào sẽ được cấp mã thông báo ủy quyền. Như đã đề cập ở trên, có thể logic ứng dụng của bạn trước tiên sẽ kiểm tra xem người dùng có phải là người đăng ký kênh hợp lệ hay không bằng cách truy vấn cơ sở dữ liệu. Hoặc, trong trường hợp bị hạn chế về địa lý, có thể bạn sẽ phải tra cứu địa chỉ IP của trình xem để đảm bảo rằng nó được liên kết với một khu vực có thể xem luồng. Việc triển khai chính xác sẽ khác nhau, nhưng khi bạn xác định xem người xem có thực sự được phép xem luồng hay không, bạn có thể tiếp tục với phương pháp tạo mã thông báo được mô tả bên dưới.
Lưu ý: Việc tạo mã thông báo sẽ khác nhau dựa trên ngôn ngữ bạn đang sử dụng trên chương trình phụ trợ. Tham khảo hướng dẫn sử dụng để biết chi tiết về các yêu cầu.
Để tạo mã thông báo với Node.js, chúng ta có thể sử dụng thư viện jsonwebtoken
( docs ). Thư viện này sẽ đơn giản hóa quy trình và cho phép chúng tôi ký tải trọng của mình bằng thuật toán ký SHA-384
theo yêu cầu của Amazon IVS. Tải trọng của chúng tôi phải chứa Kênh ARN , access-control-origin
để giới hạn phát lại ở một miền cụ thể (hoặc *
cho tất cả các miền) và dấu thời gian hết hạn của mã thông báo. Để ký tải trọng, chúng tôi sẽ định dạng trọng tải như bên dưới và sử dụng khóa riêng tư mà chúng tôi đã tạo và nhập ở trên.
Lưu ý: Mã thông báo được sử dụng để bắt đầu phát lại trên một kênh riêng tư, vì vậy khoảng thời gian hết hạn chỉ áp dụng cho thời gian giữa quá trình tạo mã thông báo và bắt đầu phát lại. Nó không liên quan đến lượng thời gian người dùng có thể phát một luồng nhất định. Sau khi được phép phát lại, nó có thể tiếp tục cho đến khi người dùng ngắt kết nối hoặc tải lại trang web.
Đây là một cách để tạo mã thông báo trên phần phụ trợ (thông qua microservice hoặc ứng dụng không có máy chủ) bằng Node.js.
import jwt from "jsonwebtoken"; const getToken = () => { const privateChannelArn = process.env.DEMO_PRIVATE_CHANNEL_ARN; // private channel ARN const privateChannelPrivateKey = process.env.DEMO_PRIVATE_CHANNEL_PRIVATE_KEY; // playback private key const payload = { "aws:channel-arn": privateChannelArn, "aws:access-control-allow-origin": "*", "exp": Date.now() + (60 * 1000), // expires in 1 minute }; const token = jwt.sign(payload, privateChannelPrivateKey, { algorithm: 'ES384' }); return token; }
Trong phần giao diện người dùng của chúng tôi, chúng tôi có thể truy xuất mã thông báo từ phần phụ trợ và nối nó vào Url phát lại của kênh riêng. Trong ví dụ bên dưới, tôi đã cắt bớt URL phát lại ( streamUrl
) cho ngắn gọn.
const streamUrl = `https://[truncated].m3u8?token=${token}` const ivsPlayer = IVSPlayer.create(); ivsPlayer.attachHTMLVideoElement(document.getElementById('video-player')); ivsPlayer.load(streamUrl); ivsPlayer.play();
Trong bài đăng này, chúng tôi đã học cách tạo kênh riêng tư, tạo và nhập cặp khóa phát lại cũng như tạo mã thông báo JWT để ủy quyền phát lại. Để tìm hiểu thêm về các kênh riêng tư, hãy tham khảo hướng dẫn sử dụng .