PDA

Просмотр полной версии : FLV плеер


DRAGOnoid
30.10.2007, 09:15
странно что на AS3 никто ничего про это не говорит.
мне тут задача недавно встала создать плеер FLV.

к сожалению так исторически сложилось я с FLV никогда не сталкивался вообще. так что не хочу щас ворошить двойку и попробовать сделать сразу на тройке.

первое что дал F1 это FLVPlayback - но как увидел импорт сразу понял что это не то, так как он требует библиотечных элементов.

единственное что нашёл подходящее это скудный Class Video.
и там здравствуй сново NetStream.

используя пример
package {
import flash.display.Sprite;
import flash.events.*;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;

public class VideoExample extends Sprite {
private var videoURL:String = "Video.flv";
private var connection:NetConnection;
private var stream:NetStream;

public function VideoExample() {
connection = new NetConnection();
connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
connection.connect(null);
}

private function netStatusHandler(event:NetStatusEvent):void {
switch (event.info.code) {
case "NetConnection.Connect.Success":
connectStream();
break;
case "NetStream.Play.StreamNotFound":
trace("Unable to locate video: " + videoURL);
break;
}
}

private function connectStream():void {
var stream:NetStream = new NetStream(connection);
stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
stream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
var video:Video = new Video();
video.attachNetStream(stream);
stream.play(videoURL);
addChild(video);
}

private function securityErrorHandler(event:SecurityErrorEvent):void {
trace("securityErrorHandler: " + event);
}

private function asyncErrorHandler(event:AsyncErrorEvent):void {
// ignore AsyncErrorEvent events.
}
}
}

Я хотел добавить ещё функцию статистики сколько загружено (стандартый статистик бар).

А ещё даже где то видел что тыкнув на не загруженную часть ролика - можно начать грузить заново именно с этого момента.

певое пытался решить поставив 2 дополнительных лисенера на NetStream, но это не помогло - лисенеры глухо молчат =(

в общем посоветуйте пожалуйста кто что знает по этой теме и сталкивался уже.

etc
30.10.2007, 10:25
Видео с заданной позиции грузить можно только если сервер такое умеет.

DRAGOnoid
30.10.2007, 11:41
я тоже так думал но потом наткнулся что где то писали что вот как раз за счёт потока можно качать хоть из середины.. ладно это позже сам покопаю. а как на счёт статистики загрузки? т.е. как мне узнать колличество всего и колличество загруженных байт?

ALiEN_
30.10.2007, 12:57
Играть с середины можно, если ты используешь стандартный адобовский сервер, либо используешь любой другой сервер, который может отдать тебе поток с любого момента. В любом случае есть хитрость - при запросе, необходимо четко попадать на кадр, иначе поток играться не станет.

LinuxVideo
31.10.2007, 12:36
стандартный адобовский сервер, либо используешь любой другой сервер, который может отдать тебе поток с любого моментаО каком сервере речь? RTMP или HTTP? Если про http и нужна только поддержка ranges, то она есть практически на любом сервере. Если можно, то дайте пример кода с доступом к произвольной части FLV.

необходимо четко попадать на кадр, иначе поток играться не станет.А эти смещения можно как-то заранее определить? Т.е. сделать индекс и бегать по нему?

ALiEN_
31.10.2007, 12:49
Адобовский потоковый FCS FMS, а сам протокол не важен, хоть rtmpts =)))) или любой поддерживающий ranges - да.

Эти смещения определяются при кодировании видео в FLV, и называются они metadata. В них пихают обычно ключевые фремы, по смешению и по времени - т.е. два массива.

LinuxVideo
31.10.2007, 13:02
или любой поддерживающий ranges - да.Сейчас сложнее найти сервер, который их не поддерживает :)

при кодировании видео в FLVПоподробнее. У меня видео кодируется "на лету" через ffmpeg, в гугле нашел упоминания только про cue points и их расстановку через flvtool. А как выдрать индексы (смещения) ключевых кадров - нет. Если можно, то поподробнее.

smartan
31.10.2007, 18:06
Я хотел добавить ещё функцию статистики
читай хелп там всё есть!!!!

Если можно, то дайте пример кода с доступом к произвольной части FLV
__etc уже сказал что тут не в коде дело а в серваке!!!!!!

необходимо четко попадать на кадр, иначе поток играться не станет
странно а у меня ничего никуда не попадало, но все играло (с опр. места конечно)

называются они metadata :)

И вообше когда люди которые с флешаком знакомы с 2004 года (судя по дате регистрации), задают вопросы:
как мне узнать колличество всего и колличество загруженных байт?
мне становится грустно :eek: .....

LinuxVideo
31.10.2007, 18:44
уже сказал что тут не в коде дело а в серваке!!!Дык вроде выяснили, что ему http хватит, а ranges есть практически везде. Или я чего-то не понимаю?

etc
31.10.2007, 19:39
LinuxVideo, каким образом, по-вашему, флеш отправит ranges?

DRAGOnoid
22.11.2007, 19:24
я всё перерыл что мог но так и не нашёл способа узнать сколько в видео проиграно и как задать позицию с какого места играть.

подскажите пожалуйста.

7thsky™
22.11.2007, 20:44
NetStream#time
NetStream#bytesLoaded
NetStream#bytesTotal
NetStream#play

Эткрой хелп и начни читать.


2LinuxVideo:

через PHP - http://www.flashcomguru.com/index.cfm/2007/8/14/phpstreaming-update
модуль к apache - http://journal.paul.querna.org/articles/2006/07/11/mod_flvx/

DRAGOnoid
24.04.2008, 14:22
скажите пожалуйста как можно бороться с неточностью перемотки.
перемотку я задаю кодом

myNetStream.seek( totalTime * position); // где position - число от 0 до 1, а totalTime - полное время ролика

// получаю коэффициент проигранного
return myNetStream.time/totalTime;


так судя по скролу видео прыгает не точно, а с большим отрымов вправо
(если не понятно о чём реч - могу исходник выложить)

SexyClauz
24.04.2008, 22:38
У меня видео кодируется "на лету" через ffmpeg
Можно подробнее, а куда отдаётся из ффмпега? Как вещается?

silin
24.04.2008, 22:53
скажите пожалуйста как можно бороться с неточностью перемотки
seek(offset) двигает воспроизведние на кейфрейм, ближайший к offset (в секундах)
чем больше кейфреймов, тем точнее будешь попадать..

DRAGOnoid
24.04.2008, 23:08
а как мне повысить это колличество кейфреймов, и чем грозит это повышение (значительным или незначительным увеличением объёма?)

и вот вопрос а можно ли узнать позиционирование кейфреймов как нить программно?

silin
24.04.2008, 23:19
http://www.google.ru/search?aq=f&complete=1&hl=ru&newwindow=1&client=firefox-a&rls=org.mozilla%3Aru%3Aofficial&hs=ugQ&q=flv+encoding+keyframes&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=

DRAGOnoid
24.04.2008, 23:24
спасибо почитаю, как раз нашёл эту вкладку во флеш видео энкодере, могу расслабиться и сказать заказчику пусть правильно жмёт FLV ;-)