summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2014-09-20 16:28:53 +0200
committerBent Bisballe Nyeng <deva@aasimon.org>2014-09-20 16:28:53 +0200
commitd8e5a4996f17d560fe8383efe72fe0ee774a86ec (patch)
treed1daf337e220991ce4ee3386a1fa3788d4b40331
parent88a63d314132d9dd87a8087a87743fab57c8ed51 (diff)
Initial multipeer code - untested.
-rw-r--r--src/config.ini2
-rw-r--r--src/mainwindow.cc25
-rw-r--r--src/mainwindow.h9
-rw-r--r--src/outputstreamer.cc22
-rw-r--r--src/outputstreamer.h14
-rw-r--r--src/simplertp.cc24
6 files changed, 69 insertions, 27 deletions
diff --git a/src/config.ini b/src/config.ini
index 74631ce..9846903 100644
--- a/src/config.ini
+++ b/src/config.ini
@@ -16,6 +16,6 @@ addr1="127.0.0.1"
port1=10000
ssrc1=42
-addr2="127.0.0.2"
+addr2="127.0.0.1"
port2=10001
ssrc2=43 \ No newline at end of file
diff --git a/src/mainwindow.cc b/src/mainwindow.cc
index 5e7a041..8a7c44a 100644
--- a/src/mainwindow.cc
+++ b/src/mainwindow.cc
@@ -32,18 +32,22 @@
#include <stdio.h>
MainWindow::MainWindow(QString v4ldev, QString adev,
- QHostAddress addr, quint16 port)
- : v4l(v4ldev), aih(adev), ostreamer(addr, port), istreamer(addr, port)
+ OutputStreamer &os,
+ QList<InputStreamer*> &isl)
+ : v4l(v4ldev), aih(adev), ostreamer(os), islist(isl)
{
/* // Self view:
connect(&v4l, SIGNAL(newImage(Frame)),
this, SLOT(newImage(Frame)));
*/
- connect(&istreamer, SIGNAL(newImage(Frame)),
- this, SLOT(newImage(Frame)));
-
- connect(&istreamer, SIGNAL(newAudio(Frame)),
- &aoh, SLOT(newAudio(Frame)));
+ QList<InputStreamer*>::iterator i = islist.begin();
+ while(i != islist.end()) {
+ connect(*i, SIGNAL(newImage(Frame)),
+ this, SLOT(newImage(Frame)));
+ connect(*i, SIGNAL(newAudio(Frame)),
+ &aoh, SLOT(newAudio(Frame)));
+ i++;
+ }
/*
connect(&aih, SIGNAL(newAudio(framelist_t)),
@@ -68,7 +72,12 @@ MainWindow::MainWindow(QString v4ldev, QString adev,
void MainWindow::updateStatus()
{
size_t ob = ostreamer.getTotal() / 60;
- size_t ib = istreamer.getTotal() / 60;
+ size_t ib = 0;
+ QList<InputStreamer*>::iterator i = islist.begin();
+ while(i != islist.end()) {
+ ib += (*i)->getTotal() / 60;
+ i++;
+ }
QString iunit = "b/s";
if(ib > 1024) {
diff --git a/src/mainwindow.h b/src/mainwindow.h
index 78bd50b..c3c6115 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -30,6 +30,7 @@
#include <QMainWindow>
#include <QString>
#include <QTimer>
+#include <QList>
#include "v4l.h"
#include "audioinputhandler.h"
@@ -40,7 +41,9 @@
class MainWindow : public QMainWindow {
Q_OBJECT
public:
- MainWindow(QString v4ldev, QString adev, QHostAddress addr, quint16 port);
+ MainWindow(QString v4ldev, QString adev,
+ OutputStreamer &ostreamer,
+ QList<InputStreamer*> &islist);
public slots:
void newImage(Frame frame);
@@ -51,8 +54,8 @@ private:
V4L v4l;
AudioInputHandler aih;
AudioOutputHandler aoh;
- OutputStreamer ostreamer;
- InputStreamer istreamer;
+ OutputStreamer &ostreamer;
+ QList<InputStreamer*> &islist;
QTimer status_timer;
};
diff --git a/src/outputstreamer.cc b/src/outputstreamer.cc
index e652c7e..e5b7436 100644
--- a/src/outputstreamer.cc
+++ b/src/outputstreamer.cc
@@ -31,7 +31,7 @@
#define CSRC_V 42
#define CSRC_A 43
-OutputStreamer::OutputStreamer(QHostAddress addr, quint16 port)
+OutputStreamer::OutputStreamer()
: socket(this)
{
total = 0;
@@ -47,9 +47,6 @@ OutputStreamer::OutputStreamer(QHostAddress addr, quint16 port)
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()
@@ -66,6 +63,14 @@ OutputStreamer::~OutputStreamer()
if(status != LRTP_OK) printf("O:lrtp_close err: %d\n", status);
}
+void OutputStreamer::addPeer(QHostAddress addr, quint16 port)
+{
+ Peer peer;
+ peer.addr = addr;
+ peer.port = port;
+ peers.push_back(peer);
+}
+
void OutputStreamer::newImage(Frame frame)
{
int ret = 0;
@@ -115,8 +120,13 @@ void OutputStreamer::newAudio(framelist_t frames)
void OutputStreamer::sendPackage(const char *data, size_t size)
{
- total += size;
- socket.writeDatagram(data, (quint64)size, addr, port);
+ QList<Peer>::iterator i = peers.begin();
+ while(i != peers.end()) {
+ Peer &peer = *i;
+ socket.writeDatagram(data, (quint64)size, peer.addr, peer.port);
+ total += size;
+ i++;
+ }
}
size_t OutputStreamer::getTotal()
diff --git a/src/outputstreamer.h b/src/outputstreamer.h
index f53d35a..de5d010 100644
--- a/src/outputstreamer.h
+++ b/src/outputstreamer.h
@@ -29,6 +29,7 @@
#include <QObject>
#include <QUdpSocket>
+#include <QList>
#include <lrtp.h>
@@ -37,9 +38,11 @@
class OutputStreamer : public QObject {
Q_OBJECT
public:
- OutputStreamer(QHostAddress addr, quint16 port);
+ OutputStreamer();
~OutputStreamer();
+ void addPeer(QHostAddress addr, quint16 port);
+
size_t getTotal();
public slots:
@@ -47,12 +50,17 @@ public slots:
void newAudio(framelist_t frames);
private:
+ class Peer {
+ public:
+ QHostAddress addr;
+ quint16 port;
+ };
+
void sendPackage(const char *data, size_t size);
struct lrtp_t *lrtp;
- QHostAddress addr;
- quint16 port;
+ QList<Peer> peers;
QUdpSocket socket;
diff --git a/src/simplertp.cc b/src/simplertp.cc
index 964c850..7a56fb3 100644
--- a/src/simplertp.cc
+++ b/src/simplertp.cc
@@ -50,21 +50,33 @@ int main(int argc, char *argv[])
QString key = settings.value("key").toString();
settings.endGroup();
+ OutputStreamer os;
+ QList<InputStreamer*> islist;
+
settings.beginGroup("peers");
int num_peers = settings.value("num_peers", "0").toInt();
for(int peer = 1; peer < num_peers + 1; peer++) {
- QString addr = settings.value("addr" + QString::number(peer)).toString();
+ QString saddr = settings.value("addr" + QString::number(peer)).toString();
quint16 port = settings.value("port" + QString::number(peer)).toInt();
unsigned int ssrc = settings.value("ssrc" + QString::number(peer)).toInt();
+ QHostAddress addr(saddr);
+ os.addPeer(addr, port);
+ InputStreamer *is = new InputStreamer(addr, port);
+ islist.push_back(is);
// Create
}
settings.endGroup();
- QHostAddress addr("127.0.0.1");
- quint16 port = 10000;
-
- MainWindow wnd(v4ldev, adev, addr, port);
+ MainWindow wnd(v4ldev, adev, os, islist);
wnd.show();
- return app.exec();
+ int ret = app.exec();
+
+ QList<InputStreamer*>::iterator i = islist.begin();
+ while(i != islist.end()) {
+ delete *i;
+ i++;
+ }
+
+ return ret;
}