Здравствуйте все!
есть такая задача - но не уверен правильно ли я реализовал это. поэтому, если можно прочти что и как я сделал - и поправьте плз если что то не так.
есть сайт, зайдя на который можно включить на прослушивание звуковой файл лекции, во время проигрывания которого в том же окне выводиься текст леции и сменяются некоторые картинки.
раньше я писал программу windows.forms - там все это прекрасно работало, но возникла необходимость создания аналога в виде веб-сайта.
итак - для прогирывания файла я создавал экземпляр проигрывателя из wmp.dll
и пользовался его функциями и методами. приведу класс наверно (извините за кривость, но по крайней мере работает)
для веба, я так, понимаю нужен ajax. но вот насчет чего я сомневаюсь - сейчас то я проигрываю с помощью проигрывателя который создается на сервере - и локально все более менее нормально, но я вот боюсь предположить как оно будет тормозить если это будет в инете.. а нужна полная оператитвнось в плане реации на нажатия кнопок.
суть вопроса - как правильнее (лучше) это реализовать?
ксати - забыл сказать - смена текста сейчас происходит по событию таймера - и читается текст из xml расположенного на сервере.
спасибо заранее!
namespace Mplayer
{
public class mplayer
{
protected WMPLib.WindowsMediaPlayer Player;
protected String url = String.Empty;
protected String pos = String.Empty;
private string act = String.Empty;
private string soundDir;
private double currentPosition;
private double duration;
private string currentPositionString;
private string durationString;
private string state;
public double CurrentPosition
{
get
{
return currentPosition;
}
set
{
currentPosition = value;
}
}
public double Duration
{
get
{
return duration;
}
set
{
duration = value;
}
}
public string CurrentPositionString
{
get
{
if (currentPositionString != "")
return currentPositionString;
else return "00:00";
}
set
{
currentPositionString = value;
}
}
public string DurationString
{
get
{
if (durationString != "")
return durationString;
else return "00:00";
}
set
{
durationString = value;
}
}
/*public string SoundDir
{
get
{
return soundDir;
}
set
{
soundDir = value;
}
}*/
public string Url
{
set
{
url = soundDir + value;
}
}
public string State
{
get
{
return state;
}
set
{
state = value;
}
}
public mplayer(String SoundDir)
{
Player = new WMPLib.WindowsMediaPlayer();
Player.PlayStateChange +=
new WMPLib._WMPOCXEvents_PlayStateChangeEventHandler(Player_PlayStateChange);
Player.MediaError +=
new WMPLib._WMPOCXEvents_MediaErrorEventHandler(Player_MediaError);
Player.PositionChange += new WMPLib._WMPOCXEvents_PositionChangeEventHandler(Player_PositionChange);
soundDir = SoundDir;
State = "stopped";
Url = "1.mp3";
}
public void UpdateCurrentPosition()
{
CurrentPosition = Player.controls.currentPosition;
CurrentPositionString = Player.controls.currentPositionString;
}
public void UpdateDuration()
{
if (Player.currentMedia != null)
{
Duration = Player.currentMedia.duration;
DurationString = Player.currentMedia.durationString;
}
}
#region Player methods
private void Player_PlayStateChange(int NewState)
{
switch (act)
{
case "play":
if (
((WMPLib.WMPPlayState)NewState == WMPLib.WMPPlayState.wmppsStopped) ||
((WMPLib.WMPPlayState)NewState == WMPLib.WMPPlayState.wmppsPaused) ||
((WMPLib.WMPPlayState)NewState == WMPLib.WMPPlayState.wmppsPlaying)
)
{
Player.controls.play();
}
break;
case "pause":
{
if ((WMPLib.WMPPlayState)NewState == WMPLib.WMPPlayState.wmppsPlaying)
{
Player.controls.pause();
}
break;
}
case "resume":
{
if ((WMPLib.WMPPlayState)NewState == WMPLib.WMPPlayState.wmppsPaused)
{
Player.controls.play();
}
break;
}
case "stop":
{
if (
((WMPLib.WMPPlayState)NewState == WMPLib.WMPPlayState.wmppsPlaying) ||
((WMPLib.WMPPlayState)NewState == WMPLib.WMPPlayState.wmppsPaused) ||
((WMPLib.WMPPlayState)NewState == WMPLib.WMPPlayState.wmppsUndefined)
)
{
Player.controls.stop();
// Player.close();
}
break;
}
}
act = String.Empty;
}
private void Player_MediaError(object pMediaObject)
{
//MessageBox.Show("Cannot play media file.");
//this.Close();
}
void Player_PositionChange(double oldPosition, double newPosition)
{
UpdateCurrentPosition();
}
public void PlayerClose()
{
Player.controls.stop();
Player.close();
}
#endregion
#region Buttons events
public void Play()
{
Play(url);
}
public void Play(String url)
{
Play(url, CurrentPosition);
}
public void Play(double pos)
{
//CurrentPosition = pos;
Play(url, pos);
}
public void Play(String url, double pos)
{
act = "play";
Player.URL = url;
if(System.IO.File.Exists(url))
{
Player_PlayStateChange((int)Player.playState);
State = "playing";
}
}
public void Kill()
{
Player.close();
}
public void Stop()
{
act = "stop";
Player_PlayStateChange((int)Player.playState);
State = "stopped";
}
public void Pause()
{
act = "pause";
Player_PlayStateChange((int)Player.playState);
State = "paused";
}
public void Resume()
{
act = "resume";
Player_PlayStateChange((int)Player.playState);
State = "playing";
}
public void FastForward()
{
if (State != "stopped") Player.controls.currentPosition += 10;
}
public void FastBackward()
{
//Thread thisThread = Thread.CurrentThread;
if (State != "stopped")
{
if (Player.controls.currentPosition > 10)
{
Player.controls.currentPosition -= 10;
}
}
}
public void FastForward(double seek)
{
Player.controls.currentPosition += seek;
}
public void FastBackward(double seek)
{
Player.controls.currentPosition -= seek;
}
#endregion
public void SetVolume(int volumeLevel)
{
Player.settings.volume = volumeLevel;
}
public void SetPlayCount(int playCount)
{
Player.settings.playCount = playCount;
}
public void SetPlayerPosition(double newPos)
{
UpdateUrl();
Player.controls.currentPosition = newPos;
}
private void UpdateUrl()
{
Player.URL = url;
}
}
}
|