События воспроизведения строба медиа (OSMF)
Кто-нибудь знает, есть ли в Strobe Media Playback ( OSMF) такие события, как:
- Потоковая передача закончена
- Поток запущен
- Ошибка потоковой передачи
чтобы получить к нему доступ через JavaScript?
Я пробовал это, но не радости.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Strobe Media Playback</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script>
<script type="text/javascript">
// Create a StrobeMediaPlayback configuration
// http://mediapm.edgesuite.net/strobe/content/test/AFaerysTale_sylviaApostol_640_500_short.flv
// http://osmf.org/dev/1.6-sprint-2/hello-world-jquery-plugin.html#
var parameters =
{
src: "http://stream.flowplayer.org/bauhaus/624x260.mp4"
, autoPlay: true
, controlBarAutoHide: false
, javascriptCallbackFunction: "onJavaScriptBridgeCreated"
};
// Embed the player SWF:
swfobject.embedSWF
( "StrobeMediaPlayback.swf"
, "strobeMediaPlayback"
, 640
, 480
, "10.1.0"
, {}
, parameters
, { allowFullScreen: "true"}
, { name: "strobeMediaPlayback" }
);
function completeFunc(time, playerId) {
//var player = document.getElementById(playerId);
alert("!!!");
}
function onCurrentTimeChange(time, playerId)
{
document.getElementById("currentTime").innerHTML = time;
}
function onDurationChange(time, playerId)
{
document.getElementById("duration").innerHTML = time;
}
var player = null;
function onJavaScriptBridgeCreated(playerId)
{
if (player == null) {
player = document.getElementById(playerId);
// Add event listeners that will update the
player.addEventListener("currentTimeChange", "onCurrentTimeChange");
player.addEventListener("durationChange", "onDurationChange");
player.addEventListener("complete", "completeFunc");
// Pause/Resume the playback when we click the Play/Pause link
document.getElementById("play-pause").onclick = function(){
var state = player.getState();
if (state == "ready" || state == "paused") {
player.play2();
}
else
if (state == "playing") {
player.pause();
}
return false;
};
}
}
</script>
</head>
<body>
<div>
<div>
<span id="currentTime" /> ... </span> : <span id="duration" /> ... </span>
</div>
<a href="#" id="play-pause">Play/Pause</div>
</div>
<div id="strobeMediaPlayback">
<p>Alternative content</p>
</div>
</body>
</html>
Спасибо!
PS Как я вижу здесь, мы можем использовать переменную STATE для определения конца видео. Так что в конце видео оно переходит в "PAUSED". Можем ли мы использовать это таким образом?
ОБНОВИТЬ:
Я обнаружил, что метод onJavaScriptBridgeCreated не запускается. То же самое происходит со всеми примерами SMP.
Любая подсказка?
2 ответа
Вот оно
function changeVidSrc(url, posterUrl, id, width, height, autoplay) {
var flashvars =
{
src: url,
autoPlay: autoplay,
controlBarAutoHide: true,
poster: posterUrl,
skin: 'skinPath', //i just needed skin, remove if not needed
javascriptCallbackFunction: "onJavaScriptBridgeCreated"
};
var parameters = { allowFullScreen: "true"};
var attributes = { name: id };
// Embed the player SWF:
swfobject.embedSWF
('/swfs/StrobeMediaPlayback.swf',
id, width, height,
"10.1.0",
'',
flashvars,
parameters,
attributes
);
}
Некоторые важные детали:
1. Я не мог позволить этому отладить с Firebug правильно. я не могу понять поведение
2. прохождение name
в attributes
Объект важен для ФФ. в противном случае вызывается обратный вызов, но события не обрабатываются
я бы также посоветовал поставить глобальный var player
и функции обработчика сверху.
Поток закончен:
var onJavaScriptBridgeCreated = function (event) {
if (event === ''onJavaScriptBridgeCreated'') {
var player = document.getElementById('the id of the object tag');
var callback = function(event){console.log(event);};
//stopped
player.addEventListener("complete", "callback");
//started
player.addEventListener("playStateChange", "callback");
//error
player.addEventListener("mediaError", "callback");
}
}