2012-08-10 20 views
5

Czy ktoś wie, czy Safari obsługuje atrybut crossorigin w tagu HTML5 <video>? Obsługuję wideo z serwera, który odpowiada wszystkimi potrzebnymi nagłówkami CORS, i używam poniższego znacznika, aby osadzić wideo na mojej stronie. Strona jest wyświetlana z innej domeny. Wideo krzyżowe w Safari

 
<video controls crossorigin="anonymous" src="http://example.com/movie.mp4"> 
Następnie narysuj film na płótnie i pobierz obraz z obszaru roboczego za pomocą interfejsu API toDataURL. Działa to w przeglądarce Chrome i Firefox, ale Safari zgłasza błąd bezpieczeństwa, tak jakby w filmie nie było atrybutu crossorigin.

Wszelkie pomysły?

+0

działa w Safari na OS X, ale nie na iOS –

+0

Jestem ciekawy, jak udało ci się pracować w Fx/Chrome, nagłówek CORS i crossorigin = anonimowy nie wystarcza, by nie brudzić płótna. – NoBugs

+0

@NoBugs Nie pamiętam, jak dokładnie działałem w FF/Chrome, to było dawno temu, niejasno pamiętałem, że grałem z nagłówkami CORS, że serwer wrócił. Oto kod, który ma wszystko: https://github.com/akonsu/copla – akonsu

Odpowiedz

1

Wygląda na to, że Safari nie obsługuje atrybutu crossorgin, ale nie mogę znaleźć niczego oficjalnego. Istnieje ten tweet https://twitter.com/sonnypiers/status/187513545397776384 z obejściem obrazów, ale nie sądzę, że pomaga w przypadku wideo.

+1

Istnieje również odniesienie do problemu tutaj: http://flowplayer.electroteque.org/snapshot/fp5 –

-2

Na początek potrzebujesz CORS? Linkowanie do niego wydaje się działać na safari. Próbowałem go za pomocą htmlinstant.com

<video src="http://www.quirksmode.org/html5/videos/big_buck_bunny.mp4" controls /> 

Jeśli potrzebujesz CORS, a następnie dodaje się strona twierdzi, że poparcie dla niego dodano w maju 2011 roku nie zostało przetestowane go jednak. https://developer.mozilla.org/en-US/docs/HTML/CORS_settings_attributes

Na przykład z filmu na płótnie, patrz punkt 5.4 pod tym linkiem: http://www.html5rocks.com/en/tutorials/video/basics/ Przetestowałem i działa w moim safari.

+0

dzięki. Próbka w html5rocks wydaje się nie używać wideo z innej domeny. Potrzebuję przechwycić wideo pochodzące z innej domeny i nie mogę tego zrobić w Safari, ponieważ podczas rysowania na płótno płótno zostanie oznaczone jako skażone, a po wywołaniu wartości DataLo wystąpi błąd bezpieczeństwa. Zwróć uwagę, że zgodnie ze specyfikacją CORS, kiedy film pochodzi z witryny obsługującej CORS, a strona wysyła odpowiednie nagłówki CORS, płótno nie powinno zostać skażone, ale Safari nie obsługuje tego. – akonsu

+1

dzięki.rysowanie wideo na płótno, tak. pobieranie danych z obszaru roboczego nie działa. – akonsu

0

Z naszych testów safari nie obsługiwały crossdomain. Dodajemy atrybut crossorigin, aby używać COR w żądaniach audio (będzie raportować, jak to działa).

Zabawne, jak crossdomain wydawał się działać dobrze pod http, ale nie pod https. Jeśli czytasz specyfikację w3 dla znaczników audio/wideo (zwanych znacznikami medialnymi), oznacza to, że podlegały one ograniczeniom między domenami.

Wsparcie CORS w tagu dźwięku: https://developer.mozilla.org/en-US/docs/HTML/CORS_settings_attributes

Teraz inny Ciekawostką jest fakt, że został safari wyborze rodzaju myme na podstawie rozszerzenia pliku (co?). Plik z rozszerzeniem * .mp4 jako rozszerzonym grał dobrze. Ten sam plik, którego nazwa została zmieniona, na coś innego nie.

0

Oto obejście wideo:

      $.ajax({ 
          type: 'get', 
          url : videoUrlFromAnotherDomain, 
          crossDomain: 'true', 
          success: function(data) { 
           // get a base64 version of the video! 
           var base64 = window.btoa(data); 
           // get a new url! 
           var newURL = 'data:video/mp4' + ';base64,' + base64; 
           // set the src on the video source element to the new url 
           video.find("source").attr("src", newURL); 
          } 

Zastępca niezależnie od typu filmu jest dla "video/mp4" w NEWURL.

+1

Pobieranie całego wideo i zakodowanie go na base64 brzmi bardzo intensywnie na zasoby. W jaki sposób można to zrobić bez przechowywania wideo jako dużego obiektu base64 w pamięci? – NoBugs

+0

OMG co obejść :) – jujule

+0

Pętla tła jednostki Bohatera: 4-10 MB przed base64. 10-minutowy film: 200-400 MB przed base64. Film godzinny: 1-2 GB lub więcej. To rozwiązanie jest niestety gorsze od problemu. Mój telefon płacze, myśląc o tym. – amcgregor

Powiązane problemy