Base class for custom media data streams.
Implement this class to provide a custom data stream to the backend. The class supports both, the push and the pull model.
Push:
PushStream::PushStream(QObject *parent) : AbstractMediaStream(parent), m_timer(new QTimer(this)) { setStreamSize(getMediaStreamSize()); connect(m_timer, SIGNAL(timeout()), SLOT(moreData())); m_timer->setInterval(0); } void PushStream::moreData() { const QByteArray data = getMediaData(); if (data.isEmpty()) { endOfData(); } else { writeData(data); } } void PushStream::needData() { m_timer->start(); moreData(); } void PushStream::enoughData() { m_timer->stop(); }
Pull:
PullStream::PullStream(QObject *parent) : AbstractMediaStream(parent) { setStreamSize(getMediaStreamSize()); } void PullStream::needData() { const QByteArray data = getMediaData(); if (data.isEmpty()) { endOfData(); } else { writeData(data); } }
Definition at line 103 of file abstractmediastream.h.
#include <Phonon/AbstractMediaStream>

Public Member Functions |
|
| virtual | ~AbstractMediaStream () |
Protected Member Functions |
|
| AbstractMediaStream (QObject *parent=0) | |
Constructs an AbstractMediaStream
object with a parent. |
|
| qint64 | streamSize () const |
| Returns the stream size that was set with
setStreamSize. |
|
| void | setStreamSize (qint64) |
| Sets the size of the stream in number of
bytes. |
|
| bool | streamSeekable () const |
| Returns whether your data stream is set as
seekable. |
|
| void | setStreamSeekable (bool) |
| Sets whether your data stream is seekable.
|
|
| void | writeData (const QByteArray &data) |
Sends the media data to the
backend for decoding. |
|
| void | endOfData () |
| Tells the backend that the media data stream
is at its end. |
|
| void | error (Phonon::ErrorType errorType, const QString &errorString) |
| If an I/O error occurs you should call this
function to make MediaObject go
into ErrorState. |
|
| virtual void | reset ()=0 |
| Reimplement this function to reset the
stream. |
|
| virtual void | needData ()=0 |
| Reimplement this function to be notified
when the backend needs data. |
|
| virtual void | enoughData () |
| Reimplement this function to be notified
when the backend has enough data and your stream object may take a
break. |
|
| virtual void | seekStream (qint64 offset) |
| Reimplement this function if your stream is
seekable. |
|
| AbstractMediaStream (AbstractMediaStreamPrivate &dd, QObject *parent) | |
Protected Attributes |
|
| QScopedPointer < AbstractMediaStreamPrivate > |
d_ptr |
Friends |
|
| class | MediaObject |
| class | MediaObjectPrivate |
| class | StreamInterface |
| virtual ~AbstractMediaStream | ( | ) | [virtual] |
| AbstractMediaStream | ( | QObject * | parent = 0 |
) | [explicit, protected] |
Constructs an AbstractMediaStream
object with a parent.
| AbstractMediaStream | ( | AbstractMediaStreamPrivate & | dd, |
| QObject * | parent | ||
| ) | [protected] |
| qint64 streamSize | ( | ) | const [protected] |
Returns the stream size that was set with setStreamSize.
A negative value means that the length of the stream cannot be known.
Defaults to 0.
| void setStreamSize | ( | qint64 | ) | [protected] |
Sets the size of the stream in number of bytes.
A negative value means that the length of the stream cannot be known.
Defaults to 0.
This function has to be called. A backend will not call needData() until the stream size is set.
| bool streamSeekable | ( | ) | const [protected] |
| void setStreamSeekable | ( | bool | ) | [protected] |
Sets whether your data stream is seekable.
Defaults to false.
If you set this to true you have to implement the
seekStream function.
| void writeData | ( | const QByteArray & | data | ) | [protected] |
Sends the media data to the backend for
decoding.
| void endOfData | ( | ) | [protected] |
Tells the backend that the media data stream is at its end.
| void error | ( | Phonon::ErrorType | errorType, |
| const QString & | errorString | ||
| ) | [protected] |
If an I/O error occurs you should call this function to make MediaObject go into ErrorState.
| virtual void reset | ( | ) | [protected, pure virtual] |
Reimplement this function to reset the stream.
Subsequent calls to writeData should start from the first position of the data unless a seek is requested.
The function is necessary for the case where a non-seekable MediaStream is played more than once. For a seekable stream the implementation can simply call
seekStream(0);
.
| virtual void needData | ( | ) | [protected, pure virtual] |
Reimplement this function to be notified when the backend needs data.
When this function is called you should try to call writeData or endOfData before returning.
| virtual void enoughData | ( | ) | [protected, virtual] |
Reimplement this function to be notified when the backend has enough data and your stream object may take a break.
This method is important for pushing data to the backend in order to not fill the backend buffer unnecessarily.
| virtual void seekStream | ( | qint64 | offset | ) | [protected, virtual] |
Reimplement this function if your stream is seekable.
When this function is called the next call to writeData has to
be at the requested offset.
friend class MediaObject
[friend] |
Definition at line 107 of file abstractmediastream.h.
friend class MediaObjectPrivate
[friend] |
Definition at line 108 of file abstractmediastream.h.
friend class StreamInterface
[friend] |
Definition at line 109 of file abstractmediastream.h.
QScopedPointer<AbstractMediaStreamPrivate>
d_ptr [protected] |
Reimplemented from QObject.
Definition at line 217 of file abstractmediastream.h.