HTML5 прямой эфир - PullRequest
       15

HTML5 прямой эфир

65 голосов
/ 02 мая 2011

Для школы мне нужно настроить сайт прямой трансляции HTML5.У них есть Flash-проигрыватель, который они использовали, но теперь они хотят, чтобы он использовал вместо него HTML5.Как я могу это сделать?Я попытался использовать тег видео, но не могу заставить его работать.Ниже приведен код, который у меня есть.Может ли кто-нибудь указать мне правильное направление?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Deltion Live Streaming</title>
    <script language="javascript" type="text/javascript" src="../swfobject.js"></script>
</head>

<body>  

    <video id="movie" width="460" height="306" preload autoplay>
        <source src="rtmp://fl2.sz.xlcdn.com:80/sz=Deltion_College=lb1"  type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"'>
            <!-- HERE THE CODE FOR THE ALTERNATIVE PLAYER (FLASH) WILL BE! -->
    </video>
</body>
</html>

Ответы [ 8 ]

19 голосов
/ 12 февраля 2013

Возможная альтернатива для этого:

  1. Используйте кодировщик (например, VLC или FFmpeg) для пакетирования вашего входного потока в формат OGG. Например, в этом случае я использовал VLC для пакетирования устройство захвата экрана с этим кодом:

    C: \ Program Files \ VideoLAN \ VLC \ vlc.exe -I фиктивный экран: // : screen-fps = 16.000000: screen-caching = 100 : Sout = # перекодировать {vcodec = Theo, VB = 800, масштаб = 1, ширина = 600, высота = 480, acodec = mp3}: {HTTP Мультиплексор = OGG, ДСТ = 127.0.0.1: 8080 / desktop.ogg} : no-sout-rtp-sap: no-sout-standard-sap: ttl = 1: sout-keep

  2. Вставьте этот код в тег <video> на своей HTML-странице следующим образом:

    <video id="video" src="http://localhost:8080/desktop.ogg" autoplay="autoplay" />

Это должно сработать. Однако это отчасти низкая производительность, и тип контейнера AFAIK MP4 должен иметь лучшую поддержку среди браузеров, чем OGG.

14 голосов
/ 02 мая 2011

Прямо сейчас он будет работать только в некоторых браузерах, и, насколько я вижу, вы на самом деле не ссылались на файл, так что это объясняет, почему он не воспроизводится.

, но, как вы хотитепрямой эфир (который я не тестировал)

извлечение Потоковая передача по RTSP или RTP в HTML5

и http://www.streamingmedia.com/Articles/Editorial/Featured-Articles/25-HTML5-Video-Resources-You-Might-Have-Missed-74010.aspx

12 голосов
/ 28 сентября 2016

Прямая трансляция в HTML5 возможна с помощью Media Source Extensions (MSE) - относительно нового стандарта W3C: https://www.w3.org/TR/media-source/ MSE является расширением тега HTML5 <video>;javascript на веб-странице может извлекать аудио / видео сегменты с сервера и передавать их в MSE для воспроизведения.Механизм выборки может быть выполнен через HTTP-запросы (MPEG-DASH) или через WebSockets.По состоянию на сентябрь 2016 года все основные браузеры на всех устройствах поддерживают MSE.iOS - единственное исключение.

Для потоковой передачи HTML5 в реальном времени с высокой задержкой (5+ секунд) вы можете рассмотреть реализацию MPEG-DASH с помощью video.js или потокового движка Wowza.

Для низкой задержки,Почти в режиме реального времени потоковое видео в формате HTML5, посмотрите на медиа-сервер EvoStream, медиа-сервер Unreal и WebRTC.

8 голосов
/ 08 июля 2017

Для начала необходимо настроить сервер потоковой передачи мультимедиа. Вы можете использовать Wowza, red5 или nginx-rtmp-module . Прочитайте их документацию и настройку на ОС, которую вы хотите. Все движки поддерживают HLS (протокол Http Live Stream, разработанный Apple). Вы должны прочитать документацию для конфигурации. Пример с nginx-rtmp-модулем:

rtmp {
    server {
        listen 1935; # Listen on standard RTMP port
        chunk_size 4000;

        application show {
            live on;
            # Turn on HLS
            hls on;
            hls_path /mnt/hls/;
            hls_fragment 3;
            hls_playlist_length 60;
            # disable consuming the stream from nginx as rtmp
            deny play all;
        }
    }
} 

server {
    listen 8080;

    location /hls {
        # Disable cache
        add_header Cache-Control no-cache;

        # CORS setup
        add_header 'Access-Control-Allow-Origin' '*' always;
        add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
        add_header 'Access-Control-Allow-Headers' 'Range';

        # allow CORS preflight requests
        if ($request_method = 'OPTIONS') {
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Headers' 'Range';
            add_header 'Access-Control-Max-Age' 1728000;
            add_header 'Content-Type' 'text/plain charset=UTF-8';
            add_header 'Content-Length' 0;
            return 204;
        }

        types {
            application/vnd.apple.mpegurl m3u8;
            video/mp2t ts;
        }

        root /mnt/;
    }
}

После успешной установки и настройки сервера. Вы должны использовать некоторые программы для кодирования rtmp (OBS, wirecast ...) для начала потоковой передачи, такие как youtube или twitchtv.

На стороне клиента (в вашем случае браузер) вы можете использовать Videojs или JWplayer для воспроизведения видео для конечного пользователя. Вы можете сделать что-то вроде ниже для Videojs:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Live Streaming</title>
    <link href="//vjs.zencdn.net/5.8/video-js.min.css" rel="stylesheet">
    <script src="//vjs.zencdn.net/5.8/video.min.js"></script>
</head>
<body>
<video id="player" class="video-js vjs-default-skin" height="360" width="640" controls preload="none">
    <source src="http://localhost:8080/hls/stream.m3u8" type="application/x-mpegURL" />
</video>
<script>
    var player = videojs('#player');
</script>
</body>
</html>

Вам не нужно добавлять другие плагины, такие как flash (потому что мы используем HLS, а не rtmp). Этот проигрыватель может хорошо работать с любым браузером без вспышки.

8 голосов
/ 28 ноября 2011

Невозможно использовать протокол RTMP в HTML 5, поскольку протокол RTMP используется только между сервером и проигрывателем flash .Таким образом, вы можете использовать другие потоковые протоколы для просмотра потокового видео в HTML 5.

3 голосов
/ 27 апреля 2017

Вы можете использовать фантастическое имя библиотеки Videojs . Вы найдете больше полезной информации здесь. Но с быстрым стартом вы можете сделать что-то вроде этого:

<link href="//vjs.zencdn.net/5.11/video-js.min.css" rel="stylesheet">
<script src="//vjs.zencdn.net/5.11/video.min.js"></script>
<video 
id="Video" 
class="video-js vjs-default-skin vjs-big-play-centered" 
controls 
preload="none" 
width="auto" 
height="auto" 
poster="poster.jpg" 
data-setup='{"techOrder": ["flash", "html5", "other supported tech"], "nativeControlsForTouch": true, "controlBar": { "muteToggle": false, "volumeControl": false, "timeDivider": false, "durationDisplay": false, "progressControl": false } }'
>
<source src="rtmp://{domain_server}/{publisher}" type='rtmp/mp4'/>
</video>
<script>
var player = videojs('Video');
player.play();
</script>
2 голосов
/ 29 сентября 2014

Используйте ffmpeg + ffserver.Оно работает!!!Вы можете получить файл конфигурации для ffserver с ffmpeg.org и соответственно установить значения.

0 голосов
/ 09 апреля 2015
<object classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"
            height="285" id="mediaPlayer" standby="Loading Microsoft Windows Media Player components..."
            type="application/x-oleobject" width="360" style="margin-bottom:30px;">
            <param name="fileName" value="mms://my_IP_Address:my_port" />
            <param name="animationatStart" value="true" />
            <param name="transparentatStart" value="true" />
            <param name="autoStart" value="true" />
            <param name="showControls" value="true" />
            <param name="loop" value="true" />
            <embed autosize="-1" autostart="true" bgcolor="darkblue" designtimesp="5311" displaysize="4"
                height="285" id="mediaPlayer" loop="true" name="mediaPlayer" pluginspage="http://microsoft.com/windows/mediaplayer/en/download/"
                showcontrols="true" showdisplay="0" showstatusbar="-1" showtracker="-1" src="mms://my_IP_Address:my_port"
                type="application/x-mplayer2" videoborder3d="-1" width="360"></embed>
</object>
...