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

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

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

Регистрация: May 2010
Сообщений: 59
По умолчанию ffmpeg, flvtool2 и actionscript 3

Здравствуйте,
сорри если не в тот раздел,

тут вот какая незадача, на сервере хочу сделать онлайн видео
собственно конвертирую видео из wmv в flv вот такой коммандой

Код:
ffmpeg -y -i in.wmv -f flv -s 320x240 -b 700k -acodec libmp3lame -ar 22050 -ab 64k out.flv
далее заношу мета данные

Код:
flvtool2 -UP out.flv
далее сам код actionscript

Код AS3:
package
{
	import flash.display.MovieClip;
	import flash.events.*;
	import flash.media.Video;
	import flash.net.NetConnection;
	import flash.net.NetStream;
 
	public class Player extends MovieClip
	{
		private var nc:NetConnection;
		private var ns:NetStream;
		private var video:Video;
 
		public function Player()
		{
			video = new Video();
			addChild(video);
 
			nc = new NetConnection();
			nc.connect(null);
 
			ns = new NetStream(nc);
			ns.client = {};
			ns.client.onMetaData = ns_onMetaData;
			ns.client.onCuePoint = ns_onCuePoint;
			ns.play("http://site.ru/out.flv");
 
			video.attachNetStream(ns);
 
			function ns_onMetaData(item:Object):void {
				trace("metaData");
				// Resize video instance.
				video.width = item.width;
				video.height = item.height;
				// Center video instance on Stage.
				video.x = (stage.stageWidth - video.width) / 2;
				video.y = (stage.stageHeight - video.height) / 2;
			}
 
			function ns_onCuePoint(item:Object):void {
				trace("cuePoint");
				trace(item.name + "\t" + item.time);
			}
		}
	}
}
мое видео крутится с начала и не показываются точки (cuePoint), если загружаю видео, которое было в примерах

Код AS3:
ns.play("http://www.helpexamples.com/flash/video/cuepoints.flv");
то все ок

собственно вопросы, как правильно внести метаданные? надеюсь за помощь тех людей, кто на практике работал(ет) в онлайн видео

спасибо.

P.S. нужно все это для потокового воспроизвидения видео, с возможностью прокрутки не дожидаясь полной загрузки видео.

Добавлено через 2 минуты
забыл добавить, после комманды

Код:
flvtool2 -UP out.flv
выдается статистика

Код:
  audiocodecid: 2
  videodatarate: 702.466944369793
  duration: 595.4
  hasCuePoints: false
  width: 320
собственно как видно, тут hasCuePoints: false вот в этом месте проблема, но как я не пытался изменить параметры, все равно false...

Добавлено через 9 минут
накопал шелл скрипт, может кому пригодится

Код:
#!/bin/bash
#
# /usr/local/bin/cuepoints
#
# Generate an XML file used by FLVTool2 to add cuepoints to a flash file
# The XML file adds a cuepoint every ten seconds, to line up with timestamps
#
# Syntax: cuepoints [<seconds>] [<filename>]
#         cuepoints 1800 cuepoints-1800.xml
#         cuepoints 7200
#         cuepoints
#
# Options for start time and interval could be added
#
# -----------------------------------------------------------------------------

# Add a help screen
if [ "$1" = "-h" -o "$1" = "--help" -o "$1" = "help" ]
 then echo -e "\ncuepoints [<seconds>] [<filename>]"
  echo -e "\tThe cuepoints script creates an XML file used by FLVTool2 to add cuepoints to a flash file"
  echo -e "\nSyntax:"
  echo -e "\tcuepoints \t\t(defaults to 3600 seconds, or one hour, written to cuepoints.xml)"
  echo -e "\tcuepoints 1800 \t\t(create cuepoints for a half-hour file)"
  echo -e "\tcuepoints 1800 cuepoints-1800.xml\t(specify a filename)\n"
   exit
fi

echo -e "\nCreating cuepoints.xml, used by FLVTool2 to add cuepoints to a flash file \
(see \"cuepoints help\" for syntax and options)\n"

# Check for length
if [ "$1" = "" ]
 then LENGTH="3600"
 else LENGTH="$1"
fi

# Check for filename
if [ "$2" = "" ]
 then FIL="cuepoints.xml"
 else FIL="$2"
fi
 
# Write the header
echo "<?xml version=\"1.0\"?>" > $FIL
echo "<tags>" >> $FIL
echo "  <!-- navigation cue points -->" >> $FIL
 
# Write the body
for N in $(seq 0 10 $LENGTH)
do
 NAME="$( echo $(date -d "+$N seconds"\ 00:00:00 +%H:%M:%S) )"
 echo "  <metatag event=\"onCuePoint\">" >> $FIL
 echo "    <name>"$NAME"</name>" >> $FIL
 echo "    <timestamp>"$N"000</timestamp>" >> $FIL
 echo "    <type>navigation</type>" >> $FIL
 echo "  </metatag>" >> $FIL
done
 
# Write the footer
echo "</tags>" >> $FIL
  
echo -e "An XML file specifying $LENGTH timestamps has been written to $FIL\n"

echo -e "To create a flash file with these cuepoints, use \"flvtool2 -AUPt cuepoints.xml input.flv output.flv\"\n"
проверил, с помощью него отлично расставляются точки, работаю дальше!

Добавлено через 14 минут
мде... чет все равно по точкам прыгать не получается
я по выше указанному скрипту создал xml файлик

Код:
./cue.sh 600
собственно после этого

Код:
flvtool2 -AUPt cuepoints.xml in.flv out.flv
код отлично работает в плане, выводит инфу:

Код:
metaData
cuePoint
00:00:00	0
metaData
cuePoint
00:00:10	10
cuePoint
00:00:20	20
cuePoint
00:00:30	30
т.е. точки находит, но стоит сделать например

Код AS3:
			ns.play("http://site.ru/out.flv");
			ns.seek(30);
выдает ошибку

Код:
Error #2044: Необработанный NetStatusEvent:. level=error, code=NetStream.Seek.InvalidTime
	at Player()
cuePoint
00:00:00	0
metaData
как быть?

Добавлено через 17 минут
забыл добавить, на сервере стоит бекэндом nginx собранный с --with-http_flv_module
на нужный домен в конфиге nginx прописан flv

Код:
                location ~ \.flv$ {
                        root /home/user/site.ru;
                }

Старый 06.10.2010, 12:02
fljot вне форума Посмотреть профиль Отправить личное сообщение для fljot Найти все сообщения от fljot
  № 2  
Ответить с цитированием
fljot

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
CuePoints не при чём для такой навигации. Вам нужно посмотреть в сторону KeyFrames (должны лежать в MetaData, если конечно энкодер их туда положил). У них есть время и byte offset. При перемотке определяется, скачан ли нужный ключевой кадр, если до то перематывается на его время, иначе грузишь play(file.flv?параметрОткудаНачинать=время). Это всё http pseudo streaming.

Цитата:
Код AS3:
// Resize video instance.
                video.width = item.width;
                video.height = item.height;
и вот так полагаться нельзя, вдруг там нет размеров

Старый 06.10.2010, 12:38
DenverZ вне форума Посмотреть профиль Отправить личное сообщение для DenverZ Найти все сообщения от DenverZ
  № 3  
Ответить с цитированием
DenverZ

Регистрация: May 2010
Сообщений: 59
2fljot поподробней бы, где пример по конвертации посмотреть =) (строку параметров правильную)

насчет item.width, я конвертирую ролики сам, поэтому там размеры есть 100%
но в целом согласен с Вами (брал из примера adobe)

Старый 06.10.2010, 13:35
fljot вне форума Посмотреть профиль Отправить личное сообщение для fljot Найти все сообщения от fljot
  № 4  
Ответить с цитированием
fljot

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
Я полагаю http://tinyurl.com/2bx248m

Старый 06.10.2010, 13:52
DenverZ вне форума Посмотреть профиль Отправить личное сообщение для DenverZ Найти все сообщения от DenverZ
  № 5  
Ответить с цитированием
DenverZ

Регистрация: May 2010
Сообщений: 59
ну я бы не спрашивал, если бы не погуглил :-)
я уже все перерыл... поэтому и написал, именно кто на практике с этим сталкивался помочь....

Добавлено через 2 минуты
для инфы:
-sameq размер выходного flv будет в 4-5 раз больше исходника
-g 1 качество будет ниже плинтуса :-)
более того, это все равно не помогает для перемотки (она просто не работает)

тут как-то иначе надо делать

неужели никто не занимался видео онлайн и главное, смог сделать это грамотно? или жалко поделиться опытом для будущего поколения? :-) дык можно тогда и за деньги...


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

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

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


 


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


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