//////////////////////////////////////////////////////////////////////////////// // StreamRecorder.h // Mario Chirinos // 2014-02-12 //------------------------------------------------------------------------------ // Notes: // Streaming recorder with GStreamer // //////////////////////////////////////////////////////////////////////////////// #ifndef STREAMRECORDER_H #define STREAMRECORDER_H //------------------------------------------------------------------------------ /** Your public header include */ #include <gst/gst.h> #include <jmorecfg.h> //------------------------------------------------------------------------------ #define STREAMRECORDER_SAMPLERATE 44100 #define READSIZE 1152 //For MPEG1, frame_size = 1152 samples/frame #define STREAMRECORDER_BYTESPERSAMPLE 2 #define NCHANNELS 1 #define DST_URI_SIZE 80 #define RECONNECTION_DELAY 1 #define STREAM_ENOUGH_DATA_ERROR 4 //------------------------------------------------------------------------------ /** Class declaration */ class StreamRecorder { private: unsigned char* audioBuffer; unsigned char* audioBufferPosition; char pluginUri[DST_URI_SIZE]; unsigned int nBytes; unsigned int bufferSize; int recordTime; int audioFileDuration; /** Audio filename */ long int timestamp = 0; bool isDisconnected = false; //char* sourceName; //GstElement* audioResample; //GstElement* tempBin; //GstElement* audioSink; GstElement* streamSrc; GstElement* audioConvert; GstElement* filterCaps; GstElement* queue0; GstElement* queue1; GstElement* filter; GstElement* fakeSink; GstElement* mainPipeline; int createMainPipeline(); int connect(); int disconnect(); /** add data to buffer */ int addToBuffer(unsigned char* data, int length); int compressBuffer(); /** plugin's callbacks */ static void srcNewPad_callback(GstElement *element, GstPad *pad, void *data); static int bus_callback(GstBus *bus, GstMessage *message, void *data); static int filter_handoff_callback(GstElement *filter, GstBuffer* buffer, void* user_data); /** Save audio*/ void saveBuffer(); /** Restart the pipeline */ static gboolean reconnectURIStream(void* data); public: StreamRecorder(const char* source, int time); }; //------------------------------------------------------------------------------ #endif