• 0

[Javascript] Changing VideoJS url src on button click?


Question

I found the following code which is what I'm looking for but I need to modify it to work with dynamic urls which I'll fetch with php. How can I make that work, instead of loading local video files?

 

http://jsfiddle.net/swinginsam/NWbUG/

 

Ideally I want just a <a href> link to click which multiple videos. I'm not very good with javascript.

 

I tried changing 

$("video:nth-child(1)").attr("src",$content_path+$target+".mp4");

 

to 

 

$("video:nth-child(1)").attr("src","http://url1.mp4");
$("video:nth-child(1)").attr("src","http://url2.mp4");
$("video:nth-child(1)").attr("src","http://url3.mp4");
 
but it just loads the same video...

12 answers to this question

Recommended Posts

  • 0
  On 13/12/2013 at 01:03, DPyro said:

 

I found the following code which is what I'm looking for but I need to modify it to work with dynamic urls which I'll fetch with php. How can I make that work, instead of loading local video files?

 

http://jsfiddle.net/swinginsam/NWbUG/

 

Ideally I want just a <a href> link to click which multiple videos. I'm not very good with javascript.

 

I tried changing 

$("video:nth-child(1)").attr("src",$content_path+$target+".mp4");

 

to 

 

$("video:nth-child(1)").attr("src","http://url1.mp4");
$("video:nth-child(1)").attr("src","http://url2.mp4");
$("video:nth-child(1)").attr("src","http://url3.mp4");
 
but it just loads the same video...

 

 

I don't know why, but they are just assigning the same attribute src 3 times in a row in that example. The .webm one is the one that finally gets played in the end.

 

Anyways it works as follows: a click event handler is registered to occur if a button is clicked. Depending on which button you click a different movie is selected.

 

//Click event handler
$("input[type=button]").click(function() { ... }


//Video selector
var $target         = "testvid_"+$(this).attr("rel");


//Add the movie to the video element.
$("video:nth-child(1)").attr("src",$content_path+$target+".webm");
  • 0
  On 13/12/2013 at 03:58, DPyro said:

Ah, ok. How do I dynamically change the target variable with a different url.

 

Make the click button have some sort of unique id that is generated using php i.e. rel="http://myurl.com"

  • 0
  On 13/12/2013 at 04:04, snaphat (Myles Landwehr) said:

Make the click button have some sort of unique id that is generated using php i.e. rel="http://myurl.com"

 

Not quite sure what you mean...I tried this.

 

var $target         =  $(this).attr("rel");

 

$("video:nth-child(1)").attr("src",$target);

 

<input rel="http://url1.mp4" type="button" value="load video 1">

  • 0
  On 13/12/2013 at 04:54, DPyro said:

Not quite sure what you mean...I tried this.

 

var $target         =  $(this).attr("rel");

 

$("video:nth-child(1)").attr("src",$target);

 

<input rel="http://url1.mp4" type="button" value="load video 1">

 

That is what I meant: the PHP should be generating the value of rel and you should be assigning the value to the video element's src attribute upon click.

  • 0
  On 13/12/2013 at 05:27, snaphat (Myles Landwehr) said:

That is what I meant: the PHP should be generating the value of rel and you should be assigning the value to the video element's src attribute upon click.

 

I can't get it to work?

<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="content-type" content="text/html; charset=UTF-8">
	<title>Dynamic Loading w/ video.js - jsFiddle demo by swinginsam</title>

	<script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js' video.js ></script>
	<link rel="stylesheet" type="text/css" href="http://vjs.zencdn.net/c/video-js.css">
	<script type='text/javascript' src="https://vjs.zencdn.net/c/video.js"></script>


	<style type='text/css'>
		.wrap            { margin:30px auto 10px; text-align:center }
		.container       { width:640px; height:360px; border:5px solid #ccc }
		p                { font: 10px/1.0em 'Helvetica',sans-serif; margin:20px }
	</style>

	<script type='text/javascript'>//<![CDATA[
	$(function(){
	var $target         = $(this).attr("rel");
	$("input[type=button]").click(function() {
		var $vid_obj        = _V_("div_video");

		// hide the current loaded poster
		$("img.vjs-poster").hide();

		$vid_obj.ready(function() {
		  // hide the video UI
		  $("#div_video_html5_api").hide();
		  // and stop it from playing
		  $vid_obj.pause();
		  // assign the targeted videos to the source nodes
		  $("video:nth-child(1)").attr("src",$target);
		  // reset the UI states
		  $(".vjs-big-play-button").show();
		  $("#div_video").removeClass("vjs-playing").addClass("vjs-paused");
		  // load the new sources
		  $vid_obj.load();
		  $("#div_video_html5_api").show();
		});
	});

	$("input[rel='01']").click();

	});//]]>

	</script>
</head>
<body>
	<section class="container wrap">
		<video id="div_video" class="video-js vjs-default-skin" controls preload="auto" width="640" height="360" data-setup="{}">
			<source src=""  type="video/mp4">
		</video>
	</section>

	<div class="wrap">
		<input rel="http://static.bouncingminds.com/ads/5secs/baileys_5sec.mp4" type="button" value="load video 1">
		<input rel="http://static.bouncingminds.com/ads/15secs/dogs_600.mp4" type="button" value="load video 2">
		<input rel="http://static.bouncingminds.com/ads/30secs/sexy_subaru_carwash.mp4" type="button" value="load video 3">
	</div>
</body>
</html>
  • 0
  On 13/12/2013 at 06:18, snaphat (Myles Landwehr) said:

http://jsfiddle.net/35VR2/1/ -- works for me on this example after I did those modifications

 

Weird, something in my code wasn't working right...only thing left is I need to change the mime type for certain videos. (type='application/x-mpegURL')

  • 0
  On 13/12/2013 at 06:28, DPyro said:

Weird, something in my code wasn't working right...only thing left is I need to change the mime type for certain videos. (type='application/x-mpegURL')

 

Figure it out? It definitely has to be something in the code or configuration

  • 0

So apparently desktop browsers don't support m3u8, yet I'm able to watch live streams on PS4 and ipod touch.  :s Still having issues with the ipod touch however using mimetype video/mp4. It plays both mp4 and m3u8 but only if I reload the page. ie. If I watch mp4 videos first the m3u8 stream won't work and need to reload, and vice versa.

  • 0
  On 13/12/2013 at 23:48, DPyro said:

So apparently desktop browsers don't support m3u8, yet I'm able to watch live streams on PS4 and ipod touch.  :s Still having issues with the ipod touch however using mimetype video/mp4. It plays both mp4 and m3u8 but only if I reload the page. ie. If I watch mp4 videos first the m3u8 stream won't work and need to reload, and vice versa.

 

It probably initializes something when you play the video the first time. There might be code you can do to reinitialize things from scratch upon click, but I dunno.

  • 0
  On 13/12/2013 at 23:52, snaphat (Myles Landwehr) said:

It probably initializes something when you play the video the first time. There might be code you can do to reinitialize things from scratch upon click, but I dunno.

 

It's weird because I don't have this problem on PS4, both types work initially without needing to reload the page or switch mimetype. I know a way to fix it by specifying the right mimetype for each filetype but need change it dynamically somehow.

 

EDIT: Actually, when I click the buttons it launches the video on ipod without needing to hit play so I dunno what it's doing. The error I get on ipod when trying a different filetype is 'The operation could not be completed'.

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Popular Now

  • Posts

    • Meta says you'll soon be getting ads on WhatsApp by David Uzondu No, the headline is not clickbait. WhatsApp is getting ads. For years, the messaging app has been the golden child, bought by Meta for $19 billion back in 2014 and left mostly untouched. That long, ad-free holiday is officially over. Your private chats with friends and family are safe for now, as the ads will not appear there. Instead, they will be sandwiched between Status updates, just like you already see them in Instagram Stories. Apart from ads in Statuses, Meta is also letting people pay to promote their Channels. This means businesses and creators can pay to get their broadcast channels discovered by more users. A few will even be able to charge for subscriptions to their channels for exclusive content. The company says it will not take a fee from these subscriptions at first, but that is probably not going to last forever. Meta is a business, after all, not a charity. Meta has tried to calm everyone down by saying your personal chats and calls will remain encrypted and untouched. The company claims it only uses general information like your country and language, plus the channels you follow, to figure out which ads to show you. However, if you have linked your WhatsApp to Meta's Account Center, then your ad preferences from Facebook and Instagram will follow you. This entire plan certainly excited Wall Street. After the news broke, Meta's stock climbed 2.8% in pre-market trading, as investors salivated over the prospect of finally monetizing WhatsApp's 2 billion+ users. Ads in messaging apps are not new at all. Take Telegram, for example. The app shows sponsored messages in large public channels, but it also gives users a way out. For a monthly fee, you can get Telegram Premium, and all those ads disappear (plus a bunch of advanced paid features). Maybe, in the future, WhatsApp will offer a similar premium service for people willing to pay to escape the ads.
    • To say that it's build in America, they can build it somewhere else and just put the back cover on the smartphone in America et put it in a box. On some country they put just the last screw to finish the product
    • "The T1 phone will be designed and built in America." I was looking for this information and wasn't disappointed! 👍🏻
  • Recent Achievements

    • Week One Done
      patrickft456 earned a badge
      Week One Done
    • One Month Later
      patrickft456 earned a badge
      One Month Later
    • One Month Later
      Jdoe25 earned a badge
      One Month Later
    • Explorer
      Legend20 went up a rank
      Explorer
    • One Month Later
      jezzzy earned a badge
      One Month Later
  • Popular Contributors

    1. 1
      +primortal
      639
    2. 2
      ATLien_0
      281
    3. 3
      +FloatingFatMan
      172
    4. 4
      Michael Scrip
      156
    5. 5
      Steven P.
      129
  • Tell a friend

    Love Neowin? Tell a friend!