From c76e4c340c60b974b02f1ca1e62533382c93d506 Mon Sep 17 00:00:00 2001 From: Jeremy West Date: Thu, 27 Jun 2013 09:38:44 -0500 Subject: [PATCH] added RTMP support. fixes #559 --- src/js/media/flash.js | 74 ++++++++++++++++++++++++++++++++++++++---- src/swf/video-js.swf | Bin 14059 -> 14329 bytes 2 files changed, 68 insertions(+), 6 deletions(-) diff --git a/src/js/media/flash.js b/src/js/media/flash.js index 4d0e5c017c..09aa105c72 100644 --- a/src/js/media/flash.js +++ b/src/js/media/flash.js @@ -64,7 +64,14 @@ vjs.Flash = vjs.MediaTechController.extend({ // If source was supplied pass as a flash var. if (source) { - flashVars['src'] = encodeURIComponent(vjs.getAbsoluteURL(source.src)); + if (source.type && vjs.Flash.isStreamingType(source.type)) { + var parts = vjs.Flash.streamToParts(source.src); + flashVars['rtmpConnection'] = encodeURIComponent(parts.connection); + flashVars['rtmpStream'] = encodeURIComponent(parts.stream); + } + else { + flashVars['src'] = encodeURIComponent(vjs.getAbsoluteURL(source.src)); + } } // Add placeholder to player div @@ -227,10 +234,16 @@ vjs.Flash.prototype.pause = function(){ }; vjs.Flash.prototype.src = function(src){ - // Make sure source URL is abosolute. - src = vjs.getAbsoluteURL(src); - - this.el_.vjs_src(src); + if (vjs.Flash.isStreamingSrc(src)) { + src = vjs.Flash.streamToParts(src); + this.setRtmpConnection(src.connection); + this.setRtmpStream(src.stream); + } + else { + // Make sure source URL is abosolute. + src = vjs.getAbsoluteURL(src); + this.el_.vjs_src(src); + } // Currently the SWF doesn't autoplay if you load a source later. // e.g. Load player w/ no source, wait 2s, set src. @@ -240,6 +253,20 @@ vjs.Flash.prototype.src = function(src){ } }; +vjs.Flash.prototype.currentSrc = function(){ + var src = this.el_.vjs_getProperty("currentSrc"); + // no src, check and see if RTMP + if (src == null) { + var connection = this.rtmpConnection(), + stream = this.rtmpStream(); + + if (connection && stream) { + src = vjs.Flash.streamFromParts(connection, stream); + } + } + return src; +}; + vjs.Flash.prototype.load = function(){ this.el_.vjs_load(); }; @@ -304,7 +331,7 @@ vjs.Flash.isSupported = function(){ }; vjs.Flash.canPlaySource = function(srcObj){ - if (srcObj.type in vjs.Flash.formats) { return 'maybe'; } + if (srcObj.type in vjs.Flash.formats || srcObj.type in vjs.Flash.streamingFormats) { return 'maybe'; } }; vjs.Flash.formats = { @@ -314,6 +341,11 @@ vjs.Flash.formats = { 'video/m4v': 'MP4' }; +vjs.Flash.streamingFormats = { + 'rtmp/mp4': 'MP4', + 'rtmp/flv': 'FLV' +}; + vjs.Flash['onReady'] = function(currSwf){ var el = vjs.el(currSwf); @@ -357,6 +389,11 @@ vjs.Flash.checkReady = function(tech){ // Trigger events from the swf on the player vjs.Flash['onEvent'] = function(swfID, eventName){ var player = vjs.el(swfID)['player']; + // ugly, but it smooths over progress and + // time control manual timer issues + if (eventName === "ended") { + player.trigger("timeupdate"); + } player.trigger(eventName); }; @@ -453,3 +490,28 @@ vjs.Flash.getEmbedCode = function(swf, flashVars, params, attributes){ return objTag + attrsString + '>' + paramsString + ''; }; + +vjs.Flash.streamFromParts = function(connection, stream) { + return connection + "," + stream; +}; + +vjs.Flash.streamToParts = function(src) { + var parts = { + connection: '', + stream: '' + }; + if (src && src.indexOf(",") !== -1) { + src = src.split(","); + parts.connection = src[0]; + parts.stream = src[1]; + } + return parts; +}; + +vjs.Flash.isStreamingType = function(srcType) { + return srcType in vjs.Flash.streamingFormats; +}; + +vjs.Flash.isStreamingSrc = function(src) { + return src && src.indexOf(",") !== -1; +}; \ No newline at end of file diff --git a/src/swf/video-js.swf b/src/swf/video-js.swf index 61a6e347f1163a96ecbdee58077eaa3e3484bfa8..d15fbc3f141003f05a6da2dbae118705e19827c9 100644 GIT binary patch literal 14329 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 literal 14059 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