Osadzanie Windows Media Player dla wszystkich przeglądarek

Używamy WMV wideo na wewnętrznej stronie, i osadzamy je na stronach internetowych. Działa to całkiem dobrze w Internet Explorerze, ale nie w Firefoksie. Znalazłem sposoby, aby to działało w Firefoksie, ale potem przestaje działać w Internet Explorer.

Nie chcemy jeszcze korzystać z Silverlight, zwłaszcza, że nie możemy być pewni, że wszyscy klienci będą mieli Windows XP z zainstalowanym Windows Media Player.

Czy istnieje jakiś uniwersalny kod, który osadza WMP w przeglądarce Internet Explorer i Firefox, czy musimy zaimplementować jakiś user-agent-detection i dostarczyć inny HTML dla różnych przeglądarek?

Author: Peter Featherstone, 2008-08-01

9 answers

W Firefoksie i Internet Explorerze działa mi:

<object id="mediaplayer" classid="clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#version=5,1,52,701" standby="loading microsoft windows media player components..." type="application/x-oleobject" width="320" height="310">
<param name="filename" value="./test.wmv">
     <param name="animationatstart" value="true">
     <param name="transparentatstart" value="true">
     <param name="autostart" value="true">
     <param name="showcontrols" value="true">
     <param name="ShowStatusBar" value="true">
     <param name="windowlessvideo" value="true">
     <embed src="./test.wmv" autostart="true" showcontrols="true" showstatusbar="1" bgcolor="white" width="320" height="310">
</object>
 44
Author: Grant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-14 11:45:15

Czy mogę zaproponować jQuery Media Plugin? Zapewnia osadzanie kodu dla wszystkich rodzajów wideo, nie tylko WMV i wykrywa przeglądarkę, zachowując wszystkie niechlujne instrukcje przełącznika/przypadku z szablonów.

 20
Author: Jake McGraw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-08 18:29:13

Użyj poniższego. Działa w przeglądarce Firefox i Internet Explorer.

        <object id="MediaPlayer1" width="690" height="500" classid="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95"
            codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"
            standby="Loading Microsoft® Windows® Media Player components..." type="application/x-oleobject"
            >
            <param name="FileName" value='<%= GetSource() %>' />
            <param name="AutoStart" value="True" />
            <param name="DefaultFrame" value="mainFrame" />
            <param name="ShowStatusBar" value="0" />
            <param name="ShowPositionControls" value="0" />
            <param name="showcontrols" value="0" />
            <param name="ShowAudioControls" value="0" />
            <param name="ShowTracker" value="0" />
            <param name="EnablePositionControls" value="0" />


            <!-- BEGIN PLUG-IN HTML FOR FIREFOX-->
            <embed  type="application/x-mplayer2" pluginspage="http://www.microsoft.com/Windows/MediaPlayer/"
                src='<%= GetSource() %>' align="middle" width="600" height="500" defaultframe="rightFrame"
                 id="MediaPlayer2" />

I w JavaScript,

    function playVideo() {
        try{
                if(-1 != navigator.userAgent.indexOf("MSIE"))
                {
                        var obj = document.getElementById("MediaPlayer1");
                            obj.Play();

                }
                else
                {
                            var player = document.getElementById("MediaPlayer2");
                            player.controls.play();

                }
             }  
        catch(error) {
            alert(error)
        } 


        }
 9
Author: Peter Mortensen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-08 16:23:19

Elizabeth Castro ma ciekawy artykuł na ten temat: Bye Bye Embed . Warto przeczytać, jak zaatakowała ten problem, a także obsługę treści QuickTime.

 7
Author: Jim Nelson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-10 19:52:28

najlepszym sposobem na wdrożenie wideo w Internecie jest użycie Flash - o wiele łatwiej jest osadzić czysto na stronie internetowej i będzie grać na mniej więcej dowolnej kombinacji przeglądarki i platformy. Jedynym powodem korzystania z Windows Media Player jest to, że streamujesz treści i potrzebujesz niezwykle silnego zarządzania prawami cyfrowymi, a nawet wtedy dostawcy zaczynają używać Flasha nawet do tych celów. Zobacz iPlayer BBC dla doskonałego przykładu.

Proponuję przełączyć się na Flasha nawet do użytku wewnętrznego. Nigdy nie wiesz, kto będzie musiał uzyskać do niego dostęp w przyszłości, a to zapewni Ci najlepszą możliwą kompatybilność w przyszłości.

EDIT-20 marca 2013. Ciekawe, jak te stare pytania pojawiają się od czasu do czasu! Jak odmienny jest dziś świat i jak przestarzałe to wszystko wydaje się. Nie polecałbym dzisiaj tylko Flasha - najlepszą praktyką w dzisiejszych czasach byłoby prawdopodobnie użycie HTML 5 do osadzenia zakodowanego wideo H264, z Flashem awaryjnym, jak opisano tutaj: http://diveintohtml5.info/video.html

 7
Author: Polsonby,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-20 17:59:17

Możesz użyć komentarzy warunkowych, aby zmusić IE i Firefoksa do robienia różnych rzeczy

<![if !IE]>
<p> Firefox only code</p>
<![endif]>

<!--[if IE]>
<p>Internet Explorer only code</p>
<![endif]-->

Same przeglądarki ignorują kod, który nie jest im przeznaczony do czytania.

 6
Author: Grant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-01 18:14:56

Kodowanie flash video jest w rzeczywistości bardzo proste z ffmpeg. Możesz użyć jednego polecenia, aby przekonwertować z prawie dowolnego formatu wideo, ffmpeg jest wystarczająco inteligentny, aby dowiedzieć się resztę, i wykorzysta każdy procesor na twoim komputerze. Wywołanie jest łatwe:

ffmpeg -i input.avi output.flv

Ffmpeg odgadnie żądaną przepływność, ale jeśli chcesz ją podać, możesz użyć opcji-b, więc -b 500000 to na przykład 500kbps. Oczywiście jest mnóstwo opcji, ale generalnie uzyskuję dobre wyniki bez większego majsterkowania. Jest to dobre miejsce, aby rozpocząć, Jeśli szukasz więcej opcji: opcje wideo .

Nie potrzebujesz specjalnego serwera www, aby wyświetlać wideo flash. Dobrze sobie poradziłem, naciskając .pliki flv do standardowego serwera WWW i linkowanie do nich dobrym odtwarzaczem swf, takim jak flowplayer .

WMVs są w porządku, jeśli możesz być pewien, że wszyscy użytkownicy zawsze będą używać [najnowszej, aktualnej wersji] tylko Windows, ale nawet wtedy, Flash jest często lepszym rozwiązaniem dla sieci. Gracz jest nawet niezwykle skinnable i może być kontrolowany przez javascript.
 4
Author: Peter Burns,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-04 02:14:59

Znalazłem dobry artykuł o używaniu WMP z Firefoksem {[4] } na MSDN.

Bazując na artykule MSDN i po wykonaniu kilku prób i błędów, stwierdziłem, że używanie JavaScript jest lepsze niż używanie komentarzy warunkowych lub zagnieżdżonych tagów "EMBED/OBJECT".

Zrobiłem funkcję JS, która generuje obiekt WMP na podstawie podanych argumentów:

<script type="text/javascript">
    function generateWindowsMediaPlayer(
        holderId,   // String
        height,     // Number
        width,      // Number
        videoUrl    // String
        // you can declare more arguments for more flexibility
        ) {
        var holder = document.getElementById(holderId);

        var player = '<object ';
        player += 'height="' + height.toString() + '" ';
        player += 'width="' + width.toString() + '" ';

        videoUrl = encodeURI(videoUrl); // Encode for special characters

        if (navigator.userAgent.indexOf("MSIE") < 0) {
            // Chrome, Firefox, Opera, Safari
            //player += 'type="application/x-ms-wmp" '; //Old Edition
            player += 'type="video/x-ms-wmp" '; //New Edition, suggested by MNRSullivan (Read Comments)
            player += 'data="' + videoUrl + '" >';
        }
        else {
            // Internet Explorer
            player += 'classid="clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6" >';
            player += '<param name="url" value="' + videoUrl + '" />';
        }

        player += '<param name="autoStart" value="false" />';
        player += '<param name="playCount" value="1" />';
        player += '</object>';

        holder.innerHTML = player;
    }
</script>

Potem użyłem tej funkcji, pisząc kilka znaczników i inline JS, takich jak:

<div id='wmpHolder'></div>

<script type="text/javascript">        
    window.addEventListener('load', generateWindowsMediaPlayer('wmpHolder', 240, 320, 'http://mysite.com/path/video.ext'));
</script>

Możesz użyć jQuery.gotowe zamiast Zdarzenie ładowania okna aby kody były bardziej kompatybilne wstecz i między przeglądarkami.

Testowałem kody na IE 9-10, Chrome 27, Firefox 21, Opera 12 i Safari 5, na Windows 7/8.
 4
Author: Perseus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-01 20:40:35

Znalazłem coś, co faktycznie działa zarówno w Firefoksie, jak i IE, na stronie Elizabeth Castro (dzięki linkowi na tej stronie) - próbowałem wszystkich innych wersji tutaj, ale nie mogłem sprawić, aby działały w obu przeglądarkach

<object classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" 
  id="player" width="320" height="260">
  <param name="url" 
    value="http://www.sarahsnotecards.com/catalunyalive/fishstore.wmv" />
  <param name="src" 
    value="http://www.sarahsnotecards.com/catalunyalive/fishstore.wmv" />
  <param name="showcontrols" value="true" />
  <param name="autostart" value="true" />
  <!--[if !IE]>-->
  <object type="video/x-ms-wmv" 
    data="http://www.sarahsnotecards.com/catalunyalive/fishstore.wmv" 
    width="320" height="260">
    <param name="src" 
      value="http://www.sarahsnotecards.com/catalunyalive/fishstore.wmv" />
    <param name="autostart" value="true" />
    <param name="controller" value="true" />
  </object>
  <!--<![endif]-->
</object>

Sprawdź jej stronę: http://www.alistapart.com/articles/byebyeembed/ i wersja z klasą w początkowym znaczniku obiektu

 3
Author: Vonzy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-08 06:21:20