lets.dj

Khả năng (capabilities)

Đây là bản dịch. Bản tiếng Anh là bản có giá trị: nếu hai bản khác nhau, hãy làm theo bản tiếng Anh. Bản dịch chỉ được cung cấp để tiện theo dõi. Đọc trang này bằng tiếng Anh

Các cờ điều khiển giao diện trong mã, chứ không trong tài liệu.

Capabilities được gửi trong đối tượng capabilities của mỗi lần đồng bộ, và mỗi lần đồng bộ thay thế toàn bộ khai báo trước đó. Một provider thôi gửi một cờ không giữ lại giá trị cũ: nó có giá trị mặc định. Vì vậy hãy gửi mọi capability bạn muốn, mỗi lần.

Các giá trị mặc định không giống nhau, và sự khác biệt là có chủ ý. Một cờ cấp cho thứ mà chúng tôi lẽ ra sẽ giữ lại thì mặc định là false, và chỉ giá trị true nguyên văn mới tính: giá trị vắng mặt, "true" và 1 đều có nghĩa là false. Một cờ rút lại thứ mà chúng tôi lẽ ra mặc nhiên cho phép thì mặc định là true, và chỉ giá trị false nguyên văn mới tính. Một capability mà đặc tả này không nêu tên sẽ bị bỏ qua.

Không có gì kiểm chứng một khai báo. Một provider được tin theo lời nó, và đó là lý do cờ duy nhất mà việc khai báo sai gây hại, canAnalyseAudio, nói thẳng nó phải trả giá gì.

  • canTransposeKey: bạn có thể đổi cao độ. Mặc định false. Cần một bộ giải mã nằm trên đường đi của bạn, nên chỉ các provider chuyển mã mới có thể cung cấp. Hiện chưa có gì trong ứng dụng cung cấp việc đổi tông, vì chưa có provider nào chuyển mã, và khai báo nó không thay đổi gì trên màn hình.
  • canSeek: media của bạn trả lời các yêu cầu range, nên việc tua hoạt động. Mặc định true. Hiện ứng dụng không thay đổi những gì nó cung cấp theo cờ này. Với một bucket, chúng tôi đo nó, bằng cách xin một range, ở mỗi lần quét.
  • canSearchRemotely: bạn có thể trả lời một tìm kiếm mà chúng tôi không phục vụ được từ danh mục đã phản chiếu, và tải về thứ ai đó chọn. Mặc định false. Một cờ cho cả hai, vì một nguồn tìm được bài mà không đi lấy về thì không đáng để cung cấp. Xem Trả lời theo yêu cầu.
  • canPreview: bạn có thể phát một đoạn của bài chưa ai tải về, để người đang chọn giữa sáu bản karaoke có thể nghe thử một bản. Mặc định false. Chỉ có nghĩa khi đi cùng canSearchRemotely, và tách riêng khỏi nó vì tải theo yêu cầu vẫn hữu ích khi không có nó. Xem Nghe thử.
  • allowsSharing: danh mục của bạn có thể được cho người khác ngoài chủ của nó thấy hay không. Mặc định true, vì phần lớn các nguồn là tệp của chính ai đó. Đặt false nếu điều khoản của bạn tính theo từng chỗ ngồi. Một thư viện báo false chỉ có thể được gắn ở chế độ riêng tư, và nếu sau này bạn đổi sang false, các gắn kết chia sẻ hiện có bị hạ xuống ở lần đồng bộ kế tiếp. Khác với việc dùng thương mại: một giấy phép có thể cho phép nghe riêng nhưng cấm bạn mở danh mục cho cả một phòng đầy khách.
  • maxConcurrentRooms: danh mục của bạn có thể có mặt ở tối đa bao nhiêu phòng cùng lúc. Mặc định: không giới hạn, phù hợp với tệp của chính ai đó. Gửi 1 cho giấy phép tính theo chỗ ngồi. Nó là một số dương, và bất cứ giá trị nào khác được hiểu là không giới hạn. Gắn vượt giới hạn bị từ chối, và lời từ chối nêu tên các phòng đang dùng nó để người ta giải phóng một phòng.
  • allowsCommercialUse: nội dung của bạn có giấy phép dùng cho một địa điểm kinh doanh hay không. Mặc định false, và nên giữ false trừ khi bạn thực sự có giấy phép. Chế độ địa điểm từ chối các provider báo false; điều đó được thực thi trong mã, không phải trong điều khoản.
  • canAnalyseAudio: xem bên dưới.

canAnalyseAudio

Mặc định false. Nó có nghĩa là: mọi phản hồi thành công cho một yêu cầu tới media của tôi đều trả lời một yêu cầu CORS ở chế độ ẩn danh, để một trang ở origin khác có thể đọc các byte nó đang phát.

Cụ thể, với GET <baseUrl>/media/<externalId>?t=<mediaToken>, địa chỉ được trao cho Stage, kể cả các yêu cầu range, trên mọi 200 và mọi 206. Bridge cũng gửi chúng trên 416 và trên câu trả lời cho OPTIONS. Một phản hồi lỗi, như 403 cho token sai hay 404 cho id bạn không có, không cần mang chúng, và của bridge thì không:

  • Access-Control-Allow-Origin nêu origin đã yêu cầu, hoặc là *. Stage không gửi thông tin xác thực, nên dùng ký tự đại diện là chấp nhận được. Nếu bạn phản chiếu origin, hãy gửi thêm Vary: Origin.
  • Access-Control-Expose-Headers: Content-Length, Content-Range, điều mà Phát nội dung media đã yêu cầu.
  • Nếu địa chỉ chuyển hướng, mọi bước chuyển hướng đều làm như vậy.
  • Các yêu cầu của Stage là yêu cầu CORS đơn giản, vì một Range: bytes=N-M duy nhất được phép trong một yêu cầu như vậy, nên không mong đợi preflight. Dù vậy hãy trả lời OPTIONS, như Phát nội dung media nói.

Đó là một khẳng định về CORS và không gì khác. Nó không nói rằng bạn phân tích bất cứ thứ gì, và nó tách riêng khỏi canPreview.

Stage làm gì với nó

Stage đọc cờ này cho từng track, từ những gì nó được cho biết khi bài hát sắp phát.

  • False hoặc vắng mặt. Stage không đặt thuộc tính crossorigin và không dựng đồ thị âm thanh. Việc phát đúng như trước khi có capability này, và bạn không nợ ai header CORS nào. Một track không có hình, điều mà Stage biết được bằng cách tải nó và thấy nó không có video, hiện ảnh bìa của nó, hoặc biển neon của Let’s DJ nếu không có, luôn kèm tên bài và nghệ sĩ. Không có bộ hiển thị âm thanh (visualiser).
  • True. Stage đặt crossorigin="anonymous" trước khi tải, cho mọi track của bạn, kể cả video, vì nó không thể biết một tệp không có hình cho đến khi đã tải nó. Một track không có hình còn có thêm một bộ phân tích âm thanh và một visualiser, một hàng cột, hiện cùng ảnh bìa hoặc biển neon đó. Track video không được phân tích.
  • Thuộc tính được cố định suốt đời của phần tử. Một lần đồng bộ đổi cờ ảnh hưởng đến bài kế tiếp, không phải bài đang phát.
  • Chỉ trình phát của Stage làm những điều này. Bản nghe thử trên điện thoại không bao giờ đặt crossorigin và không bao giờ được phân tích, nên một provider có cung cấp nghe thử không cần thêm gì mới.

Vì sao nó tồn tại, và cái bẫy trong đó

Trình duyệt không cho một trang phân tích media đến từ origin khác trừ khi origin đó đồng ý. Nếu trang đưa media như vậy qua một bộ phân tích mà không có sự đồng ý, trình duyệt không báo lỗi: thứ được phát trở nên im lặng và bộ phân tích đọc ra toàn số không, và không có gì nói lý do. Vì vậy Stage không thể cứ thử.

Khai báo true mà không gửi các header thì không suy giảm một cách lặng lẽ. Với crossorigin="anonymous" được đặt, một phản hồi thiếu chúng sẽ không tải được chút nào. Stage coi track đó là không phát được và bỏ qua nó, và vì thế bỏ qua mọi track từ provider đó.

Để nó không đặt thì không tốn gì. Âm thanh vẫn phát, và vẫn hiện ảnh bìa của nó.

Stage cố ý không thử thuộc tính rồi lùi lại khi nó hỏng. Đến khi lỗi hiện ra, một phần tử khác origin đã bị đưa qua bộ phân tích thì đã im lặng rồi, và một phương án lùi lại mà phát ra sự im lặng còn tệ hơn là không thử.

Bridge khai báo true. Một bucket thì không bao giờ: một liên kết presigned không mang header CORS nào trừ khi chủ bucket đã cấu hình, và chúng tôi không cấu hình bucket của người khác.