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

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

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

Регистрация: Apr 2008
Сообщений: 20
По умолчанию Video streaming и progressive download

Добрый день! Вот уже несколько дней пишу видео плеер для проигрывания потока с сервера (wowza media server). Столкнулся с такой проблемой. Когда проигрываю поток в "режиме stream", используя метод seek() можно бегать по видео и грузить поток с любой точки (что-то похожее на ютуб), но когда видео просто лежит на винте этого делать нельзя.
Вопрос: Можно ли проигрывать (не дожидаясь его полной загрузки) и грузить видео с любой точки которое просто лежит на винте? Если да, то как это можно реализовать?

Вот мой код, он пока не доработанный но может кому-то пригодится:

Код AS3:
import flash.events.*;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
Security.LOCAL_TRUSTED;
NetConnection.defaultObjectEncoding = ObjectEncoding.AMF0;
var streamUrl:String = "mp4:sample.mp4";
var serverUrl:String = "rtmp://localhost/vod";
var streamStatus:String;
var duration:Number;
var objInfo:Object;
var tmrUpdate:Timer;
var connected:Boolean;
var connection:NetConnection = null;
var stream:NetStream = null;
function serverConnect()
{
	connection = new NetConnection();
	connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
	connection.connect(serverUrl);
}
function streamConnect()
{
	stream = new NetStream(connection);
	stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
	stream.bufferTime = 50;
	stream.client = new Object();
	stream.client.onMetaData = function(meta:Object):void
	{
	trace("metadata: duration=" + meta.duration + " width=" + meta.width + " height=" + meta.height + " framerate=" + meta.framerate);
	duration = meta.duration
	tmrUpdate.start();
	};
	videoHolder.attachNetStream(stream);
}
function initVideoPlayer():void
{
	serverConnect();
	mcVideoControls.controlsHolder.pauseBtn.visible = false;
	mcVideoControls.controlsHolder.playBtn.visible = true;
	mcVideoControls.controlsHolder.playProgress.scaleX = 0;
	mcVideoControls.controlsHolder.downloadProgress.scaleX = 0;
	mcVideoControls.controlsHolder.playProgressThin.scaleX = 0;
	mcVideoControls.controlsHolder.downloadProgressThin.scaleX = 0;
	mcVideoControls.controlsHolder.pauseBtn.addEventListener(MouseEvent.CLICK, Pause);
	mcVideoControls.controlsHolder.playBtn.addEventListener(MouseEvent.CLICK, Play);
	mcVideoControls.controlsHolder.seekBtn.addEventListener(MouseEvent.CLICK, Seek);
	tmrUpdate = new Timer(100);
	tmrUpdate.addEventListener(TimerEvent.TIMER, updateValues);
}
initVideoPlayer();
function Play(e:MouseEvent)
{
	if (streamStatus == "pause")
	{
		stream.resume();
	}
	else
	{
		stream.play(streamUrl);
	}
	streamStatus = "play";
	mcVideoControls.controlsHolder.pauseBtn.visible = true;
	mcVideoControls.controlsHolder.playBtn.visible = false;
}
function Pause(e:MouseEvent)
{
	streamStatus = "pause";
	stream.pause();
	mcVideoControls.controlsHolder.pauseBtn.visible = false;
	mcVideoControls.controlsHolder.playBtn.visible = true;
 
}
function Seek(e:Event)
{
	stream.seek(Math.round(this.mouseX * duration / 700));
}
function updateValues(e:TimerEvent):void
{
	mcVideoControls.controlsHolder.playProgressThin.scaleX = mcVideoControls.controlsHolder.playProgress.scaleX = stream.time / duration;
	mcVideoControls.controlsHolder.downloadProgressThin.scaleX = mcVideoControls.controlsHolder.downloadProgress.scaleX = stream.bytesLoaded / stream.bytesTotal;
}
function netStatusHandler(event:NetStatusEvent):void
{
	trace("event.info.code "+event.info.code);
	switch (event.info.code)
	{
		case "NetConnection.Connect.Success" :
			streamConnect();
			break;
		case "NetStream.Play.Start" :
			break;
		case "NetStream.Play.Stop" :
			initVideoPlayer();
			break;
		case "NetStream.Play.StreamNotFound" :
			trace("Stream not found: " + streamUrl);
			break;
		case "NetStream.Publish.Start" :
			break;
		case "NetStream.Play.UnpublishNotify" :
			break;
		default :
	}
}
Спасибо!
__________________
Музыканты рождаются волей судьбы...

Старый 29.04.2011, 11:31
tema_604 вне форума Посмотреть профиль Отправить личное сообщение для tema_604 Найти все сообщения от tema_604
  № 2  
Ответить с цитированием
tema_604

Регистрация: Nov 2007
Сообщений: 16
Метод seek() работает только с RTMP потоком. В случае прогрессивного скачивания вы не можете производить поиск по незагруженным фрагментам. Если у вас Apache, вы можете скачать и установить Adobe Origin http Module - это позволит вам воспроизводить динамический поток по http протоколу, со всеми вытекающими - работающим поиском по треку.

На эту тему есть видеурок. В третьей части рассказывается про установку и настройку данного модуля.

Так же существуют, так называемые, механизмы организации псевдопотока по http. Подробнее вы можете прочитать на страницах этих проектов:
1. H264 Streaming Module для Apache
2. FLV streaming module для Lighttpd

Старый 12.05.2011, 18:28
gingerfox вне форума Посмотреть профиль Отправить личное сообщение для gingerfox Найти все сообщения от gingerfox
  № 3  
Ответить с цитированием
gingerfox

Регистрация: May 2011
Сообщений: 4
будет ли работать stream.resume(); и stream.pause(); если я отключаюсь от сервера?
если нет, то как закачать flv по rtmp и работать с ним в оффлайн?

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

Теги
download , progressive , streaming , video
Опции темы
Опции просмотра

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

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


 


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


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