Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.01.2011, 19:31
banji вне форума Посмотреть профиль Отправить личное сообщение для banji Найти все сообщения от banji
  № 1  
Ответить с цитированием
banji

Регистрация: Jul 2010
Сообщений: 7
По умолчанию pseudo streaming

Добрый вечер!
Не могу разобраться с псевдо стримингом.

Код AS3:
package 
{
	import flash.display.MovieClip;
	import flash.events.NetStatusEvent;
	import flash.events.TimerEvent;
	import flash.media.Video;
	import flash.net.NetConnection;
	import flash.net.NetStream;
	import flash.utils.Timer;
 
	public class videocanvas extends MovieClip
	{
		public function videocanvas()
		{
			super();
			_init();
		}
 
		/**
		 * Initialize the videocanvas
		 */
		private function _init():void{
			//initialize variables
			this._netConnection = new NetConnection();
			this._netConnection.connect(null);
 
			this._netStream = new NetStream(this._netConnection);
			this._netStream.client = {};
			this._netStream.client.onMetaData = onMetaDataHandler;
			this._netStream.client.onCuePoint = onCuePointHandler;
			this._netStream.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler);
 
			this._video = new Video();
			this._video.attachNetStream(this._netStream);
			this._video.smoothing = true;
 
			this._netStream.bufferTime = 5;
			this._netStream.play("http://localhost/xxx.flv");		
 
			this._video.width = this.width;
			this._video.height = this.height;			
			this._video.x = -(this._video.width/2);
			this._video.y = -(this._video.height/2);
 
			this.addChild(this._video);
 
			this.updateDisplay = new Timer(3,10);
			this.updateDisplay.addEventListener(TimerEvent.TIMER,updateTic);
		}
 
 
		private function updateTic(event:TimerEvent){
		}
 
		/** 
		 * Metadata callback
		 * */
		public function onMetaDataHandler(metaInfo:Object){	
			this._netStream.play("http://localhost/xxx.flv?start=254389343");			
		}
 
		public function onCuePointHandler(item:Object){
			trace(1);
		}
 
		private function netStatusHandler(e:NetStatusEvent){
 
		}
 
		//variables section ============================================
 
		//NetStream 
		private var _netStream:NetStream;
		/*NetConnection*/
		private var _netConnection:NetConnection;
		/*The video variable*/
		private var _video:Video;
		/*Client variable*/
		private var _stremClient:Object;
		//timer
		private var updateDisplay:Timer;
		//meta object
		private var videoMeta:Object;
	}	
}
В функции:
Код AS3:
		public function onMetaDataHandler(metaInfo:Object){	
			this._netStream.play("http://localhost/xxx.flv?start=254389343");			
		}
в параметре start указываю байт и все работает.
Вопрос - откуда взять этот байт?
Если вставляю туда произвольный байт, то ничего не воспроизводиться. Как мне расчитать нужные байты?

Этот байт я спарсил с longtail JWPlayer.

Старый 19.01.2011, 21:50
cleptoman вне форума Посмотреть профиль Отправить личное сообщение для cleptoman Найти все сообщения от cleptoman
  № 2  
Ответить с цитированием
cleptoman
 
Аватар для cleptoman

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
насколько помню для псевдострима нужны конкретные таймы (не от балды), которые ловятся как массив в метадате (т.е. в файл должна быть заинжектена правильная метадата))
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

Старый 19.01.2011, 23:22
banji вне форума Посмотреть профиль Отправить личное сообщение для banji Найти все сообщения от banji
  № 3  
Ответить с цитированием
banji

Регистрация: Jul 2010
Сообщений: 7
в файл заинжектена карта метаданных с ключами и значениями:
-ключевые кадры
-секунды.

Но тогда не могу обратиться к ним с помощью метода seek().
Все-таки тут надо наверное что-то написать, переопределить может методы, я уже не знаю как, разбираю исходники longtail JWPlayer, но пока не могу понять.
Однако, логи nginx мне говорять что JWPlayer обращается к .flv с параметром start=254389343 или каким-либо другим в зависимости от того куда я нажму. Использовать JWPlayer не могу. Мне важно разобраться в этом вопросе. Если кто-нибудь поможет, буду признателен. Спасибо.

Старый 20.01.2011, 20:14
Mighter вне форума Посмотреть профиль Отправить личное сообщение для Mighter Найти все сообщения от Mighter
  № 4  
Ответить с цитированием
Mighter
 
Аватар для Mighter

Регистрация: Jul 2009
Сообщений: 6
Код AS3:
for (var i:int = 0; i < info['keyframes']['times'].length; i++) 
{
	if (videoStart < info['keyframes']['times'][i]) 
	{
		jumpTo = ((info['keyframes']['times'][i] - videoStart < videoStart - info['keyframes']['times'][i - 1]) ? info['keyframes']['filepositions'][i] : info['keyframes']['filepositions'][i - 1]);
		i = info['keyframes']['filepositions'].length + 1;						
	}
}
 
stream.play(path + '?start=' + jumpTo);
Что происходит?
videoStart - некое значение времени в секундах на которое мы хотим перейти.
info - объект, приходящий в onMetaDataHandler, у Вас это metaInfo
Пробегаем по всему массиву времен, содержащемуся в метаданных, и находим точку, ближайшую к нашей.
Присваиваем переменной jumpTo значение из массива info['keyframes']['filepositions'], соответствующее найденной ранее точке. Формируем запрос на проигрывание потока, в качестве параметра указываем найденное значение.
__________________
Вера в себя есть смысл жизни (с) Оскар Де Ла Хойя

Старый 21.01.2011, 11:34
banji вне форума Посмотреть профиль Отправить личное сообщение для banji Найти все сообщения от banji
  № 5  
Ответить с цитированием
banji

Регистрация: Jul 2010
Сообщений: 7
Спасибо тебе))) Вроде заработало.
Так вот оно как делается. Теперь буду знать.
Спасибо!

Создать новую тему Ответ Часовой пояс GMT +4, время: 13:26.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 13:26.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.