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

195 lines
5.8 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 <qframe.h>
#include <qguardedptr.h>
#include "kmplayerappsource.h"
#include "kmplayerprocess.h"
#include "kmplayerconfig.h"
class KMPlayerPrefBroadcastPage; // broadcast
class KMPlayerPrefBroadcastFormatPage; // broadcast format
class QListBox;
class QComboBox;
class QLineEdit;
class QTable;
class QPushButton;
class KLed;
namespace KMPlayer {
class FFMpeg;
}
class KMPLAYER_NO_EXPORT FFServerSetting {
public:
KDE_NO_CDTOR_EXPORT FFServerSetting () {}
FFServerSetting (int i, const QString & n, const QString & f, const QString & ac, int abr, int asr, const QString & vc, int vbr, int q, int fr, int gs, int w, int h);
KDE_NO_CDTOR_EXPORT FFServerSetting (const QStringList & sl) { *this = sl; }
KDE_NO_CDTOR_EXPORT ~FFServerSetting () {}
int index;
QString name;
QString format;
QString audiocodec;
QString audiobitrate;
QString audiosamplerate;
QString videocodec;
QString videobitrate;
QString quality;
QString framerate;
QString gopsize;
QString width;
QString height;
QStringList acl;
FFServerSetting & operator = (const QStringList &);
FFServerSetting & operator = (const FFServerSetting & fs);
const QStringList list ();
QString & ffconfig (QString & buf);
};
typedef std::vector <FFServerSetting *> FFServerSettingList;
class KMPLAYER_NO_EXPORT KMPlayerPrefBroadcastPage : public QFrame {
Q_OBJECT
public:
KMPlayerPrefBroadcastPage (QWidget * parent);
KDE_NO_CDTOR_EXPORT ~KMPlayerPrefBroadcastPage () {}
QLineEdit * bindaddress;
QLineEdit * port;
QLineEdit * maxclients;
QLineEdit * maxbandwidth;
QLineEdit * feedfile;
QLineEdit * feedfilesize;
};
class KMPLAYER_NO_EXPORT KMPlayerPrefBroadcastFormatPage : public QFrame {
Q_OBJECT
public:
KMPlayerPrefBroadcastFormatPage (QWidget * parent, FFServerSettingList &);
KDE_NO_CDTOR_EXPORT ~KMPlayerPrefBroadcastFormatPage () {}
QListBox * profilelist;
QComboBox * format;
QLineEdit * audiocodec;
QLineEdit * audiobitrate;
QLineEdit * audiosamplerate;
QLineEdit * videocodec;
QLineEdit * videobitrate;
QLineEdit * quality;
QLineEdit * framerate;
QLineEdit * gopsize;
QLineEdit * moviewidth;
QLineEdit * movieheight;
QLineEdit * profile;
QPushButton * 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 QString &);
void slotLoad ();
void slotSave ();
void slotDelete ();
private:
QTable * accesslist;
QPushButton * load;
QPushButton * save;
QPushButton * 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 (KConfig *);
virtual void read (KConfig *);
virtual void sync (bool fromUI);
virtual void prefLocation (QString & item, QString & icon, QString & tab);
virtual QFrame * prefPage (QWidget * parent);
int ffserverport;
int maxclients;
int maxbandwidth;
QString feedfile;
int feedfilesize;
QString bindaddress;
private:
QGuardedPtr <KMPlayerPrefBroadcastPage> m_configpage;
};
/*
* Preference page for ffserver
*/
class KMPLAYER_NO_EXPORT KMPlayerBroadcastConfig : public QObject, public KMPlayer::PreferencesPage {
Q_OBJECT
public:
KMPlayerBroadcastConfig (KMPlayer::PartBase * player, KMPlayerFFServerConfig * fsc);
KDE_NO_CDTOR_EXPORT ~KMPlayerBroadcastConfig ();
virtual void write (KConfig *);
virtual void read (KConfig *);
virtual void sync (bool fromUI);
virtual void prefLocation (QString & item, QString & icon, QString & tab);
virtual QFrame * prefPage (QWidget * parent);
bool broadcasting () const;
void stopServer ();
KDE_NO_EXPORT const QString & serverURL () const { return m_ffserver_url; }
FFServerSetting ffserversettings;
FFServerSettingList ffserversettingprofiles;
signals:
void broadcastStarted ();
void broadcastStopped ();
private slots:
void processOutput (KProcess *, char *, int);
void processStopped (KProcess * 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;
QGuardedPtr <KMPlayerPrefBroadcastFormatPage> m_configpage;
KMPlayer::FFMpeg * m_ffmpeg_process;
KProcess * m_ffserver_process;
bool m_endserver;
QString m_ffserver_out;
QString m_ffserver_url;
};
#endif //_KMPLAYER_BROADCAST_SOURCE_H_