winlin

use xpsid X-Playback-Session-Id to more useful.

@@ -793,7 +793,7 @@ class SrsTsHanlder implements ISrsTsHandler @@ -793,7 +793,7 @@ class SrsTsHanlder implements ISrsTsHandler
793 packet.writeUnsignedInt(size); 793 packet.writeUnsignedInt(size);
794 794
795 if (false) { 795 if (false) {
796 - _log.info("mux flv type={0}, time={1}, size={3}", type, timestamp, dts, packet.length); 796 + _log.info("FLV: mux flv type={0}, time={1}, size={3}", type, timestamp, dts, packet.length);
797 } else { 797 } else {
798 _log.debug("mux flv type={0}, time={1}, size={3}", type, timestamp, dts, packet.length); 798 _log.debug("mux flv type={0}, time={1}, size={3}", type, timestamp, dts, packet.length);
799 } 799 }
@@ -19,6 +19,7 @@ package @@ -19,6 +19,7 @@ package
19 import flash.net.URLLoader; 19 import flash.net.URLLoader;
20 import flash.net.URLLoaderDataFormat; 20 import flash.net.URLLoaderDataFormat;
21 import flash.net.URLRequest; 21 import flash.net.URLRequest;
  22 + import flash.net.URLRequestHeader;
22 import flash.net.URLRequestMethod; 23 import flash.net.URLRequestMethod;
23 import flash.net.URLStream; 24 import flash.net.URLStream;
24 import flash.net.URLVariables; 25 import flash.net.URLVariables;
@@ -47,6 +48,26 @@ package @@ -47,6 +48,26 @@ package
47 48
48 private var owner:srs_player = null; 49 private var owner:srs_player = null;
49 private var hls:Hls = null; // parse m3u8 and ts 50 private var hls:Hls = null; // parse m3u8 and ts
  51 +
  52 + // the uuid similar to Safari, to identify this play session.
  53 + // @see https://github.com/winlinvip/srs-plus/blob/bms/trunk/src/app/srs_app_http_stream.cpp#L45
  54 + public var XPlaybackSessionId:String = createRandomIdentifier(32);
  55 + private function createRandomIdentifier(length:uint, radix:uint = 61):String {
  56 + var characters:Array = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  57 + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q',
  58 + 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
  59 + 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
  60 + 'z');
  61 + var id:Array = new Array();
  62 + radix = (radix > 61) ? 61 : radix;
  63 + while (length--) {
  64 + id.push(characters[randomIntegerWithinRange(0, radix)]);
  65 + }
  66 + return id.join('');
  67 + }
  68 + private function randomIntegerWithinRange(min:int, max:int):int {
  69 + return Math.floor(Math.random() * (1 + max - min) + min);
  70 + }
50 71
51 // callback for hls. 72 // callback for hls.
52 public var flvHeader:ByteArray = null; 73 public var flvHeader:ByteArray = null;
@@ -68,6 +89,10 @@ package @@ -68,6 +89,10 @@ package
68 return; 89 return;
69 } 90 }
70 91
  92 + if (!flvHeader) {
  93 + return;
  94 + }
  95 +
71 var s:NetStream = media_stream; 96 var s:NetStream = media_stream;
72 s.appendBytes(flv); 97 s.appendBytes(flv);
73 log("FLV: ts " + uri + " parsed to flv " + flv.length + " bytes"); 98 log("FLV: ts " + uri + " parsed to flv " + flv.length + " bytes");
@@ -265,8 +290,14 @@ package @@ -265,8 +290,14 @@ package
265 completed(stream); 290 completed(stream);
266 }); 291 });
267 292
  293 + // we set to the query.
  294 + uri += ((uri.indexOf("?") == -1)? "?":"&") + "shp_xpsid=" + XPlaybackSessionId;
  295 + var r:URLRequest = new URLRequest(uri);
  296 + // seems flash not allow set this header.
  297 + r.requestHeaders.push(new URLRequestHeader("X-Playback-Session-Id", XPlaybackSessionId));
  298 +
268 log("start download " + uri); 299 log("start download " + uri);
269 - url.load(new URLRequest(uri)); 300 + url.load(r);
270 } 301 }
271 302
272 private function log(msg:String):void { 303 private function log(msg:String):void {