Play from an arbitrary position using MediaElement

2019-09-20 15:07发布

问题:

I need to be able to play an HTML5 video (mp4 format) from any arbitrary location.

<script src="{{ STATIC_URL }}mediaelementjs/jquery.js"></script>
<script src="{{ STATIC_URL }}mediaelementjs/mediaelement-and-player.min.js"></script>
<link rel="stylesheet" href="{{ STATIC_URL }}mediaelementjs/mediaelementplayer.min.css" />

<script>
    $(document).ready(function(){$('video, audio').mediaelementplayer({
        // if the <video width> is not specified, this is the default
        defaultVideoWidth: 480,
        // if the <video height> is not specified, this is the default
        defaultVideoHeight: 270,
        // if set, overrides <video width>
        videoWidth: -1,
        // if set, overrides <video height>
        videoHeight: -1,
        // width of audio player
        audioWidth: 400,
        // height of audio player
        audioHeight: 30,
        // initial volume when the player starts
        startVolume: 0.8,
        // useful for <audio> player loops
        loop: false,
        // enables Flash and Silverlight to resize to content size
        enableAutosize: true,
        // the order of controls you want on the control bar (and other plugins below)
        features: ['playpause','progress','current','duration','tracks','volume','fullscreen'],
        // Hide controls when playing and mouse is not over the video
        alwaysShowControls: false,
        // force iPad's native controls
        iPadUseNativeControls: false,
        // force iPhone's native controls
        iPhoneUseNativeControls: false,
        // force Android's native controls
        AndroidUseNativeControls: false,
        // forces the hour marker (##:00:00)
        alwaysShowHours: false,
        // show framecount in timecode (##:00:00:00)
        showTimecodeFrameCount: false,
        // used when showTimecodeFrameCount is set to true
        framesPerSecond: 25,
        // turns keyboard support on and off for this instance
        enableKeyboard: true,
        // when this player starts, it will pause other players
        pauseOtherPlayers: true,
        // array of keyboard commands
        keyActions: [],
        // start with English automatically turned on
        startLanguage: 'en'
        }
    );});

<video id="demo" width="720" height="600" controls="controls" preload="auto">
    <!-- MP4 for Safari, IE9, iPhone, iPad, Android, and Windows Phone 7 -->
    <source type="video/mp4" src="{{ STATIC_URL }}/video/sample.m4v" />
    <!-- Optional: Add subtitles for each language -->
    <track label="English" srclang="en" kind="subtitles" type="text/vtt" src="{{ STATIC_URL }}video/sample.vtt" />
</video>

Say I want to add a link that contains the time information (e.g., 10 seconds from the beginning), and when I click on it, the video should plays starting not from the beginning, but from 10 seconds and onwards. In the following transcript. The time 00:00:10 is a link that can be clicked on. Could anyone give me some pointers on how to do this?

...

Line 158: That is a good word. 00:00:10

...

回答1:

The previous answer suggested to use currentTime(), which is a get/set method in HTML5 but only a get method in MEJS. You should rather use (MEJS') setCurrentTime(), to set the starting time so, having a button like

<button class="button" id="play">play : starts at 8 seconds</button>

... you could use this jQuery code :

var media; // we need this global variable
jQuery(document).ready(function ($) {
    $("video").mediaelementplayer({
        success: function (mediaElement, domObject) {
            media = mediaElement; // make it available for other functions
        }
    });
    $(".button").on("click", function () {
        media.setCurrentTime(8); // set starting time
        media.play(); 
    });
}); // ready

... or you could have more buttons (with different IDs) to set more actions like

$("#parentContainer").on("click", ".button", function (event) {
    if (event.target.id == "play") {
        media.setCurrentTime(8);
        media.play();
    }
    if (event.target.id == "pause") {
        media.pause();
    }
});

Note: video should be preloaded for set properties to work.



回答2:

Use html5 player play() and currentTime:

HTML:

<button id="time" onClick="playVideo()">00:00:16</button>
<video id="demo" width="30%" height="auto" controls="controls" preload="auto">
    <source type="video/mp4" src="http://clips.vorwaerts-gmbh.de/VfE_html5.mp4" />
</video>

JS:

<script type="text/javascript">
var time = document.getElementById("time").innerHTML;
var parts = time.split(':');
var seconds = (+parts[0]) * 60 * 60 + (+parts[1]) * 60 + (+parts[2]);

function playVideo() {
    var video = document.getElementById("demo");
    video.currentTime = seconds;
    video.play();
}

</script>