Ошибка с двумя видео NetStreams AS3
У меня есть 2 объекта NetStream, которым я пытаюсь назначить 2 видео (по одному на каждое), а затем, поскольку у меня есть 2 собственных окна, я использую stage.addChild(video);
а также secondWindow.stage.addChild(video2);
, я использую stream.play("scene1.f4v");
а также stream2.play("scene1A.f4v");
указать файлы для потоков. Сейчас я диагностирую ошибку, потому что видео не воспроизводится. Вместо этого я получаю следующую ошибку:
Ошибка типа: ошибка № 1009: невозможно получить доступ к свойству или методу пустой ссылки на объект. в Function/detectText()[/ Пользователи /Jared/ Документы /Adobe Flash Builder 4.7/InTheAirNet_MultiviewPlayer/src/InTheAirNet_MultiviewPlayer.as:124]
Линия 124 secondWindow.stage.addChild(video2);
, Это ошибка из-за проблемы с URL моего файла? У меня есть видео файлы в папке с именем assets
в структуре для моего приложения.
Я думаю, что этого достаточно, но я также включу свой код - на всякий случай:
package
{
import flash.desktop.NativeApplication;
import flash.display.NativeWindow;
import flash.display.NativeWindowInitOptions;
import flash.display.NativeWindowSystemChrome;
import flash.display.Screen;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageDisplayState;
import flash.display.StageScaleMode;
import flash.events.KeyboardEvent;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
public class InTheAirNet_MultiviewPlayer extends Sprite {
public var secondWindow:NativeWindow;
public static var nativeApplication:Object;
private var connection:NetConnection;
private var stream:NetStream;
private var stream2:NetStream;
private var video:Video;
private var video2:Video;
public function InTheAirNet_MultiviewPlayer() {
// Ouput screen sizes and positions (for debugging)
for each (var s:Screen in Screen.screens) trace(s.bounds);
// Make primary (default) window's stage go fullscreen
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
stage.color = 0xC02A2A; // red
// Create fullscreen window on second monitor (check if available first)
if (Screen.screens[1]) {
// Second window
var nwio:NativeWindowInitOptions = new NativeWindowInitOptions();
nwio.systemChrome = NativeWindowSystemChrome.NONE;
secondWindow = new NativeWindow(nwio);
secondWindow.bounds = (Screen.screens[1] as Screen).bounds;
secondWindow.activate();
// Second window's stage
secondWindow.stage.align = StageAlign.TOP_LEFT;
secondWindow.stage.scaleMode = StageScaleMode.NO_SCALE;
secondWindow.stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
secondWindow.stage.color = 0x387D19; // green
}
//Create array of scenes and their overlays
var videos:Array = [
{
primary:'scene1.f4v',
secondary:['scene1A.f4v','scene1B.f4v']
},
{
primary:'scene2.f4v',
secondary:['scene2A.f4v','scene2B.f4v']
},
{
primary:'scene3.f4v',
secondary:['scene3A.f4v','scene3B.f4v']
},
{
primary:'scene4.f4v',
secondary:['scene4A.f4v','scene4B.f4v']
},
{
primary:'scene5.f4v',
secondary:['scene5A.f4v','scene5B.f4v']
}
]
//Keyboard event listener and key assignment
stage.addEventListener(KeyboardEvent.KEY_DOWN, detectText);
function detectText(keyboardevent:KeyboardEvent):void {
if (keyboardevent.keyCode == 38) { //UP
//Previous scene
}
if (keyboardevent.keyCode == 40) { //DOWN
//Next scene
}
if (keyboardevent.keyCode == 37) { //LEFT
//Previous overlay
}
if (keyboardevent.keyCode == 39) { //RIGHT
//Next overlay
}
if (keyboardevent.keyCode == 27) { //ESCAPE
//Terminate application
NativeApplication.nativeApplication.exit();
}
//START static video objects for BETA
//Create the NetConnection
connection = new NetConnection();
//Set NetConnection to streaming mode; null specifies NO media server connection
connection.connect(null);
//Create the NetStream
stream = new NetStream(connection);
stream2 = new NetStream (connection);
//Set NetStream client to recieve certain events
stream.client = this;
stream2.client = this;
//Create video objects
var video:Video = new Video();
var video2:Video = new Video();
//Add video objects to their stages
stage.addChild(video);
secondWindow.stage.addChild(video2);
//Attach the NetStream to the video object
video.attachNetStream(stream);
video2.attachNetStream(stream2);
//Set the default buffer time to 1 second
stream.bufferTime = 1;
stream2.bufferTime = 1;
//Tell the stream to recieve the video
stream.receiveVideo(true);
stream2.receiveVideo(true);
//Play a F4V file
stream.play("scene1.f4v");
stream2.play("scene1A.f4v");
}
}
}
}
1 ответ
Я понял, что не так. У меня есть приложение, создающее второе собственное окно, если оно обнаруживает присутствие второго монитора. Однако в моем коде для создания моего NetConnection, потока и видеоголовки я вообще не использую оператор IF. Поэтому, когда я пытаюсь запустить приложение без второго монитора, нет дополнительного собственного окна для запуска видеоголовки - отсюда и ошибка.
Теперь мне нужно выяснить, почему не воспроизводится видео для первого собственного окна.