Пряма трансляція HTML5


76

Для школи мені потрібно створити веб-сайт прямої трансляції HTML5. У них є програвач флеш-потоків, який вони раніше використовували, але тепер вони хочуть, щоб він використовував 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>

аналогічно для RTSP (відкрите RTMP наступника) stackoverflow.com/questions/1735933 / ...
Чіро Сантіллі郝海东冠状病六四事件法轮功

Відповіді:


23

Можлива альтернатива цьому:

  1. Використовуйте кодер (наприклад, VLC або FFmpeg), щоб пакетувати вхідний потік у формат OGG. Наприклад, у цьому випадку я використовував VLC для пакетування пристрою зйомки екрана з таким кодом:

    C: \ Program Files \ VideoLAN \ VLC \ vlc.exe -І фіктивний екран: //: screen-fps = 16.000000: screen-caching = 100: sout = # transcode {vcodec = theo, vb = 800, scale = 1, ширина = 600, висота = 480, acodec = mp3}: http {mux = ogg, dst = 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.


1
Чудово працює з будь-якого ПК. Але я не можу змусити його працювати на мобільному (наприклад, з Chrome на Android). Будь-яка ідея?
Adorjan Princz

@AdorjanPrincz Це, мабуть, пов’язано з відсутністю декодера ogg в Android / Chrome. Спробуйте різні формати відео (та / або контейнера).
Zsolt

18

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

Для високої затримки (понад 5 секунд) потокового відео в форматі HTML5 ви можете розглянути можливості реалізації MPEG-DASH за допомогою потокового механізму video.js або Wowza.

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


15

Зараз це буде працювати лише в деяких браузерах, і, наскільки я бачу, ви насправді не посилалися на файл, тож це пояснювало б, чому він не відтворюється.

але як ви хочете прямий ефір (з яким я не тестував)

перегляньте Потокове передавання через RTSP або RTP у HTML5

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


12

По-перше, вам потрібно налаштувати сервер потокового передавання медіа. Ви можете використовувати Wowza, red5 або nginx-rtmp-модуль . Прочитайте їх документацію та налаштування на потрібну ОС. Весь движок підтримує 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>

Вам не потрібно додавати інші плагіни, такі як флеш (оскільки ми використовуємо HLS, а не rtmp). Цей плеєр може добре працювати в браузері без спалаху.


Здається, у вашому файлі конфігурації відсутній блок http для серверної частини. Але загалом важко змусити цей потоковий бізнес працювати.
Johncl,

У розділі HTML ви викликаєте stream.m3u8, я не бачу цього імені в конфігурації сервера, звідки ви його взяли?
user3058963 02

8

Неможливо використовувати протокол RTMP у HTML 5, оскільки протокол RTMP використовується лише між сервером та флеш- програвачем. Отже, ви можете використовувати інші потокові протоколи для перегляду потокових відео в HTML 5.


4
що таке інші протоколи?
eri

1
Наприклад, @eri HLS
TGO

3

Ви можете використовувати фантастичну назву бібліотеки 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>

0

Використовуйте ffmpeg + ffserver. Це працює!!! Ви можете отримати конфігураційний файл для ffserver з ffmpeg.org і відповідно встановити значення.


9
Будь ласка, опублікуйте свої команди та конфігурації, у мене трохи проблем.
Густав

-9
<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>

11
Відповіді лише за кодом не є корисними. Ви б мали більше шансів допомогти комусь (і отримати голоси за), якби включили коротке пояснення як частину кожної відповіді.
десант

1
@AsongAmagin Вам бракує закриваючого тегу для цього елемента об’єкта.
TylerH

Лише для Windows, тож втратьте всю підтримку між платформами, яку пропонує HTML 5.
AlastairG
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.