|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Apr 2008
Сообщений: 20
|
Video streaming и progressive download
Добрый день! Вот уже несколько дней пишу видео плеер для проигрывания потока с сервера (wowza media server). Столкнулся с такой проблемой. Когда проигрываю поток в "режиме stream", используя метод seek() можно бегать по видео и грузить поток с любой точки (что-то похожее на ютуб), но когда видео просто лежит на винте этого делать нельзя.
Вопрос: Можно ли проигрывать (не дожидаясь его полной загрузки) и грузить видео с любой точки которое просто лежит на винте? Если да, то как это можно реализовать? Вот мой код, он пока не доработанный но может кому-то пригодится: 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 : } }
__________________
Музыканты рождаются волей судьбы... |
|
|||||
Регистрация: Nov 2007
Сообщений: 16
|
Метод seek() работает только с RTMP потоком. В случае прогрессивного скачивания вы не можете производить поиск по незагруженным фрагментам. Если у вас Apache, вы можете скачать и установить Adobe Origin http Module - это позволит вам воспроизводить динамический поток по http протоколу, со всеми вытекающими - работающим поиском по треку.
На эту тему есть видеурок. В третьей части рассказывается про установку и настройку данного модуля. Так же существуют, так называемые, механизмы организации псевдопотока по http. Подробнее вы можете прочитать на страницах этих проектов: 1. H264 Streaming Module для Apache 2. FLV streaming module для Lighttpd
__________________
Бесплатные видеоуроки FMS |
|
|||||
Регистрация: May 2011
Сообщений: 4
|
будет ли работать stream.resume(); и stream.pause(); если я отключаюсь от сервера?
если нет, то как закачать flv по rtmp и работать с ним в оффлайн? |
Часовой пояс GMT +4, время: 07:03. |
|
« Предыдущая тема | Следующая тема » |
Теги |
download , progressive , streaming , video |
|
|