2012-06-10 12 views
6

Tôi đang cố hiểu logic đằng sau bất kỳ chuyến đi nào là cơ chế 'chặn' để phát lại video của YouTube.Không thể truy cập video YouTube thông qua API JS của YouTube bên trong Tiện ích mở rộng của Google Chrome, nhưng có thể bên trong JS Fiddle

Ở đây tôi đang cố gắng phát lại bài hát bị chặn phát lại được nhúng bên trong JS Fiddle. Nhận thấy rằng nó hoạt động:

http://jsfiddle.net/E7B9C/17/

enter image description here

Bây giờ, tôi sử dụng cùng một mã chính xác bên trong phần mở rộng của Google Chrome của tôi:

http://www.meomixes.com/ nếu bạn muốn nhấn vào đây để tải về phần mở rộng.

http://www.meomixes.com/Test.crx để liên kết trực tiếp đến tiện ích mở rộng.

Quan sát mà tôi không thể phát lại cùng một đoạn video youtube:

enter image description here

tôi đã tự hỏi những tùy chọn gỡ lỗi của tôi đã cho kịch bản này. Có ai có bất kỳ ý tưởng về những gì tôi nên khám phá? Tôi đã cố gắng yêu cầu các điều khoản sau đây trong manifest của tôi, nhưng nó không có bất kỳ tác:

"permissions": [ 
"http://*.youtube.com", 
"https://*.youtube.com", 
"http://*.google.com", 
"https://*.google.com" 
] 

Tôi đã đặt nguồn đầy Test.crx đây: http://www.meomixes.com/Test.zip Để tải:

  • Giải nén
  • Truy cập trang tiện ích mở rộng của Google Chrome và bật 'Chế độ nhà phát triển'
  • Nhấp vào 'Tải tiện ích chưa mở rộng' và trỏ đến thư mục đã giải nén.
  • Quan sát rằng video không phát lại.

Lưu ý cuối cùng: Bài hát phát vui vẻ trong bài đăng trên Facebook.

EDIT: Tôi tìm thấy điều này: http://gdata.youtube.com/feeds/api/videos/UfESt2KdOdc?v=2&prettyprint=true cho video được đề cập. Nó ghép đôi với: http://apiblog.youtube.com/2011/12/understanding-playback-restrictions.html.

Chỉ cần xây dựng dựa trên câu trả lời đầu tiên. Về cơ bản, có một cài đặt được gọi là 'cung cấp' ngăn không cho phát trên 'thiết bị bên ngoài' như TV và Tiện ích mở rộng của Google Chrome.

Tìm cách bỏ qua vấn đề này ngay bây giờ.

Trả lời

9

Triển khai iframe của Youtube dường như chặn một số url giới thiệu nhất định hiển thị nội dung được cấp phép.

Vấn đề

Những schemas ám chỉ không có vẻ để làm việc với video cụ thể bạn đang thử nghiệm với.

chrome-extension:// 
file:// 

Có vẻ như người cấp phép nội dung, UMG, đã chọn để ngăn mọi lượt phát từ tiện ích hoặc tệp cục bộ.Một cách khác là tránh sử dụng các video có chứa nội dung được cấp phép, nhưng điều đó thật nhàm chán.

Thật bất tiện nhưng có một giải pháp thay thế sẽ cho phép bạn triển khai trình phát iframe vào tiện ích. Tất cả những điều mà Youtube quan tâm là người chơi được nhúng vào một trang nào đó trên internet.

Proxy Trang

Hãy thử thay thế src iframe trong popup.htm với khung kết quả jsfiddle từ ví dụ của bạn và tải lại plugin của bạn.

<iframe width="200" height="200" src="http://fiddle.jshell.net/E7B9C/17/show/"></iframe> 

Bạn sẽ thấy video "không khả dụng" trước đây đang phát ngay bây giờ. Tiện ích mở rộng của bạn hiện tham chiếu đến trang bạn kiểm soát trên jshell.net. Tất cả Youtube đều biết rằng bạn đang gọi người chơi của họ từ jshell.net.

Controls

Bây giờ chúng ta có một cầu thủ, bạn có thể nhận thấy rằng bạn không có bất kỳ điều khiển Youtube có sẵn cho bạn kể từ bây giờ bạn đang tham khảo iframe của riêng bạn đó là tham khảo các iframe Youtube và đó là API. Như thể chưa đủ thú vị, bây giờ bạn có thể tạo API khung nội tuyến của riêng mình để giao tiếp từ tiện ích mở rộng chrome sang khung nội tuyến của bạn tới iframe của Youtube!

Trong các trường hợp bình thường, phụ huynh có thể đặt window.location.hash của khung con và khung đó xem và phân tích bất kỳ thay đổi nào đi qua. Đứa trẻ sau đó gọi một số gọi lại trong parent directly với một số thông tin mới.

Chỉnh sửa: Thay vì sử dụng window.location.hash, bạn có thể sử dụng window.postMessage() của HTML5 thay vào đó và tránh phải đối phó với việc kiểm tra và phân tích cú pháp băm liên tục.

Điều đó sẽ giúp bạn bắt đầu và chạy.

+1

Đây là phản hồi rất chi tiết. Tôi sẽ chơi với nó khi tôi có thời gian, hy vọng tối nay. Tôi do dự vì nội dung trên YouTube mà tôi muốn hiển thị là động - tôi muốn có thể tải video theo yêu cầu đồng thời bỏ qua trình chặn YouTube. Tôi chỉ có thể viết một thuật toán để tìm một video giống hệt nhau mà không phải là nội dung bị hạn chế. Không chắc chắn vẫn sẽ dễ dàng hơn vào thời điểm này. Cảm ơn bạn đã phản hồi! :) EDIT: Tôi cũng tự hỏi - có thể giả mạo URL giới thiệu s.t. có vẻ như không đến từ tiện ích Google Chrome? Đọc về nó bây giờ –

+0

Tôi đã chơi với văn bản để document.referrer, nhưng ngay cả khi một phần mở rộng nó vẫn có vẻ là chỉ đọc. Bạn có thể sử dụng location.hash để chuyển ID Youtube bạn muốn phát đến iframe được nhúng, có iframe bắt id và tự động sửa đổi nhúng. – Workman

+1

Tôi đã tiếp tục và chấp nhận câu trả lời của bạn cho nghiên cứu được đặt ở bên cạnh bạn. Tôi đã đi trước và chỉ viết logic để tìm một bản sao của bài hát. Tôi đã chọn tuyến đường này vì có nhiều cách để vô hiệu hoá một bài hát hơn là chỉ vấn đề nhúng. Như vậy, nó có vẻ thích hợp để tìm một cách xử lý tất cả các vấn đề trong một. Chúc mừng người đàn ông. :) –