我真的不熟悉Action Script 3,但我和其他语言一样。
我希望有人可以帮助我。
我正在尝试对JWplayer进行修改,以便通过PHP脚本检索rtmp流,而不是在HTML中提供。
我目前的代码如下:
function useData(event:Event):void {
var data:String = event.target.data.toString();
}
/** Load content. **/
override public function load(itm:PlaylistItem):void {
_item = itm;
_position = 0;
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, useData);
loader.load(new URLRequest("http://192.168.0.12/phpauth/play1.php"));
// Set Video or StageVideo
if(!_video) {
_video = new Video(320, 240);
_video.smoothing = true;
_video.addEventListener('renderState', renderHandler);
// Use stageVideo when available
if (_stageEnabled && RootReference.stage['stageVideos'].length > 0) {
_stage = RootReference.stage['stageVideos'][0];
_stage.viewPort = new Rectangle(0,0,320,240);
_stage.addEventListener('renderState', renderHandler);
}
attachNetStream(_stream);
}
// Load either file, streamer or manifest
if (_item.file.substr(0,4) == 'rtmp') {
// Split application and stream
var definst:Number = _item.file.indexOf('_definst_');
在加载函数中,要播放的文件名保存在_item.file中。我正在尝试调用一个php脚本,然后覆盖_item.file中的值。我已经确认正在调用php,但我不知道如何将useData函数中的数据字符串中的数据导入_item.file字符串。
任何帮助都会非常感激 - 我怀疑这是一个简单的帮助,但我缺乏AS3知识让它变得非常困难。
谢谢,
答案 0 :(得分:1)
如果从PHP返回一个简单的字符串,你应该可以使用
event.target.data;
e.g。来自PHP ... echo“hello”;
var data:String = event.target.data
您可以尝试跟踪响应以确保从PHP获得回复。 您可以在IDE中对此进行测试,也可以安装Flash Player浏览器插件的调试版本。
trace("Response from PHP: "+event.target.data);
_item.file = event.target.data;
trace("_item.file: "+_item.file);
答案 1 :(得分:1)
您的问题主要是关于如何在事件处理程序中访问局部变量。一种快速而肮脏的方法可以是将匿名函数用作处理程序,如:
loader.addEventListener(Event.COMPLETE, function(event:Event):void {
var data:String = event.target.data.toString();
_item.file = data;
});
这种方法可行,因为这个匿名函数可以按原样访问load
函数内的局部变量。但是,您需要保持谨慎,即匿名函数完全按照调用函数的使用方式使用变量。所以,假设在load
函数中有一个循环,并且在循环的每次迭代中都有_item
个变化。对于该场景,当调用load handler时,其_item
也将更改为最后分配给_item
的对象。
更清晰的OO方法可以是一个处理程序类,如:
package {
public class LoadHandler {
private var _item:PlaylistItem;
public function LoadHandler(item:PlaylistItem) {
_item = item;
}
public function loadHandler(event:Event):void {
var data:String = event.target.data.toString();
_item.file = data;
}
}
然后拥有loader.addEventListener(Event.COMPLETE, (new LoadHandler(_item)).loadHandler)
。希望有所帮助。顺便说一句,LoadHandler
可以更加通用,以获取和使用的对象数组以及回调函数。 loadHandler
函数,然后可以用该对象数组调用回调函数。