summaryrefslogtreecommitdiff
path: root/src/outputstreamer.cc
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2014-09-20 11:53:40 +0200
committerBent Bisballe Nyeng <deva@aasimon.org>2014-09-20 11:53:40 +0200
commit808225629721c2f7d5c751edc60e5c6744be7886 (patch)
tree3d97fc3b7319b5f94e688a454de51b32321ebfd7 /src/outputstreamer.cc
parent46d4e577bceb12c9463fdf4ef1d9a9a348f13543 (diff)
First (crashing) prototype.
Diffstat (limited to 'src/outputstreamer.cc')
-rw-r--r--src/outputstreamer.cc127
1 files changed, 127 insertions, 0 deletions
diff --git a/src/outputstreamer.cc b/src/outputstreamer.cc
new file mode 100644
index 0000000..e652c7e
--- /dev/null
+++ b/src/outputstreamer.cc
@@ -0,0 +1,127 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/***************************************************************************
+ * streamer.cc
+ *
+ * Fri Sep 19 21:05:08 CEST 2014
+ * Copyright 2014 Bent Bisballe Nyeng
+ * deva@aasimon.org
+ ****************************************************************************/
+
+/*
+ * This file is part of SimpleRTP.
+ *
+ * SimpleRTP 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.
+ *
+ * SimpleRTP 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 SimpleRTP; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+#include "outputstreamer.h"
+
+#define KEY "123456789012345678901234567890123456789012345678901234567890"
+#define SSRC 1234567890
+#define CSRC_V 42
+#define CSRC_A 43
+
+OutputStreamer::OutputStreamer(QHostAddress addr, quint16 port)
+ : socket(this)
+{
+ total = 0;
+
+ lrtp_status_t status;
+
+ lrtp = lrtp_init(&status, KEY, SSRC);
+ if(status != LRTP_OK) printf("O:lrtp_init err: %d\n", status);
+
+ int res;
+ res = lrtp_create_profile(lrtp, PROFILE_JPEG, CSRC_V, OPTION_END);
+ if(res != 0) printf("O:lrtp_create_profile (v) err: %d\n", res);
+
+ res = lrtp_create_profile(lrtp, PROFILE_OPUS, CSRC_A, OPTION_END);
+ if(res != 0) printf("O:lrtp_create_profile (a) err: %d\n", res);
+
+ this->addr = addr;
+ this->port = port;
+}
+
+OutputStreamer::~OutputStreamer()
+{
+ lrtp_status_t status;
+
+ status = lrtp_destroy_profile(lrtp, CSRC_V);
+ if(status != LRTP_OK) printf("O:lrtp_destroy_profile (v) err: %d\n", status);
+
+ status = lrtp_destroy_profile(lrtp, CSRC_A);
+ if(status != LRTP_OK) printf("O:lrtp_destroy_profile (a) err: %d\n", status);
+
+ status = lrtp_close(lrtp);
+ if(status != LRTP_OK) printf("O:lrtp_close err: %d\n", status);
+}
+
+void OutputStreamer::newImage(Frame frame)
+{
+ int ret = 0;
+ ret = lrtp_enqueue_frame(lrtp, CSRC_V,
+ frame.data, frame.size, frame.ts,
+ LRTP_COPY);
+ if(ret != 0) printf("O:lrtp_enqueue_frame (v) err: %d\n", ret);
+
+ char packet[16*1024];
+ while( (ret = lrtp_pack(lrtp, packet, sizeof(packet))) > 0) {
+ //printf("v"); fflush(stdout);
+ sendPackage(packet, ret);
+ }
+ //CPPUNIT_ASSERT_EQUAL(ret, 0);
+
+ free(frame.data);
+ // delete frame;
+ //free(frame);
+}
+
+void OutputStreamer::newAudio(framelist_t frames)
+{
+ framelist_t::iterator fi = frames.begin();
+ while(fi != frames.end()) {
+ Frame *frame = *fi;
+
+ int ret = 0;
+ ret = lrtp_enqueue_frame(lrtp, CSRC_A,
+ frame->data, frame->size, frame->ts,
+ LRTP_COPY);
+ if(ret != 0) printf("O:lrtp_enqueue_frame (a) err: %d\n", ret);
+
+ char packet[16*1024];
+ while( (ret = lrtp_pack(lrtp, packet, sizeof(packet))) > 0) {
+ //printf("a"); fflush(stdout);
+ sendPackage(packet, ret);
+ }
+ //CPPUNIT_ASSERT_EQUAL(ret, 0);
+
+ free(frame->data);
+ delete frame;
+ //free(frame);
+
+ fi++;
+ }
+}
+
+void OutputStreamer::sendPackage(const char *data, size_t size)
+{
+ total += size;
+ socket.writeDatagram(data, (quint64)size, addr, port);
+}
+
+size_t OutputStreamer::getTotal()
+{
+ size_t t = total;
+ total = 0;
+ return t;
+}