mirror of
				https://github.com/ossrs/srs.git
				synced 2025-03-09 15:49:59 +00:00 
			
		
		
		
	fixbug[play packet decode bug: srs only read bool type play reset value, actually this value can be bool or number]
This commit is contained in:
		
						commit
						bfef0eebfe
					
				
					 74 changed files with 1591 additions and 1050 deletions
				
			
		| 
						 | 
				
			
			@ -2,7 +2,7 @@
 | 
			
		|||
'''
 | 
			
		||||
The MIT License (MIT)
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2013 winlin
 | 
			
		||||
Copyright (c) 2013-2014 winlin
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
 | 
			
		||||
this software and associated documentation files (the "Software"), to deal in
 | 
			
		||||
| 
						 | 
				
			
			@ -463,7 +463,7 @@ if __name__ != "__main__":
 | 
			
		|||
 | 
			
		||||
# check the user options
 | 
			
		||||
if len(sys.argv) <= 1:
 | 
			
		||||
    print "SRS api callback server, Copyright (c) 2013 winlin"
 | 
			
		||||
    print "SRS api callback server, Copyright (c) 2013-2014 winlin"
 | 
			
		||||
    print "Usage: python %s <port>"%(sys.argv[0])
 | 
			
		||||
    print "    port: the port to listen at."
 | 
			
		||||
    print "For example:"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
The MIT License (MIT)
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2013 winlin
 | 
			
		||||
Copyright (c) 2013-2014 winlin
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
 | 
			
		||||
this software and associated documentation files (the "Software"), to deal in
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
The MIT License (MIT)
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2013 winlin
 | 
			
		||||
Copyright (c) 2013-2014 winlin
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
 | 
			
		||||
this software and associated documentation files (the "Software"), to deal in
 | 
			
		||||
| 
						 | 
				
			
			@ -417,38 +417,38 @@ public:
 | 
			
		|||
*/
 | 
			
		||||
enum TSPESStreamId
 | 
			
		||||
{
 | 
			
		||||
	PES_program_stream_map 		= 0b10111100, // 0xbc
 | 
			
		||||
	PES_private_stream_1 		= 0b10111101, // 0xbd
 | 
			
		||||
	PES_padding_stream			= 0b10111110, // 0xbe
 | 
			
		||||
	PES_private_stream_2		= 0b10111111, // 0xbf
 | 
			
		||||
	PES_program_stream_map 		= 0xbc, // 0b10111100
 | 
			
		||||
	PES_private_stream_1 		= 0xbd, // 0b10111101
 | 
			
		||||
	PES_padding_stream			= 0xbe, // 0b10111110
 | 
			
		||||
	PES_private_stream_2		= 0xbf, // 0b10111111
 | 
			
		||||
	
 | 
			
		||||
	// 110x xxxx
 | 
			
		||||
	// ISO/IEC 13818-3 or ISO/IEC 11172-3 or ISO/IEC 13818-7 or ISO/IEC
 | 
			
		||||
	// 14496-3 audio stream number x xxxx
 | 
			
		||||
	// (stream_id>>5)&0x07 == PES_audio_prefix
 | 
			
		||||
	PES_audio_prefix			= 0b110,
 | 
			
		||||
	PES_audio_prefix			= 0x06, // 0b110
 | 
			
		||||
	
 | 
			
		||||
	// 1110 xxxx
 | 
			
		||||
	// ITU-T Rec. H.262 | ISO/IEC 13818-2 or ISO/IEC 11172-2 or ISO/IEC
 | 
			
		||||
	// 14496-2 video stream number xxxx
 | 
			
		||||
	// (stream_id>>4)&0x0f == PES_audio_prefix
 | 
			
		||||
	PES_video_prefix			= 0b1110,
 | 
			
		||||
	PES_video_prefix			= 0x0e, // 0b1110
 | 
			
		||||
	
 | 
			
		||||
	PES_ECM_stream				= 0b11110000, // 0xf0
 | 
			
		||||
	PES_EMM_stream				= 0b11110001, // 0xf1
 | 
			
		||||
	PES_DSMCC_stream			= 0b11110010, // 0xf2
 | 
			
		||||
	PES_13522_stream			= 0b11110011, // 0xf3
 | 
			
		||||
	PES_H_222_1_type_A			= 0b11110100, // 0xf4
 | 
			
		||||
	PES_H_222_1_type_B			= 0b11110101, // 0xf5
 | 
			
		||||
	PES_H_222_1_type_C			= 0b11110110, // 0xf6
 | 
			
		||||
	PES_H_222_1_type_D			= 0b11110111, // 0xf7
 | 
			
		||||
	PES_H_222_1_type_E			= 0b11111000, // 0xf8
 | 
			
		||||
	PES_ancillary_stream		= 0b11111001, // 0xf9
 | 
			
		||||
	PES_SL_packetized_stream	= 0b11111010, // 0xfa
 | 
			
		||||
	PES_FlexMux_stream			= 0b11111011, // 0xfb
 | 
			
		||||
	PES_ECM_stream				= 0xf0, // 0b11110000
 | 
			
		||||
	PES_EMM_stream				= 0xf1, // 0b11110001
 | 
			
		||||
	PES_DSMCC_stream			= 0xf2, // 0b11110010
 | 
			
		||||
	PES_13522_stream			= 0xf3, // 0b11110011
 | 
			
		||||
	PES_H_222_1_type_A			= 0xf4, // 0b11110100
 | 
			
		||||
	PES_H_222_1_type_B			= 0xf5, // 0b11110101
 | 
			
		||||
	PES_H_222_1_type_C			= 0xf6, // 0b11110110
 | 
			
		||||
	PES_H_222_1_type_D			= 0xf7, // 0b11110111
 | 
			
		||||
	PES_H_222_1_type_E			= 0xf8, // 0b11111000
 | 
			
		||||
	PES_ancillary_stream		= 0xf9, // 0b11111001
 | 
			
		||||
	PES_SL_packetized_stream	= 0xfa, // 0b11111010
 | 
			
		||||
	PES_FlexMux_stream			= 0xfb, // 0b11111011
 | 
			
		||||
	// reserved data stream
 | 
			
		||||
	// 1111 1100 … 1111 1110
 | 
			
		||||
	PES_program_stream_directory= 0b11111111, // 0xff
 | 
			
		||||
	PES_program_stream_directory= 0xff, // 0b11111111
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,4 @@
 | 
			
		|||
<<<<<<< HEAD
 | 
			
		||||
// for bw to init url
 | 
			
		||||
// url: scheme://host:port/path?query#fragment
 | 
			
		||||
function srs_init_bwt(rtmp_url, hls_url) {
 | 
			
		||||
| 
						 | 
				
			
			@ -24,4 +25,141 @@ function srs_bwt_check_url(url) {
 | 
			
		|||
function srs_bwt_build_default_url() {
 | 
			
		||||
	var url_default = "rtmp://" + window.location.host + ":" + 1935 + "/app?key=35c9b402c12a7246868752e2878f7e0e&vhost=bandcheck.srs.com";
 | 
			
		||||
	return url_default;
 | 
			
		||||
=======
 | 
			
		||||
/**
 | 
			
		||||
* the SrsBandwidth object.
 | 
			
		||||
* @param container the html container id.
 | 
			
		||||
* @param width a float value specifies the width of bandwidth.
 | 
			
		||||
* @param height a float value specifies the height of bandwidth.
 | 
			
		||||
* @param private_object [optional] an object that used as private object, 
 | 
			
		||||
*       for example, the logic chat object which owner this bandwidth.
 | 
			
		||||
*/
 | 
			
		||||
function SrsBandwidth(container, width, height, private_object) {
 | 
			
		||||
    if (!SrsBandwidth.__id) {
 | 
			
		||||
        SrsBandwidth.__id = 100;
 | 
			
		||||
    }
 | 
			
		||||
    if (!SrsBandwidth.__bandwidths) {
 | 
			
		||||
        SrsBandwidth.__bandwidths = [];
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    SrsBandwidth.__bandwidths.push(this);
 | 
			
		||||
    
 | 
			
		||||
    this.private_object = private_object;
 | 
			
		||||
    this.container = container;
 | 
			
		||||
    this.width = width;
 | 
			
		||||
    this.height = height;
 | 
			
		||||
    this.id = SrsBandwidth.__id++;
 | 
			
		||||
    this.stream_url = null;
 | 
			
		||||
    this.callbackObj = null;
 | 
			
		||||
    
 | 
			
		||||
    // the callback set data.
 | 
			
		||||
    this.percent = 0;
 | 
			
		||||
    this.status = "";
 | 
			
		||||
}
 | 
			
		||||
/**
 | 
			
		||||
* user can set some callback, then start the bandwidth.
 | 
			
		||||
* @param url the bandwidth test url.
 | 
			
		||||
* callbacks:
 | 
			
		||||
*      on_bandwidth_ready():void, when srs bandwidth ready, user can play.
 | 
			
		||||
*      on_update_progress(percent:Number):void, when srs bandwidth update the progress.
 | 
			
		||||
*           percent:Number 100 means 100%.
 | 
			
		||||
*      on_update_status(status:String):void, when srs bandwidth update the status.
 | 
			
		||||
*           status:String the human readable status text.
 | 
			
		||||
*/
 | 
			
		||||
SrsBandwidth.prototype.start = function(url) {
 | 
			
		||||
    if (url) {
 | 
			
		||||
        this.stream_url = url;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    // embed the flash.
 | 
			
		||||
    var flashvars = {};
 | 
			
		||||
    flashvars.id = this.id;
 | 
			
		||||
    flashvars.on_bandwidth_ready = "__srs_on_bandwidth_ready";
 | 
			
		||||
    flashvars.on_update_progress = "__srs_on_update_progress";
 | 
			
		||||
    flashvars.on_update_status = "__srs_on_update_status";
 | 
			
		||||
    
 | 
			
		||||
    var params = {};
 | 
			
		||||
    params.wmode = "opaque";
 | 
			
		||||
    params.allowFullScreen = "true";
 | 
			
		||||
    params.allowScriptAccess = "always";
 | 
			
		||||
    
 | 
			
		||||
    var attributes = {};
 | 
			
		||||
    
 | 
			
		||||
    var self = this;
 | 
			
		||||
    
 | 
			
		||||
    swfobject.embedSWF(
 | 
			
		||||
        "srs_bwt/release/srs_bwt.swf?_version="+srs_get_version_code(), 
 | 
			
		||||
        this.container,
 | 
			
		||||
        this.width, this.height,
 | 
			
		||||
        "11.1.0", "js/AdobeFlashbandwidthInstall.swf",
 | 
			
		||||
        flashvars, params, attributes,
 | 
			
		||||
        function(callbackObj){
 | 
			
		||||
            self.callbackObj = callbackObj;
 | 
			
		||||
        }
 | 
			
		||||
    );
 | 
			
		||||
    
 | 
			
		||||
    return this;
 | 
			
		||||
}
 | 
			
		||||
/**
 | 
			
		||||
* play the stream.
 | 
			
		||||
* @param stream_url the url of stream, rtmp or http.
 | 
			
		||||
* @param volume the volume, 0 is mute, 1 is 100%, 2 is 200%.
 | 
			
		||||
*/
 | 
			
		||||
SrsBandwidth.prototype.check_bandwidth = function(url) {
 | 
			
		||||
    this.stop();
 | 
			
		||||
    SrsBandwidth.__bandwidths.push(this);
 | 
			
		||||
    
 | 
			
		||||
    if (url) {
 | 
			
		||||
        this.stream_url = url;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    this.callbackObj.ref.__check_bandwidth(this.stream_url);
 | 
			
		||||
}
 | 
			
		||||
SrsBandwidth.prototype.stop = function(url) {
 | 
			
		||||
    for (var i = 0; i < SrsBandwidth.__bandwidths.length; i++) {
 | 
			
		||||
        var bandwidth = SrsBandwidth.__bandwidths[i];
 | 
			
		||||
        
 | 
			
		||||
        if (bandwidth.id != this.id) {
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        SrsBandwidth.__bandwidths.splice(i, 1);
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    this.callbackObj.ref.__stop();
 | 
			
		||||
}
 | 
			
		||||
SrsBandwidth.prototype.on_bandwidth_ready = function() {
 | 
			
		||||
}
 | 
			
		||||
SrsBandwidth.prototype.on_update_progress = function(percent) {
 | 
			
		||||
}
 | 
			
		||||
SrsBandwidth.prototype.on_update_status = function(status) {
 | 
			
		||||
}
 | 
			
		||||
function __srs_find_bandwidth(id) {
 | 
			
		||||
    for (var i = 0; i < SrsBandwidth.__bandwidths.length; i++) {
 | 
			
		||||
        var bandwidth = SrsBandwidth.__bandwidths[i];
 | 
			
		||||
        
 | 
			
		||||
        if (bandwidth.id != id) {
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        return bandwidth;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    throw new Error("bandwidth not found. id=" + id);
 | 
			
		||||
}
 | 
			
		||||
function __srs_on_bandwidth_ready(id) {
 | 
			
		||||
    var bandwidth = __srs_find_bandwidth(id);
 | 
			
		||||
    bandwidth.on_bandwidth_ready();
 | 
			
		||||
}
 | 
			
		||||
function __srs_on_update_progress(id, percent) {
 | 
			
		||||
    var bandwidth = __srs_find_bandwidth(id);
 | 
			
		||||
    bandwidth.percent = percent;
 | 
			
		||||
    bandwidth.on_update_progress(percent);
 | 
			
		||||
}
 | 
			
		||||
function __srs_on_update_status(id, status) {
 | 
			
		||||
    var bandwidth = __srs_find_bandwidth(id);
 | 
			
		||||
    bandwidth.status = status;
 | 
			
		||||
    bandwidth.on_update_status(status);
 | 
			
		||||
>>>>>>> upstream/master
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -10,7 +10,7 @@ function srs_get_player_width() { return srs_get_player_modal() - 30; }
 | 
			
		|||
function srs_get_player_height() { return srs_get_player_width() * 9 / 19; }
 | 
			
		||||
 | 
			
		||||
// to query the swf anti cache.
 | 
			
		||||
function srs_get_version_code() { return "1.17"; }
 | 
			
		||||
function srs_get_version_code() { return "1.19"; }
 | 
			
		||||
// get the default vhost for players.
 | 
			
		||||
function srs_get_player_vhost() { return "players"; }
 | 
			
		||||
// the api server port, for chat room.
 | 
			
		||||
| 
						 | 
				
			
			@ -80,6 +80,18 @@ function build_default_publish_rtmp_url() {
 | 
			
		|||
        return "rtmp://" + server + ":" + port + "/" + app + "...vhost..." + vhost + "/" + stream;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
// for the bandwidth tool to init page
 | 
			
		||||
function build_default_bandwidth_rtmp_url() {
 | 
			
		||||
    var query = parse_query_string();
 | 
			
		||||
 | 
			
		||||
    var server = (query.server == undefined)? window.location.hostname:query.server;
 | 
			
		||||
    var port = (query.port == undefined)? 1935:query.port;
 | 
			
		||||
    var vhost = "bandcheck.srs.com";
 | 
			
		||||
    var app = (query.app == undefined)? "app":query.app;
 | 
			
		||||
    var key = (query.key == undefined)? "35c9b402c12a7246868752e2878f7e0e":query.key;
 | 
			
		||||
 | 
			
		||||
    return "rtmp://" + server + ":" + port + "/" + app + "?key=" + key + "&vhost=" + vhost;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@param server the ip of server. default to window.location.hostname
 | 
			
		||||
| 
						 | 
				
			
			@ -139,6 +151,15 @@ function srs_init_publish(rtmp_url) {
 | 
			
		|||
        $(rtmp_url).val(build_default_publish_rtmp_url());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
// for bw to init url
 | 
			
		||||
// url: scheme://host:port/path?query#fragment
 | 
			
		||||
function srs_init_bwt(rtmp_url, hls_url) {
 | 
			
		||||
    update_nav();
 | 
			
		||||
    
 | 
			
		||||
    if (rtmp_url) {
 | 
			
		||||
        $(rtmp_url).val(build_default_bandwidth_rtmp_url());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// check whether can republish
 | 
			
		||||
function srs_can_republish() {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -63,7 +63,7 @@ SrsPlayer.prototype.start = function(url) {
 | 
			
		|||
        "srs_player/release/srs_player.swf?_version="+srs_get_version_code(), 
 | 
			
		||||
        this.container,
 | 
			
		||||
        this.width, this.height,
 | 
			
		||||
        "11.1", "js/AdobeFlashPlayerInstall.swf",
 | 
			
		||||
        "11.1.0", "js/AdobeFlashPlayerInstall.swf",
 | 
			
		||||
        flashvars, params, attributes,
 | 
			
		||||
        function(callbackObj){
 | 
			
		||||
            self.callbackObj = callbackObj;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -73,7 +73,7 @@ SrsPublisher.prototype.start = function() {
 | 
			
		|||
        "srs_publisher/release/srs_publisher.swf?_version="+srs_get_version_code(), 
 | 
			
		||||
        this.container,
 | 
			
		||||
        this.width, this.height,
 | 
			
		||||
        "11.1", "js/AdobeFlashPlayerInstall.swf",
 | 
			
		||||
        "11.1.0", "js/AdobeFlashPlayerInstall.swf",
 | 
			
		||||
        flashvars, params, attributes,
 | 
			
		||||
        function(callbackObj){
 | 
			
		||||
            self.callbackObj = callbackObj;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,6 +13,21 @@ function padding(number, length, prefix) {
 | 
			
		|||
 | 
			
		||||
/**
 | 
			
		||||
* parse the query string to object.
 | 
			
		||||
* parse the url location object as: host(hostname:http_port), pathname(dir/filename)
 | 
			
		||||
* for example, url http://192.168.1.168:1980/ui/players.html?vhost=player.vhost.com&app=test&stream=livestream
 | 
			
		||||
* parsed to object:
 | 
			
		||||
{
 | 
			
		||||
    host        : "192.168.1.168:1980",
 | 
			
		||||
    hostname    : "192.168.1.168",
 | 
			
		||||
    http_port   : 1980,
 | 
			
		||||
    pathname    : "/ui/players.html",
 | 
			
		||||
    dir         : "/ui",
 | 
			
		||||
    filename    : "/players.html",
 | 
			
		||||
    
 | 
			
		||||
    vhost       : "player.vhost.com",
 | 
			
		||||
    app         : "test",
 | 
			
		||||
    stream      : "livestream"
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
function parse_query_string(){
 | 
			
		||||
    var obj = {};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,13 +12,18 @@
 | 
			
		|||
    <script type="text/javascript" src="js/srs.player.js"></script>
 | 
			
		||||
    <script type="text/javascript" src="js/srs.publisher.js"></script>
 | 
			
		||||
    <script type="text/javascript" src="js/srs.utility.js"></script>
 | 
			
		||||
<<<<<<< HEAD
 | 
			
		||||
    <script type="text/javascript" src="js/srs.utility.js"></script>
 | 
			
		||||
	<script type="text/javascript" src="js/srs.bandwidth.js"></script>
 | 
			
		||||
=======
 | 
			
		||||
    <script type="text/javascript" src="js/srs.bandwidth.js"></script>
 | 
			
		||||
>>>>>>> upstream/master
 | 
			
		||||
    <style>
 | 
			
		||||
        body{
 | 
			
		||||
            padding-top: 55px;
 | 
			
		||||
        }
 | 
			
		||||
        #main_modal {
 | 
			
		||||
<<<<<<< HEAD
 | 
			
		||||
            width: 600px;
 | 
			
		||||
            margin-left: -300px;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -119,6 +124,56 @@
 | 
			
		|||
                }
 | 
			
		||||
             );
 | 
			
		||||
        });	
 | 
			
		||||
=======
 | 
			
		||||
            width: 700px;
 | 
			
		||||
            margin-left: -350px;
 | 
			
		||||
        }
 | 
			
		||||
    </style>
 | 
			
		||||
    <script type="text/javascript">
 | 
			
		||||
        var bandwidth = null;
 | 
			
		||||
        
 | 
			
		||||
        $(function(){
 | 
			
		||||
            srs_init_bwt("#txt_url");
 | 
			
		||||
 | 
			
		||||
            $("#btn_play").click(on_click_play);
 | 
			
		||||
            $("#main_modal").on("show", on_start_bandwidth_test);
 | 
			
		||||
            $("#main_modal").on("hide", on_stop_bandwidth_test); 
 | 
			
		||||
        });
 | 
			
		||||
        
 | 
			
		||||
        function on_click_play() {
 | 
			
		||||
            $("#check_status").text("");
 | 
			
		||||
            $("#progress_bar").width("0%");
 | 
			
		||||
            $("#main_modal").modal({show:true, keyboard:false});
 | 
			
		||||
        }
 | 
			
		||||
        function on_start_bandwidth_test() {
 | 
			
		||||
            $("#div_container").remove();
 | 
			
		||||
 | 
			
		||||
            var div_container = $("<div/>");
 | 
			
		||||
            $(div_container).attr("id", "div_container");
 | 
			
		||||
            $("#player").append(div_container);
 | 
			
		||||
 | 
			
		||||
            var player = $("<div/>");
 | 
			
		||||
            $(player).attr("id", "player_id");
 | 
			
		||||
            $(div_container).append(player);
 | 
			
		||||
            
 | 
			
		||||
            var url = $("#txt_url").val();
 | 
			
		||||
            
 | 
			
		||||
            bandwidth = new SrsBandwidth("player_id", 100, 1);
 | 
			
		||||
            bandwidth.on_bandwidth_ready = function() {
 | 
			
		||||
                this.check_bandwidth(url);
 | 
			
		||||
            }
 | 
			
		||||
            bandwidth.on_update_progress = function(percent) {
 | 
			
		||||
                $("#progress_bar").width(percent + "%");
 | 
			
		||||
            }
 | 
			
		||||
            bandwidth.on_update_status = function(status) {
 | 
			
		||||
                $("#check_status").text(status);
 | 
			
		||||
            }
 | 
			
		||||
            bandwidth.start(url);
 | 
			
		||||
        }
 | 
			
		||||
        function on_stop_bandwidth_test() {
 | 
			
		||||
            bandwidth.stop();
 | 
			
		||||
        }
 | 
			
		||||
>>>>>>> upstream/master
 | 
			
		||||
    </script>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
| 
						 | 
				
			
			@ -141,6 +196,7 @@
 | 
			
		|||
    </div>
 | 
			
		||||
</div>
 | 
			
		||||
<div class="container">
 | 
			
		||||
<<<<<<< HEAD
 | 
			
		||||
 | 
			
		||||
     <div class="form-inline">
 | 
			
		||||
         URL:
 | 
			
		||||
| 
						 | 
				
			
			@ -164,15 +220,49 @@
 | 
			
		|||
         </div>
 | 
			
		||||
         <span id="check_status1"><font ><strong id="check_status">status</strong></font> </span>
 | 
			
		||||
 | 
			
		||||
=======
 | 
			
		||||
    <div class="alert alert-info fade in">
 | 
			
		||||
        <button type="button" class="close" data-dismiss="alert">×</button>
 | 
			
		||||
        <strong><span>Usage:</span></strong> <span>点击“开始测速”即可测带宽,最大可测试带宽由服务器限制</span>
 | 
			
		||||
    </div>
 | 
			
		||||
     <div class="form-inline">
 | 
			
		||||
         URL:
 | 
			
		||||
         <input type="text" id="txt_url" class="input-xxlarge" value=""></input>
 | 
			
		||||
         <button class="btn btn-primary" id="btn_play">开始测速</button>
 | 
			
		||||
    </div>
 | 
			
		||||
     <div id="main_modal" class="modal hide fade">
 | 
			
		||||
         <div class="modal-header">
 | 
			
		||||
             <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
 | 
			
		||||
             <h3>SRS Bandwidth Check</h3>
 | 
			
		||||
         </div>
 | 
			
		||||
         <div class="modal-body">
 | 
			
		||||
            <div class="row-fluid">
 | 
			
		||||
                <div class="span1"></div>
 | 
			
		||||
                <div class="span10">
 | 
			
		||||
                    <div class="progress progress-striped active" id="pb_buffer_bg">
 | 
			
		||||
                        <div class="bar" style="width: 0%;" id="progress_bar"></div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="span1"></div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <span id="check_status">status</span>
 | 
			
		||||
         </div>
 | 
			
		||||
>>>>>>> upstream/master
 | 
			
		||||
         <div class="modal-footer">
 | 
			
		||||
             <button class="btn btn-primary" data-dismiss="modal" aria-hidden="true"> 关闭 </button>
 | 
			
		||||
         </div>
 | 
			
		||||
     </div>
 | 
			
		||||
<<<<<<< HEAD
 | 
			
		||||
 | 
			
		||||
=======
 | 
			
		||||
>>>>>>> upstream/master
 | 
			
		||||
    <hr>
 | 
			
		||||
    <footer>
 | 
			
		||||
        <p><a href="https://github.com/winlinvip/simple-rtmp-server">SRS Team © 2013</a></p>
 | 
			
		||||
    </footer>
 | 
			
		||||
    <div class="container">
 | 
			
		||||
        <div id="player"></div>
 | 
			
		||||
    </div>
 | 
			
		||||
</div>
 | 
			
		||||
</body>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,10 @@
 | 
			
		|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
			
		||||
<actionScriptProperties analytics="false" mainApplicationPath="srs_bwt.as" projectUUID="00251213-e6a2-4dd5-a033-125cc78f843c" version="10">
 | 
			
		||||
<<<<<<< HEAD
 | 
			
		||||
  <compiler additionalCompilerArguments="-locale en_US" autoRSLOrdering="true" copyDependentFiles="true" fteInMXComponents="false" generateAccessible="true" htmlExpressInstall="true" htmlGenerate="true" htmlHistoryManagement="true" htmlPlayerVersionCheck="true" includeNetmonSwc="false" outputFolderPath="bin-debug" removeUnusedRSL="true" sourceFolderPath="src" strict="true" targetPlayerVersion="0.0.0" useApolloConfig="false" useDebugRSLSwfs="true" verifyDigests="true" warn="true">
 | 
			
		||||
=======
 | 
			
		||||
  <compiler additionalCompilerArguments="-locale en_US" autoRSLOrdering="true" copyDependentFiles="true" fteInMXComponents="false" generateAccessible="true" htmlExpressInstall="true" htmlGenerate="false" htmlHistoryManagement="true" htmlPlayerVersionCheck="true" includeNetmonSwc="false" outputFolderPath="release" removeUnusedRSL="true" sourceFolderPath="src" strict="true" targetPlayerVersion="0.0.0" useApolloConfig="false" useDebugRSLSwfs="true" verifyDigests="true" warn="true">
 | 
			
		||||
>>>>>>> upstream/master
 | 
			
		||||
    <compilerSourcePath/>
 | 
			
		||||
    <libraryPath defaultLinkType="0">
 | 
			
		||||
      <libraryPathEntry kind="4" path="">
 | 
			
		||||
| 
						 | 
				
			
			@ -17,6 +21,7 @@
 | 
			
		|||
          <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/spark.swc" useDefaultLinkType="false"/>
 | 
			
		||||
          <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/sparkskins.swc" useDefaultLinkType="false"/>
 | 
			
		||||
          <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/rpc.swc" useDefaultLinkType="false"/>
 | 
			
		||||
<<<<<<< HEAD
 | 
			
		||||
          <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/videoPlayer.swc" useDefaultLinkType="false"/>
 | 
			
		||||
          <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/qtp_air.swc" useDefaultLinkType="false"/>
 | 
			
		||||
          <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/datavisualization.swc" useDefaultLinkType="false"/>
 | 
			
		||||
| 
						 | 
				
			
			@ -24,6 +29,15 @@
 | 
			
		|||
          <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/automation.swc" useDefaultLinkType="false"/>
 | 
			
		||||
          <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/flash-integration.swc" useDefaultLinkType="false"/>
 | 
			
		||||
          <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/automation_dmv.swc" useDefaultLinkType="false"/>
 | 
			
		||||
=======
 | 
			
		||||
          <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/datavisualization.swc" useDefaultLinkType="false"/>
 | 
			
		||||
          <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/qtp_air.swc" useDefaultLinkType="false"/>
 | 
			
		||||
          <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/videoPlayer.swc" useDefaultLinkType="false"/>
 | 
			
		||||
          <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/spark_dmv.swc" useDefaultLinkType="false"/>
 | 
			
		||||
          <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/automation.swc" useDefaultLinkType="false"/>
 | 
			
		||||
          <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/automation_dmv.swc" useDefaultLinkType="false"/>
 | 
			
		||||
          <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/flash-integration.swc" useDefaultLinkType="false"/>
 | 
			
		||||
>>>>>>> upstream/master
 | 
			
		||||
          <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/automation_flashflexkit.swc" useDefaultLinkType="false"/>
 | 
			
		||||
          <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/automation_agent.swc" useDefaultLinkType="false"/>
 | 
			
		||||
        </excludedEntries>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,10 +20,22 @@ package
 | 
			
		|||
 | 
			
		||||
	public class srs_bwt extends Sprite
 | 
			
		||||
	{		
 | 
			
		||||
<<<<<<< HEAD
 | 
			
		||||
		private var connection:NetConnection;
 | 
			
		||||
		
 | 
			
		||||
		private var updatePlayProgressTimer:Timer;
 | 
			
		||||
		private var elapTimer:SrsElapsedTimer;
 | 
			
		||||
=======
 | 
			
		||||
		private var connection:NetConnection = null;
 | 
			
		||||
		
 | 
			
		||||
		private var updatePlayProgressTimer:Timer = null;
 | 
			
		||||
		private var elapTimer:SrsElapsedTimer = null;
 | 
			
		||||
        
 | 
			
		||||
        // user set id.
 | 
			
		||||
        private var js_id:String = null;
 | 
			
		||||
        // play param url.
 | 
			
		||||
        private var user_url:String = null;
 | 
			
		||||
>>>>>>> upstream/master
 | 
			
		||||
		
 | 
			
		||||
		// server ip get from server
 | 
			
		||||
		private var server_ip:String;
 | 
			
		||||
| 
						 | 
				
			
			@ -32,8 +44,13 @@ package
 | 
			
		|||
		private var stop_pub:Boolean = false;
 | 
			
		||||
		
 | 
			
		||||
		// js interface
 | 
			
		||||
<<<<<<< HEAD
 | 
			
		||||
		private var js_update_progress:String;
 | 
			
		||||
		private var js_progress_reset:String;
 | 
			
		||||
=======
 | 
			
		||||
		private var js_on_player_ready:String;
 | 
			
		||||
		private var js_update_progress:String;
 | 
			
		||||
>>>>>>> upstream/master
 | 
			
		||||
		private var js_update_status:String;
 | 
			
		||||
		
 | 
			
		||||
		private var value_progressbar:Number = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -44,10 +61,26 @@ package
 | 
			
		|||
		
 | 
			
		||||
		public function srs_bwt()
 | 
			
		||||
		{
 | 
			
		||||
<<<<<<< HEAD
 | 
			
		||||
=======
 | 
			
		||||
            if (!this.stage) {
 | 
			
		||||
                this.addEventListener(Event.ADDED_TO_STAGE, this.system_on_add_to_stage);
 | 
			
		||||
            } else {
 | 
			
		||||
                this.system_on_add_to_stage(null);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        /**
 | 
			
		||||
         * system event callback, when this control added to stage.
 | 
			
		||||
         * the main function.
 | 
			
		||||
         */
 | 
			
		||||
        private function system_on_add_to_stage(evt:Event):void {
 | 
			
		||||
>>>>>>> upstream/master
 | 
			
		||||
			this.stage.scaleMode = StageScaleMode.NO_SCALE;
 | 
			
		||||
			this.stage.align = StageAlign.TOP_LEFT;
 | 
			
		||||
			
 | 
			
		||||
			var flashvars:Object 	   = this.root.loaderInfo.parameters;
 | 
			
		||||
<<<<<<< HEAD
 | 
			
		||||
			this.js_update_progress    = flashvars.update_progress;
 | 
			
		||||
			this.js_progress_reset     = flashvars.progress_reset;
 | 
			
		||||
			this.js_update_status 	   = flashvars.update_status;
 | 
			
		||||
| 
						 | 
				
			
			@ -58,11 +91,56 @@ package
 | 
			
		|||
			myMenu.customItems.push(new ContextMenuItem("Srs 带宽测试工具 0.1", true));
 | 
			
		||||
			this.contextMenu = myMenu;
 | 
			
		||||
			
 | 
			
		||||
=======
 | 
			
		||||
            
 | 
			
		||||
            if (!flashvars.hasOwnProperty("id")) {
 | 
			
		||||
                throw new Error("must specifies the id");
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            this.js_id = flashvars.id;
 | 
			
		||||
            this.js_on_player_ready = flashvars.on_bandwidth_ready;
 | 
			
		||||
			this.js_update_progress    = flashvars.on_update_progress;
 | 
			
		||||
			this.js_update_status 	   = flashvars.on_update_status;
 | 
			
		||||
						
 | 
			
		||||
			// init context menu
 | 
			
		||||
			var myMenu:ContextMenu  = new ContextMenu();
 | 
			
		||||
			myMenu.hideBuiltInItems();
 | 
			
		||||
			myMenu.customItems.push(new ContextMenuItem("SRS 带宽测试工具", true));
 | 
			
		||||
			this.contextMenu = myMenu;
 | 
			
		||||
            
 | 
			
		||||
            flash.utils.setTimeout(this.system_on_js_ready, 0);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        /**
 | 
			
		||||
         * system callack event, when js ready, register callback for js.
 | 
			
		||||
         * the actual main function.
 | 
			
		||||
         */
 | 
			
		||||
        private function system_on_js_ready():void {
 | 
			
		||||
            if (!flash.external.ExternalInterface.available) {
 | 
			
		||||
                trace("js not ready, try later.");
 | 
			
		||||
                flash.utils.setTimeout(this.system_on_js_ready, 100);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            flash.external.ExternalInterface.addCallback("__check_bandwidth", this.js_call_check_bandwidth);
 | 
			
		||||
            flash.external.ExternalInterface.addCallback("__stop", this.js_call_stop);
 | 
			
		||||
            
 | 
			
		||||
            flash.external.ExternalInterface.call(this.js_on_player_ready, this.js_id);
 | 
			
		||||
        }
 | 
			
		||||
		
 | 
			
		||||
        private function js_call_check_bandwidth(url:String):void {
 | 
			
		||||
            js_call_stop();
 | 
			
		||||
            
 | 
			
		||||
>>>>>>> upstream/master
 | 
			
		||||
			// init connection
 | 
			
		||||
			connection = new NetConnection;
 | 
			
		||||
			connection.client = this;
 | 
			
		||||
			connection.addEventListener(NetStatusEvent.NET_STATUS, onStatus);
 | 
			
		||||
<<<<<<< HEAD
 | 
			
		||||
			connection.connect(flashvars.url);
 | 
			
		||||
=======
 | 
			
		||||
			connection.connect(url);
 | 
			
		||||
>>>>>>> upstream/master
 | 
			
		||||
			//connection.connect("rtmp://192.168.8.234:1935/app?key=35c9b402c12a7246868752e2878f7e0e&vhost=bandcheck.srs.com");
 | 
			
		||||
			
 | 
			
		||||
			// for play to update progress bar
 | 
			
		||||
| 
						 | 
				
			
			@ -73,10 +151,43 @@ package
 | 
			
		|||
			updatePlayProgressTimer.addEventListener(TimerEvent.TIMER, onTimerTimeout);
 | 
			
		||||
			updatePlayProgressTimer.start();
 | 
			
		||||
		}
 | 
			
		||||
<<<<<<< HEAD
 | 
			
		||||
		
 | 
			
		||||
		// get NetConnection NetStatusEvent
 | 
			
		||||
		public function onStatus(evt:NetStatusEvent) : void{
 | 
			
		||||
			trace(evt.info.code);			
 | 
			
		||||
=======
 | 
			
		||||
        private function js_call_stop():void {
 | 
			
		||||
            if (connection) {
 | 
			
		||||
                connection.close();
 | 
			
		||||
                connection = null;
 | 
			
		||||
            }
 | 
			
		||||
            if (updatePlayProgressTimer) {
 | 
			
		||||
                updatePlayProgressTimer.stop();
 | 
			
		||||
                updatePlayProgressTimer = null;
 | 
			
		||||
            }
 | 
			
		||||
            if (elapTimer) {
 | 
			
		||||
                elapTimer.restart();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
		
 | 
			
		||||
		// get NetConnection NetStatusEvent
 | 
			
		||||
		public function onStatus(evt:NetStatusEvent) : void{
 | 
			
		||||
			trace(evt.info.code);
 | 
			
		||||
            
 | 
			
		||||
            if (evt.info.hasOwnProperty("data") && evt.info.data) {
 | 
			
		||||
                // for context menu
 | 
			
		||||
                var customItems:Array = [new ContextMenuItem("SrsPlayer")];
 | 
			
		||||
                if (evt.info.data.hasOwnProperty("srs_server")) {
 | 
			
		||||
                    customItems.push(new ContextMenuItem("Server: " + evt.info.data.srs_server));
 | 
			
		||||
                }
 | 
			
		||||
                if (evt.info.data.hasOwnProperty("srs_primary_authors")) {
 | 
			
		||||
                    customItems.push(new ContextMenuItem("PrimaryAuthors: " + evt.info.data.srs_primary_authors));
 | 
			
		||||
                }
 | 
			
		||||
                contextMenu.customItems = customItems;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
>>>>>>> upstream/master
 | 
			
		||||
			switch(evt.info.code){
 | 
			
		||||
				case "NetConnection.Connect.Failed":
 | 
			
		||||
					updateState("连接服务器失败!");
 | 
			
		||||
| 
						 | 
				
			
			@ -92,8 +203,18 @@ package
 | 
			
		|||
					//updateState("连接已断开!");
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
<<<<<<< HEAD
 | 
			
		||||
			
 | 
			
		||||
		}
 | 
			
		||||
=======
 | 
			
		||||
		}
 | 
			
		||||
        
 | 
			
		||||
        public function onTimerTimeout(evt:TimerEvent):void
 | 
			
		||||
        {	
 | 
			
		||||
            value_progressbar = elapTimer.elapsed();
 | 
			
		||||
            updateProgess(value_progressbar, max_progressbar);
 | 
			
		||||
        }
 | 
			
		||||
>>>>>>> upstream/master
 | 
			
		||||
		
 | 
			
		||||
		/**
 | 
			
		||||
		 * NetConnection callback this function, when recv server call "onSrsBandCheckStartPlayBytes"
 | 
			
		||||
| 
						 | 
				
			
			@ -104,13 +225,18 @@ package
 | 
			
		|||
			var interval_ms:Number = evt.interval_ms;
 | 
			
		||||
			
 | 
			
		||||
			connection.call("onSrsBandCheckStartingPlayBytes", null);
 | 
			
		||||
<<<<<<< HEAD
 | 
			
		||||
			updateState("测试下行带宽(" + server_ip + ")");	
 | 
			
		||||
=======
 | 
			
		||||
			updateState("开始测试下行带宽,服务器IP:" + server_ip);
 | 
			
		||||
>>>>>>> upstream/master
 | 
			
		||||
			
 | 
			
		||||
			// we suppose play duration_ms = pub duration_ms
 | 
			
		||||
			max_progressbar = duration_ms * 2;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		public function onSrsBandCheckPlaying(evt:Object):void{
 | 
			
		||||
<<<<<<< HEAD
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
| 
						 | 
				
			
			@ -118,6 +244,8 @@ package
 | 
			
		|||
		{	
 | 
			
		||||
			value_progressbar = elapTimer.elapsed();
 | 
			
		||||
			updateProgess(value_progressbar, max_progressbar);
 | 
			
		||||
=======
 | 
			
		||||
>>>>>>> upstream/master
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		public function onSrsBandCheckStopPlayBytes(evt:Object):void{			
 | 
			
		||||
| 
						 | 
				
			
			@ -133,6 +261,10 @@ package
 | 
			
		|||
			kbps = (int(kbps * 10))/10.0;
 | 
			
		||||
 | 
			
		||||
			flash.utils.setTimeout(stopPlayTest, 0);
 | 
			
		||||
<<<<<<< HEAD
 | 
			
		||||
=======
 | 
			
		||||
            updateState("下行带宽测试完毕,服务器: " + server_ip + "," + kbps + "kbps,开始测试上行带宽。");
 | 
			
		||||
>>>>>>> upstream/master
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		private function stopPlayTest():void{
 | 
			
		||||
| 
						 | 
				
			
			@ -144,7 +276,10 @@ package
 | 
			
		|||
			var interval_ms:Number = evt.interval_ms;
 | 
			
		||||
						
 | 
			
		||||
			connection.call("onSrsBandCheckStartingPublishBytes", null);
 | 
			
		||||
<<<<<<< HEAD
 | 
			
		||||
			updateState("测试上行带宽(" + server_ip + ")");
 | 
			
		||||
=======
 | 
			
		||||
>>>>>>> upstream/master
 | 
			
		||||
			
 | 
			
		||||
			flash.utils.setTimeout(publisher, 0);
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -208,6 +343,7 @@ package
 | 
			
		|||
			connection.call("finalClientPacket", null);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
<<<<<<< HEAD
 | 
			
		||||
		public function onBWDone():void{
 | 
			
		||||
			// do nothing
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -215,13 +351,27 @@ package
 | 
			
		|||
		// update progressBar's value
 | 
			
		||||
		private function updateProgess(value:Number, maxValue:Number):void{
 | 
			
		||||
			flash.external.ExternalInterface.call(this.js_update_progress, value * 100 / maxValue + "%");
 | 
			
		||||
=======
 | 
			
		||||
		// update progressBar's value
 | 
			
		||||
		private function updateProgess(value:Number, maxValue:Number):void{
 | 
			
		||||
			flash.external.ExternalInterface.call(this.js_update_progress, this.js_id, value * 100 / maxValue);
 | 
			
		||||
>>>>>>> upstream/master
 | 
			
		||||
			trace(value + "-" + maxValue + "-" + value * 100 / maxValue + "%");
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		// update checking status
 | 
			
		||||
		private function updateState(text:String):void{
 | 
			
		||||
<<<<<<< HEAD
 | 
			
		||||
			flash.external.ExternalInterface.call(this.js_update_status, text);
 | 
			
		||||
			trace(text);
 | 
			
		||||
		}
 | 
			
		||||
=======
 | 
			
		||||
			flash.external.ExternalInterface.call(this.js_update_status, this.js_id, text);
 | 
			
		||||
			trace(text);
 | 
			
		||||
		}
 | 
			
		||||
        
 | 
			
		||||
        public function onBWDone():void{
 | 
			
		||||
        }
 | 
			
		||||
>>>>>>> upstream/master
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -305,8 +305,8 @@ package
 | 
			
		|||
                    if (evt.info.data.hasOwnProperty("srs_server")) {
 | 
			
		||||
                        customItems.push(new ContextMenuItem("Server: " + evt.info.data.srs_server));
 | 
			
		||||
                    }
 | 
			
		||||
                    if (evt.info.data.hasOwnProperty("srs_contributor")) {
 | 
			
		||||
                        customItems.push(new ContextMenuItem("Contributor: " + evt.info.data.srs_contributor));
 | 
			
		||||
                    if (evt.info.data.hasOwnProperty("srs_primary_authors")) {
 | 
			
		||||
                        customItems.push(new ContextMenuItem("PrimaryAuthors: " + evt.info.data.srs_primary_authors));
 | 
			
		||||
                    }
 | 
			
		||||
                    contextMenu.customItems = customItems;
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			@ -334,7 +334,7 @@ package
 | 
			
		|||
                if (url.indexOf("http") == 0) {
 | 
			
		||||
                    media_stream.play(url);
 | 
			
		||||
                } else {
 | 
			
		||||
                    var streamName:String = url.substr(url.lastIndexOf("/"));
 | 
			
		||||
                    var streamName:String = url.substr(url.lastIndexOf("/") + 1);
 | 
			
		||||
                    media_stream.play(streamName);
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -192,8 +192,8 @@ package
 | 
			
		|||
                    if (evt.info.data.hasOwnProperty("srs_server")) {
 | 
			
		||||
                        customItems.push(new ContextMenuItem("Server: " + evt.info.data.srs_server));
 | 
			
		||||
                    }
 | 
			
		||||
                    if (evt.info.data.hasOwnProperty("srs_contributor")) {
 | 
			
		||||
                        customItems.push(new ContextMenuItem("Contributor: " + evt.info.data.srs_contributor));
 | 
			
		||||
                    if (evt.info.data.hasOwnProperty("srs_primary_authors")) {
 | 
			
		||||
                        customItems.push(new ContextMenuItem("PrimaryAuthors: " + evt.info.data.srs_primary_authors));
 | 
			
		||||
                    }
 | 
			
		||||
                    contextMenu.customItems = customItems;
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue