mirror of
				https://github.com/ossrs/srs.git
				synced 2025-03-09 15:49:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			301 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			HTML
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			301 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			HTML
		
	
	
		
			Executable file
		
	
	
	
	
<!DOCTYPE html>
 | 
						||
<html>
 | 
						||
<head>
 | 
						||
    <title>SRS</title>   
 | 
						||
    <meta charset="utf-8">
 | 
						||
    <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"/>
 | 
						||
    <style>
 | 
						||
        body{
 | 
						||
            padding-top: 30px;
 | 
						||
        }
 | 
						||
    </style>
 | 
						||
</head>
 | 
						||
<body>
 | 
						||
<img src='//ossrs.net/gif/v1/sls.gif?site=ossrs.net&path=/player/srsplayer'/>
 | 
						||
<div class="navbar navbar-fixed-top">
 | 
						||
    <div class="navbar-inner">
 | 
						||
        <div class="container">
 | 
						||
            <a id="srs_index" class="brand" href="#">SRS</a>
 | 
						||
            <div class="nav-collapse collapse">
 | 
						||
                <ul class="nav">
 | 
						||
                    <li class="active"><a id="nav_srs_player" href="srs_player.html">SRS播放器</a></li>
 | 
						||
                    <li><a id="nav_rtc_player" href="rtc_player.html">RTC播放器</a></li>
 | 
						||
                    <li><a id="nav_rtc_publisher" href="rtc_publisher.html">RTC推流</a></li>
 | 
						||
                    <li><a id="nav_whip" href="whip.html">WHIP</a></li>
 | 
						||
                    <li><a id="nav_whep" href="whip.html">WHEP</a></li>
 | 
						||
                    <li><a  href="http://ossrs.net/srs.release/releases/app.html">iOS/Andriod</a></li>
 | 
						||
                    <!--<li><a id="nav_srs_publisher" href="srs_publisher.html">SRS编码器</a></li>-->
 | 
						||
                    <!--<li><a id="nav_srs_chat" href="srs_chat.html">SRS会议</a></li>-->
 | 
						||
                    <!--<li><a id="nav_srs_bwt" href="srs_bwt.html">SRS测网速</a></li>-->
 | 
						||
                    <!--li><a id="nav_vlc" href="vlc.html">VLC播放器</a></li>-->
 | 
						||
                    <!--<li><a id="nav_gb28181" href="srs_gb28181.html">GB28181</a></li>-->
 | 
						||
                    <li>
 | 
						||
                        <a href="https://github.com/ossrs/srs">
 | 
						||
                            <img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/ossrs/srs?style=social">
 | 
						||
                        </a>
 | 
						||
                    </li>
 | 
						||
                </ul>
 | 
						||
            </div>
 | 
						||
        </div>
 | 
						||
    </div>
 | 
						||
</div>
 | 
						||
<div class="container">
 | 
						||
 | 
						||
    <div id="main_content">
 | 
						||
        <div id="main_info" class="alert alert-info fade in">
 | 
						||
            <button type="button" class="close" data-dismiss="alert">×</button>
 | 
						||
            <strong><span>Usage:</span></strong> <span>输入HTTP-FLV/HLS地址后点击“播放视频”即可播放视频</span>
 | 
						||
        </div>
 | 
						||
        <div class="form-inline">
 | 
						||
            <div>
 | 
						||
                URL:
 | 
						||
                <input type="text" id="txt_url" class="input-xxlarge" value="">
 | 
						||
                <button class="btn btn-primary" id="btn_play">播放视频</button>
 | 
						||
            </div>
 | 
						||
            <p></p>
 | 
						||
            <div>
 | 
						||
                <video id="video_player" width="100%" autoplay controls></video>
 | 
						||
            </div>
 | 
						||
            <p>
 | 
						||
                分享:<a href="#" id="link_url" target="_blank">请右键拷贝此链接</a>
 | 
						||
            </p>
 | 
						||
            <div id="main_tips">
 | 
						||
                <p></p>
 | 
						||
                <p>
 | 
						||
                    推荐的其他播放器:
 | 
						||
                    <ul>
 | 
						||
                        <li><a href="https://github.com/xqq/mpegts.js">flv.js</a>,H5/MSE播放HTTP-FLV</li>
 | 
						||
                        <li><a href="https://github.com/xqq/mpegts.js">mpegts.js</a>,H5/MSE播放HTTP-TS</li>
 | 
						||
                        <li><a href="https://github.com/video-dev/hls.js/">hls.js</a>,H5/MSE播放HLS</li>
 | 
						||
                        <li><a href="https://github.com/Dash-Industry-Forum/dash.js">dash.js</a>,H5/MSE播放MPEG-DASH</li>
 | 
						||
                    </ul>
 | 
						||
                </p>
 | 
						||
            </div>
 | 
						||
        </div>
 | 
						||
    </div>
 | 
						||
 | 
						||
    <div name="detect_flash">
 | 
						||
        <div id="main_flash_alert" class="alert alert-danger fade in hide">
 | 
						||
            <button type="button" class="close" data-dismiss="alert">×</button>
 | 
						||
            <p>
 | 
						||
                <a href="https://www.adobe.com/products/flashplayer/end-of-life.html" target="_blank">Flash已死</a>,
 | 
						||
                无法播放RTMP流,可用ffplay或VLC播放器播放。
 | 
						||
            </p>
 | 
						||
            <ul>
 | 
						||
                <li>若希望做低延迟直播(3-5秒),可用HTTP-FLV,播放器用<a href="https://github.com/xqq/mpegts.js">flv.js</a>,H5/MSE播放HTTP-FLV</li>
 | 
						||
                <li>若希望做低延迟直播(3-5秒),可用HTTP-TS,播放器用<a href="https://github.com/xqq/mpegts.js">mpegts.js</a>,H5/MSE播放HTTP-TS</li>
 | 
						||
                <li>若对延迟不敏感(5-10秒),跨平台比较好,可用HLS,播放器用<a href="https://github.com/video-dev/hls.js/">hls.js</a>,H5/MSE播放HLS</li>
 | 
						||
                <li>若希望超低延迟(1秒内),只需要支持主流的浏览器,可用WebRTC,播放器用<a href="rtc_player.html">RTC播放器</a></li>
 | 
						||
            </ul>
 | 
						||
            <p>
 | 
						||
                更多信息,参考<a href="https://mp.weixin.qq.com/s/oYn5q4fF9afaged23Ueudg" target="_blank">没有Flash如何做直播?</a>
 | 
						||
            </p>
 | 
						||
        </div>
 | 
						||
    </div>
 | 
						||
 | 
						||
    <footer>
 | 
						||
        <p></p>
 | 
						||
        <p><a href="https://github.com/ossrs/srs">SRS Team © 2013</a></p>
 | 
						||
    </footer>
 | 
						||
</div>
 | 
						||
</body>
 | 
						||
<script type="text/javascript" src="js/jquery-1.12.2.min.js"></script>
 | 
						||
<script type="text/javascript" src="js/bootstrap.min.js"></script>
 | 
						||
<script type="text/javascript" src="js/mpegts-1.7.2.min.js"></script>
 | 
						||
<script type="text/javascript" src="js/hls-0.14.17.min.js"></script>
 | 
						||
<script type="text/javascript" src="js/dash-v4.5.1.all.min.js"></script>
 | 
						||
<script type="text/javascript" src="js/json2.js"></script>
 | 
						||
<script type="text/javascript" src="js/srs.page.js"></script>
 | 
						||
<script type="text/javascript" src="js/srs.log.js"></script>
 | 
						||
<script type="text/javascript" src="js/srs.utility.js"></script>
 | 
						||
<script type="text/javascript" src="js/winlin.utility.js"></script>
 | 
						||
<script type="text/javascript">
 | 
						||
    var flvPlayer = null;
 | 
						||
    var tsPlayer = null;
 | 
						||
    var hlsPlayer = null;
 | 
						||
    var dashPlayer = null;
 | 
						||
 | 
						||
    var stopPlayers = function () {
 | 
						||
        if (flvPlayer) {
 | 
						||
            flvPlayer.destroy();
 | 
						||
            flvPlayer = null;
 | 
						||
        }
 | 
						||
        if (tsPlayer) {
 | 
						||
            tsPlayer.destroy();
 | 
						||
            tsPlayer = null;
 | 
						||
        }
 | 
						||
        if (hlsPlayer) {
 | 
						||
            hlsPlayer.destroy();
 | 
						||
            hlsPlayer = null;
 | 
						||
        }
 | 
						||
        if (dashPlayer) {
 | 
						||
            dashPlayer.destroy();
 | 
						||
            dashPlayer = null;
 | 
						||
        }
 | 
						||
    };
 | 
						||
 | 
						||
    var hide_for_error = function () {
 | 
						||
        $('#main_flash_alert').show();
 | 
						||
        $('#main_info').hide();
 | 
						||
        $('#main_tips').hide();
 | 
						||
        $('#video_player').hide();
 | 
						||
        //$('#btn_play').hide();
 | 
						||
 | 
						||
        stopPlayers();
 | 
						||
    };
 | 
						||
 | 
						||
    var show_for_ok = function () {
 | 
						||
        $('#main_flash_alert').hide();
 | 
						||
        $('#main_info').show();
 | 
						||
        $('#main_tips').show();
 | 
						||
        $('#video_player').show();
 | 
						||
        //$('#btn_play').show();
 | 
						||
    };
 | 
						||
 | 
						||
    var apply_url_change = function() {
 | 
						||
        var r = parse_rtmp_url($("#txt_url").val());
 | 
						||
        var url = window.location.protocol + "//" + query.host + query.pathname + "?autostart=true"
 | 
						||
            + "&app=" + r.app + "&stream=" + r.stream + "&server=" + r.server + "&port=" + r.port;
 | 
						||
        url += (query.shp_identify) ? "&shp_identify=" + query.shp_identify : '';
 | 
						||
        url += (r.vhost === "__defaultVhost__") ? "&vhost=" + r.server : "&vhost=" + r.vhost;
 | 
						||
        url += (r.schema !== "rtmp") ? "&schema=" + r.schema : '';
 | 
						||
        url += (query.buffer) ? "&buffer=" + query.buffer : '';
 | 
						||
        url += (query.api_port) ? "&api_port=" + query.api_port : '';
 | 
						||
 | 
						||
        var queries = user_extra_params(query);
 | 
						||
        queries = user_extra_params(r, queries);
 | 
						||
 | 
						||
        if (queries && queries.length) {
 | 
						||
            url += '&' + queries.join('&');
 | 
						||
        }
 | 
						||
        $("#player_url").text($("#txt_url").val()).attr("href", url);
 | 
						||
        $("#link_url").attr("href", url);
 | 
						||
 | 
						||
        // For RTMP, not support.
 | 
						||
        if (r.schema === 'rtmp') {
 | 
						||
            hide_for_error();
 | 
						||
            return;
 | 
						||
        }
 | 
						||
 | 
						||
        return r;
 | 
						||
    };
 | 
						||
 | 
						||
    var start_play = function (r) {
 | 
						||
        stopPlayers();
 | 
						||
        if (!r) return;
 | 
						||
 | 
						||
        // Use H5 native to play mp4.
 | 
						||
        if (r.stream.indexOf('.mp4') > 0) {
 | 
						||
            $('#video_player').attr('src', r.url).show();
 | 
						||
            return;
 | 
						||
        }
 | 
						||
 | 
						||
        // Start play HTTP-TS.
 | 
						||
        if (r.stream.indexOf('.ts') > 0) {
 | 
						||
            if (!mpegts.getFeatureList().mseLivePlayback) {
 | 
						||
                hide_for_error();
 | 
						||
                return;
 | 
						||
            }
 | 
						||
 | 
						||
            show_for_ok();
 | 
						||
 | 
						||
            tsPlayer = mpegts.createPlayer({type: 'mpegts', url: r.url, isLive: true, enableStashBuffer: false});
 | 
						||
            tsPlayer.attachMediaElement(document.getElementById('video_player'));
 | 
						||
            tsPlayer.load();
 | 
						||
            tsPlayer.play();
 | 
						||
            return;
 | 
						||
        }
 | 
						||
 | 
						||
        // Start play HLS.
 | 
						||
        if (r.stream.indexOf('.m3u8') > 0) {
 | 
						||
            if (!Hls.isSupported()) {
 | 
						||
                hide_for_error();
 | 
						||
                return;
 | 
						||
            }
 | 
						||
 | 
						||
            show_for_ok();
 | 
						||
 | 
						||
            hlsPlayer = new Hls();
 | 
						||
            hlsPlayer.loadSource(r.url);
 | 
						||
            hlsPlayer.attachMedia(document.getElementById('video_player'));
 | 
						||
            return;
 | 
						||
        }
 | 
						||
 | 
						||
        // Start play MPEG-DASH.
 | 
						||
        if (r.stream.indexOf('.mpd') > 0) {
 | 
						||
            show_for_ok();
 | 
						||
 | 
						||
            dashPlayer = dashjs.MediaPlayer().create();
 | 
						||
            dashPlayer.initialize(document.querySelector("#video_player"), r.url, true);
 | 
						||
            return;
 | 
						||
        }
 | 
						||
 | 
						||
        // Start play HTTP-FLV.
 | 
						||
        let isFlv = r.stream.indexOf('.flv') > 0;
 | 
						||
        // Compatible with NGINX-HTTP-FLV module, see https://github.com/winshining/nginx-http-flv-module and the stream
 | 
						||
        // url without .flv, such as:
 | 
						||
        //          http://localhost:8080/live?app=live&stream=livestream
 | 
						||
        isFlv = isFlv || r.stream && r.url.indexOf('http') === 0;
 | 
						||
        if (isFlv) {
 | 
						||
            if (!mpegts.getFeatureList().mseLivePlayback) {
 | 
						||
                hide_for_error();
 | 
						||
                return;
 | 
						||
            }
 | 
						||
 | 
						||
            show_for_ok();
 | 
						||
 | 
						||
            flvPlayer = mpegts.createPlayer({type: 'flv', url: r.url, isLive: true, enableStashBuffer: false});
 | 
						||
            flvPlayer.attachMediaElement(document.getElementById('video_player'));
 | 
						||
            flvPlayer.load();
 | 
						||
            flvPlayer.play();
 | 
						||
            return;
 | 
						||
        }
 | 
						||
 | 
						||
        console.error('不支持的URL', r.url, r);
 | 
						||
        $('#video_player').hide();
 | 
						||
    };
 | 
						||
 | 
						||
    $("#txt_url").change(function(){
 | 
						||
        apply_url_change();
 | 
						||
    });
 | 
						||
 | 
						||
    $("#btn_play").click(function(){
 | 
						||
        $('#video_player').prop('muted', false);
 | 
						||
        var r = apply_url_change();
 | 
						||
        start_play(r);
 | 
						||
    });
 | 
						||
 | 
						||
    /****
 | 
						||
     * The parameters for this page:
 | 
						||
     *       schema, the protocol schema, rtmp or http.
 | 
						||
     *       server, the ip of the url.
 | 
						||
     *       port, the rtmp port of url.
 | 
						||
     *       vhost, the vhost of url, can equals to server.
 | 
						||
     *       app, the app of url.
 | 
						||
     *       stream, the stream of url, can endwith .flv or .mp4 or nothing for RTMP.
 | 
						||
     *       autostart, whether auto play the stream.
 | 
						||
     *       buffer, the buffer time in seconds.
 | 
						||
     * extra params:
 | 
						||
     *       shp_identify, hls+ param.
 | 
						||
     * for example:
 | 
						||
     *       http://localhost:8088/players/srs_player.html?vhost=ossrs.net&app=live&stream=livestream&server=ossrs.net&port=1935&autostart=true&schema=rtmp
 | 
						||
     *       http://localhost:8088/players/srs_player.html?vhost=ossrs.net&app=live&stream=livestream.flv&server=ossrs.net&port=8080&autostart=true&schema=http
 | 
						||
     */
 | 
						||
    var query = parse_query_string();
 | 
						||
 | 
						||
    // get the vhost and port to set the default url.
 | 
						||
    // url set to: http://localhost:8080/live/livestream.flv
 | 
						||
    srs_init_flv("#txt_url");
 | 
						||
 | 
						||
    if (query.autostart === "true") {
 | 
						||
        $('#video_player').prop('muted', true);
 | 
						||
        console.warn('For autostart, we should mute it, see https://www.jianshu.com/p/c3c6944eed5a ' +
 | 
						||
            'or https://developers.google.com/web/updates/2017/09/autoplay-policy-changes#audiovideo_elements');
 | 
						||
 | 
						||
        var r = apply_url_change();
 | 
						||
        start_play(r);
 | 
						||
    } else {
 | 
						||
        $('#video_player').hide();
 | 
						||
    }
 | 
						||
</script>
 | 
						||
</html>
 |