diff --git a/js/reveal.js b/js/reveal.js
index 524678d725efb699c3408949b4e2bb91e6d52dcf..e910682a5b84cf0eb867cb26cec4aead479a1449 100644
--- a/js/reveal.js
+++ b/js/reveal.js
@@ -2172,11 +2172,29 @@ var Reveal = (function(){
 	 */
 	function loadSlide( slide ) {
 
-		toArray( slide.querySelectorAll( 'img[data-src]' ) ).forEach( function( element ) {
+		// Media elements with data-src attributes
+		toArray( slide.querySelectorAll( 'img[data-src], video[data-src]' ) ).forEach( function( element ) {
 			element.setAttribute( 'src', element.getAttribute( 'data-src' ) );
 			element.removeAttribute( 'data-src' );
 		} );
 
+		// Video elements with multiple <source>s
+		toArray( slide.querySelectorAll( 'video' ) ).forEach( function( video ) {
+			var sources = 0;
+
+			toArray( slide.querySelectorAll( 'source[data-src]' ) ).forEach( function( source ) {
+				source.setAttribute( 'src', source.getAttribute( 'data-src' ) );
+				source.removeAttribute( 'data-src' );
+				sources += 1;
+			} );
+
+			// If we rewrote sources for this video, we need to manually
+			// tell it to load from its new origin
+			if( sources > 0 ) {
+				video.load();
+			}
+		} );
+
 	}
 
 	/**