HTML5直播


76

对于学校,我需要设置一个HTML5实时流网站。他们有一个一直在使用的Flash Player,但现在他们希望它改用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>


Answers:


24

可能的替代方法:

  1. 使用编码器(例如VLC或FFmpeg)将输入流打包为OGG格式。例如,在这种情况下,我使用VLC通过以下代码对屏幕捕获设备进行打包:

    C:\ Program Files \ VideoLAN \ VLC \ vlc.exe -I虚拟屏幕://:screen-fps = 16.000000:屏幕缓存= 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:保持

  2. 将此代码嵌入到<video>HTML页面中的标签中,如下所示:

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

这应该可以解决问题。但是,它的性能较差,并且AFAIK MP4容器类型在浏览器中应该比OGG具有更好的支持。


1
在任何PC上都能正常工作。但是我无法使其在移动设备上运行(例如,从Android上的Chrome浏览器)。任何的想法?
Adorjan Princz

@AdorjanPrincz这可能是由于Android / Chrome上缺少ogg解码器。尝试使用其他视频(和/或容器)格式。
Zsolt 2014年

17

通过使用媒体源扩展(MSE)-相对较新的W3C标准,可以在HTML5中进行实时流传输:https : //www.w3.org/TR/media-source/ MSE是HTML5<video>标签的扩展;网页上的javascript可以从服务器获取音频/视频片段,并将其推送到MSE进行播放。提取机制可以通过HTTP请求(MPEG-DASH)或通过WebSockets完成。截至2016年9月,所有设备上的所有主要浏览器均支持MSE。iOS是唯一的例外。

对于高延迟(5秒以上)的HTML5实时视频流,您可以考虑通过video.js或Wowza流引擎实现MPEG-DASH。

为了获得低延迟,近乎实时的HTML5实时视频流,请查看EvoStream媒体服务器,Unreal媒体服务器和WebRTC。



12

首先,您需要设置媒体流服务器。您可以使用Wowza,red5或nginx-rtmp-module。在所需的操作系统上阅读其文档和设置。所有引擎都支持HLS(Apple开发的Http Live Stream协议)。您应该阅读有关config的文档。nginx-rtmp-module的示例:

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,有线广播...)开始流式传输,例如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)。该播放器可以在没有闪光灯的情况下跨浏览器正常工作。


您的配置文件似乎缺少服务器部分的http块。但是通常很难使这种流媒体业务正常运行。
Johncl '18

在HTML部分中,您调用stream.m3u8,但在服务器配置中没有看到该名称,您从哪里得到的?
user3058963

8

无法在HTML 5中使用RTMP协议,因为RTMP协议仅在服务器和Flash Player之间使用。因此,您可以使用其他流协议来查看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>


-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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.