as3 — Как остановить видео и отсоединить NetStream

#actionscript-3 #video #streaming

#actionscript-3 #Видео #потоковая передача

Вопрос:

У меня есть потоковое видео с сервера, и позже я хочу добавить еще одно рядом. все хорошо, я это сделал. Теперь моя проблема возникает, когда я хочу удалить видео. Мне удается удалить его с экрана, но я слышу, что видео все еще воспроизводится в фоновом режиме. Итак, как я могу остановить потоковую передачу этого видео? Вот мой код для настройки видео:

 ns = new NetStream(connection);
ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
ns.play(item[1].toString()   ".flv");
video = new Video();
video.attachNetStream( ns );
video.width = 160;
video.height = 120;
videoWrapper = new UIComponent();
videoWrapper.addChild( video );
videos.addElement( videoWrapper );
  

и вот для удаления

 videos.removeElement(myVideos[p][1]); // myVideos[p][1] is a reference of videoWrapper
  

Ответ №1:

Вы можете разорвать соединение с помощью вызова video.attachNetStream(null) или закрыть поток с помощью ns.close();

Вероятно, лучше сделать и то, и другое.

Комментарии:

1. хорошо, я не могу сказать, что video.attachNetStream (null) вообще не работает, он работает, останавливает видео, но только при запуске любого другого видео. я работаю на локальном хостинге, поэтому, возможно, видео уже загружено, и поэтому оно все еще воспроизводится. В любом случае, я не уверен, как поставить thaht ns.close(). У меня есть только ссылка на videoWrapper, поэтому я взял видео из этой ссылки с помощью getChildAt(0), но как теперь получить «ns»?

2. Название ns происходит из вашего собственного кода: ns = new NetStream(connection); Вы должны сохранить этот экземпляр. Я не думаю, что вы можете получить это из экземпляра video.

3. Мне также любопытно; почему вы добавляете компонент с видеоэкраном в нем на видеоэкран?

4. да, это сработало, я просто добавил ссылку на ns в массив и вызвал ее из функции, в которой я закрываю видео. Теперь о вашем вопросе, я не уверен, правильно ли я понимаю, потому что мои знания об as3 очень минимальны. не могли бы вы немного объяснить? В любом случае, я добавляю видео в videoWrapper, потому что видео не отображается, а затем videoWrapper переходит к видео, каков идентификатор группы, созданной в mxml.

5. В основном последняя строка выглядит сомнительной videos.addElement( videoWrapper ); . Похоже, что это должно создать циклическую зависимость (например, попытка показать obj1, который пытается показать obj2, который, в свою очередь, пытается показать obj1 и т.д.). Однако я не очень хорошо знаком с flex, поэтому могу ошибаться.

Ответ №2:

На обычном объекте video не вызывайте attachNetStream(null) , потому что AS3, позже не позволит очистить последний видеокадр из видео .clear() , который выглядит как ошибка. Используйте ns.close() , затем используйте vid.clear() , чтобы объект video снова мог быть прозрачным.

На StageVideo это отличается: вы можете вызвать vid.attachNetStream(null) , он также удалит последний кадр из stagevideo. Будьте осторожны, это не остановит само воспроизведение. Вы должны вызвать ns.close();