summaryrefslogtreecommitdiffstats
path: root/netwerk/base/nsIStreamingProtocolController.idl
diff options
context:
space:
mode:
Diffstat (limited to 'netwerk/base/nsIStreamingProtocolController.idl')
-rw-r--r--netwerk/base/nsIStreamingProtocolController.idl186
1 files changed, 186 insertions, 0 deletions
diff --git a/netwerk/base/nsIStreamingProtocolController.idl b/netwerk/base/nsIStreamingProtocolController.idl
new file mode 100644
index 000000000..249e8e983
--- /dev/null
+++ b/netwerk/base/nsIStreamingProtocolController.idl
@@ -0,0 +1,186 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* vim: set sw=4 ts=4 et tw=80 : */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+interface nsIURI;
+
+#include "nsISupports.idl"
+
+%{C++
+#define MEDIASTREAM_FRAMETYPE_NORMAL 0x00000001
+#define MEDIASTREAM_FRAMETYPE_DISCONTINUITY 0x00000002
+#define MEDIASTREAM_FRAMETYPE_END_OF_STREAM 0x00000004
+%}
+
+/**
+ * Metadata of the media stream.
+ */
+[uuid(294adb30-856c-11e2-9e96-0800200c9a66)]
+interface nsIStreamingProtocolMetaData : nsISupports
+{
+ /**
+ * Frame type.
+ */
+ attribute uint32_t frameType;
+
+ /**
+ * The total tracks for the given media stream session.
+ */
+ attribute uint32_t totalTracks;
+
+ /**
+ * The mime type of the track.
+ */
+ attribute ACString mimeType;
+
+ /**
+ * The width of the resolution.
+ */
+ attribute unsigned long width;
+
+ /**
+ * The height of the resolution.
+ */
+ attribute unsigned long height;
+
+ /**
+ * The duration of the media stream in units of microseconds.
+ */
+ attribute unsigned long long duration;
+
+ /**
+ * The sample rate of the media stream.
+ */
+ attribute unsigned long sampleRate;
+
+ /**
+ * The timestamp indicates the stream absolute position
+ * relative to the beginning of the presentation.
+ */
+ attribute unsigned long long timeStamp;
+
+ /**
+ * The total number of audio channels in the media stream.
+ */
+ attribute unsigned long channelCount;
+
+ /**
+ * The AAC audio codec specific data.
+ */
+ attribute ACString esdsData;
+
+ /**
+ * The AVCC format extradata of H.264 stream.
+ */
+ attribute ACString avccData;
+};
+
+/**
+ * nsIStreamingProtocolListener
+ */
+[scriptable, uuid(c4f6b660-892e-11e2-9e96-0800200c9a66)]
+interface nsIStreamingProtocolListener : nsISupports
+{
+ /**
+ * Called when the data may be read without blocking the calling thread.
+ * @param index The track number of the media stream.
+ * @param data Raw data of the media stream on given track number.
+ * @param length The length of the raw data.
+ * @param offset The offset in the data stream from the start of the media
+ * presentation in bytes.
+ * @param meta The meta data of the frame.
+ */
+ void onMediaDataAvailable(in uint8_t index,
+ in ACString data,
+ in uint32_t length,
+ in uint32_t offset,
+ in nsIStreamingProtocolMetaData meta);
+
+ /**
+ * Called when the meta data for a given session is available.
+ * @param index The track number of the media stream.
+ * @param meta The meta data of the media stream.
+ */
+ void onConnected(in uint8_t index, in nsIStreamingProtocolMetaData meta);
+
+ /**
+ * Called when the Rtsp session is closed.
+ * @param index Track number of the media stream.
+ * @param reason The reason of disconnection.
+ */
+ void onDisconnected(in uint8_t index, in nsresult reason);
+};
+
+/**
+ * Media stream controller API: control and retrieve meta data from media stream.
+ */
+[uuid(4ce040f0-c50d-461f-94e2-af5a77fe13a5)]
+interface nsIStreamingProtocolController : nsISupports
+{
+ /**
+ * Preprare the URI before we can start the connection.
+ * @param aUri The URI of the media stream.
+ */
+ void init(in nsIURI aUri);
+
+ /**
+ * Asynchronously open this controller. Data is fed to the specified
+ * media stream listener as it becomes available. If asyncOpen returns
+ * successfully, the controller is responsible for keeping itself alive
+ * until it has called onStopRequest on aListener.
+ *
+ * @param aListener The nsIStreamingProtocolListener implementation
+ */
+ void asyncOpen(in nsIStreamingProtocolListener aListener);
+
+ /*
+ * Get the metadata of a track.
+ * @param index Index of a track.
+ * @return A nsIStreamingProtocolMetaData.
+ */
+ nsIStreamingProtocolMetaData getTrackMetaData(in octet index);
+
+ /*
+ * Tell the streaming server to start sending media data.
+ */
+ void play();
+
+ /*
+ * Tell the streaming server to pause sending media data.
+ */
+ void pause();
+
+ /*
+ * Tell the streaming server to resume the suspended media stream.
+ */
+ void resume();
+
+ /*
+ * Tell the streaming server to suspend the media stream.
+ */
+ void suspend();
+
+ /*
+ * Tell the streaming server to send media data in specific time.
+ * @param seekTimeUs Start time of the media stream in microseconds.
+ */
+ void seek(in unsigned long long seekTimeUs);
+
+ /*
+ * Tell the streaming server to stop the
+ * media stream and close the connection.
+ */
+ void stop();
+
+ /*
+ * Notify the streaming controller that the playback has ended.
+ * The controller might have to perform certain internal state transition.
+ */
+ void playbackEnded();
+
+ /**
+ * Total number of audio/video tracks.
+ */
+ readonly attribute octet totalTracks;
+};