You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kmplayer/src/kmplayerbroadcast.h

198 lines
5.9 KiB

/* this file is part of the kmplayer application
copyright (c) 2003 koos vriezen <koos.vriezen@xs4all.nl>
this program is free software; you can redistribute it and/or
modify it under the terms of the gnu general public
license as published by the free software foundation; either
version 2 of the license, or (at your option) any later version.
this program is distributed in the hope that it will be useful,
but without any warranty; without even the implied warranty of
merchantability or fitness for a particular purpose. see the gnu
general public license for more details.
you should have received a copy of the gnu general public license
along with this program; see the file copying. if not, write to
the free software foundation, inc., 59 temple place - suite 330,
boston, ma 02110-1301, usa.
*/
#ifndef _KMPLAYER_BROADCAST_SOURCE_H_
#define _KMPLAYER_BROADCAST_SOURCE_H_
#include <list>
#include <vector>
#include <tqframe.h>
#include <tqguardedptr.h>
#include "kmplayerappsource.h"
#include "kmplayerprocess.h"
#include "kmplayerconfig.h"
class KMPlayerPrefBroadcastPage; // broadcast
class KMPlayerPrefBroadcastFormatPage; // broadcast format
class TQListBox;
class TQComboBox;
class TQLineEdit;
class TQTable;
class TQPushButton;
class KLed;
namespace KMPlayer {
class FFMpeg;
}
class KMPLAYER_NO_EXPORT FFServerSetting {
public:
KDE_NO_CDTOR_EXPORT FFServerSetting () {}
FFServerSetting (int i, const TQString & n, const TQString & f, const TQString & ac, int abr, int asr, const TQString & vc, int vbr, int q, int fr, int gs, int w, int h);
KDE_NO_CDTOR_EXPORT FFServerSetting (const TQStringList & sl) { *this = sl; }
KDE_NO_CDTOR_EXPORT ~FFServerSetting () {}
int index;
TQString name;
TQString format;
TQString audiocodec;
TQString audiobitrate;
TQString audiosamplerate;
TQString videocodec;
TQString videobitrate;
TQString quality;
TQString framerate;
TQString gopsize;
TQString width;
TQString height;
TQStringList acl;
FFServerSetting & operator = (const TQStringList &);
FFServerSetting & operator = (const FFServerSetting & fs);
const TQStringList list ();
TQString & ffconfig (TQString & buf);
};
typedef std::vector <FFServerSetting *> FFServerSettingList;
class KMPLAYER_NO_EXPORT KMPlayerPrefBroadcastPage : public TQFrame {
Q_OBJECT
public:
KMPlayerPrefBroadcastPage (TQWidget * parent);
KDE_NO_CDTOR_EXPORT ~KMPlayerPrefBroadcastPage () {}
TQLineEdit * bindaddress;
TQLineEdit * port;
TQLineEdit * maxclients;
TQLineEdit * maxbandwidth;
TQLineEdit * feedfile;
TQLineEdit * feedfilesize;
};
class KMPLAYER_NO_EXPORT KMPlayerPrefBroadcastFormatPage : public TQFrame {
Q_OBJECT
public:
KMPlayerPrefBroadcastFormatPage (TQWidget * parent, FFServerSettingList &);
KDE_NO_CDTOR_EXPORT ~KMPlayerPrefBroadcastFormatPage () {}
TQListBox * profilelist;
TQComboBox * format;
TQLineEdit * audiocodec;
TQLineEdit * audiobitrate;
TQLineEdit * audiosamplerate;
TQLineEdit * videocodec;
TQLineEdit * videobitrate;
TQLineEdit * quality;
TQLineEdit * framerate;
TQLineEdit * gopsize;
TQLineEdit * moviewidth;
TQLineEdit * movieheight;
TQLineEdit * profile;
TQPushButton * startbutton;
KLed * serverled;
KLed * feedled;
void setSettings (const FFServerSetting &);
void getSettings (FFServerSetting &);
private slots:
void slotIndexChanged (int index);
void slotItemHighlighted (int index);
void slotTextChanged (const TQString &);
void slotLoad ();
void slotSave ();
void slotDelete ();
private:
TQTable * accesslist;
TQPushButton * load;
TQPushButton * save;
TQPushButton * del;
FFServerSettingList & profiles;
};
/*
* Preference page for ffmpeg commandline arguments
*/
class KMPLAYER_NO_EXPORT KMPlayerFFServerConfig : public KMPlayer::PreferencesPage {
public:
KMPlayerFFServerConfig ();
KDE_NO_CDTOR_EXPORT ~KMPlayerFFServerConfig () {}
virtual void write (TDEConfig *);
virtual void read (TDEConfig *);
virtual void sync (bool fromUI);
virtual void prefLocation (TQString & item, TQString & icon, TQString & tab);
virtual TQFrame * prefPage (TQWidget * parent);
int ffserverport;
int maxclients;
int maxbandwidth;
TQString feedfile;
int feedfilesize;
TQString bindaddress;
private:
TQGuardedPtr <KMPlayerPrefBroadcastPage> m_configpage;
};
/*
* Preference page for ffserver
*/
class KMPLAYER_NO_EXPORT KMPlayerBroadcastConfig : public TQObject, public KMPlayer::PreferencesPage {
Q_OBJECT
public:
KMPlayerBroadcastConfig (KMPlayer::PartBase * player, KMPlayerFFServerConfig * fsc);
KDE_NO_CDTOR_EXPORT ~KMPlayerBroadcastConfig ();
virtual void write (TDEConfig *);
virtual void read (TDEConfig *);
virtual void sync (bool fromUI);
virtual void prefLocation (TQString & item, TQString & icon, TQString & tab);
virtual TQFrame * prefPage (TQWidget * parent);
bool broadcasting () const;
void stopServer ();
KDE_NO_EXPORT const TQString & serverURL () const { return m_ffserver_url; }
FFServerSetting ffserversettings;
FFServerSettingList ffserversettingprofiles;
signals:
void broadcastStarted ();
void broadcastStopped ();
private slots:
void processOutput (TDEProcess *, char *, int);
void processStopped (TDEProcess * process);
void startServer ();
void startFeed ();
void stateChange (KMPlayer::Process::State, KMPlayer::Process::State);
void sourceChanged (KMPlayer::Source *, KMPlayer::Source *);
private:
KMPlayer::PartBase * m_player;
KMPlayerFFServerConfig * m_ffserverconfig;
TQGuardedPtr <KMPlayerPrefBroadcastFormatPage> m_configpage;
KMPlayer::FFMpeg * m_ffmpeg_process;
TDEProcess * m_ffserver_process;
bool m_endserver;
TQString m_ffserver_out;
TQString m_ffserver_url;
};
#endif //_KMPLAYER_BROADCAST_SOURCE_H_