Remove the payload type from push_frame()
Make it mandatory to specify the payload when creating reader/writer. Reader needs to type anyway because it must start the correct frame receiver. For writer it's not absolutely necessary but this makes the API cleaner
This commit is contained in:
parent
c041a9c703
commit
977a53c11b
|
|
@ -23,7 +23,7 @@ kvz_rtp::connection::connection(bool reader):
|
|||
{
|
||||
rtp_sequence_ = kvz_rtp::random::generate_32();
|
||||
rtp_ssrc_ = kvz_rtp::random::generate_32();
|
||||
rtp_payload_ = RTP_FORMAT_HEVC;
|
||||
rtp_payload_ = RTP_FORMAT_GENERIC;
|
||||
}
|
||||
|
||||
kvz_rtp::connection::~connection()
|
||||
|
|
|
|||
47
src/lib.cc
47
src/lib.cc
|
|
@ -38,7 +38,7 @@ kvz_rtp::context::~context()
|
|||
#endif
|
||||
}
|
||||
|
||||
kvz_rtp::reader *kvz_rtp::context::create_reader(std::string srcAddr, int srcPort)
|
||||
kvz_rtp::reader *kvz_rtp::context::create_reader(std::string srcAddr, int srcPort, rtp_format_t fmt)
|
||||
{
|
||||
kvz_rtp::reader *reader = new kvz_rtp::reader(srcAddr, srcPort);
|
||||
|
||||
|
|
@ -48,65 +48,34 @@ kvz_rtp::reader *kvz_rtp::context::create_reader(std::string srcAddr, int srcPor
|
|||
}
|
||||
|
||||
conns_.insert(std::pair<int, connection *>(reader->get_ssrc(), reader));
|
||||
return reader;
|
||||
}
|
||||
|
||||
kvz_rtp::reader *kvz_rtp::context::create_reader(std::string srcAddr, int srcPort, rtp_format_t fmt)
|
||||
{
|
||||
kvz_rtp::reader *reader = nullptr;
|
||||
|
||||
if ((reader = create_reader(srcAddr, srcPort)) == nullptr)
|
||||
return nullptr;
|
||||
|
||||
reader->set_payload(fmt);
|
||||
|
||||
return reader;
|
||||
}
|
||||
|
||||
kvz_rtp::writer *kvz_rtp::context::create_writer(std::string dstAddr, int dstPort)
|
||||
{
|
||||
kvz_rtp::writer *writer = new kvz_rtp::writer(dstAddr, dstPort);
|
||||
|
||||
if (!writer) {
|
||||
std::cerr << "Failed to create writer for " << dstAddr << ":" << dstPort << "!" << std::endl;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
conns_.insert(std::pair<int, connection *>(writer->get_ssrc(), writer));
|
||||
return writer;
|
||||
}
|
||||
|
||||
kvz_rtp::writer *kvz_rtp::context::create_writer(std::string dstAddr, int dstPort, rtp_format_t fmt)
|
||||
{
|
||||
kvz_rtp::writer *writer = nullptr;
|
||||
kvz_rtp::writer *writer = new kvz_rtp::writer(dstAddr, dstPort);
|
||||
|
||||
if ((writer = create_writer(dstAddr, dstPort)) == nullptr)
|
||||
if (!writer) {
|
||||
LOG_ERROR("Failed to create writer for %s:%d!", dstAddr.c_str(), dstPort);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
conns_.insert(std::pair<int, connection *>(writer->get_ssrc(), writer));
|
||||
writer->set_payload(fmt);
|
||||
return writer;
|
||||
}
|
||||
|
||||
kvz_rtp::writer *kvz_rtp::context::create_writer(std::string dstAddr, int dstPort, int srcPort)
|
||||
kvz_rtp::writer *kvz_rtp::context::create_writer(std::string dstAddr, int dstPort, int srcPort, rtp_format_t fmt)
|
||||
{
|
||||
kvz_rtp::writer *writer = new kvz_rtp::writer(dstAddr, dstPort, srcPort);
|
||||
|
||||
if (!writer) {
|
||||
std::cerr << "Failed to create writer for " << dstAddr << ":" << dstPort << "!" << std::endl;
|
||||
LOG_ERROR("Failed to create writer for %s:%d!", dstAddr.c_str(), dstPort);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
conns_.insert(std::pair<int, connection *>(writer->get_ssrc(), writer));
|
||||
return writer;
|
||||
}
|
||||
|
||||
kvz_rtp::writer *kvz_rtp::context::create_writer(std::string dstAddr, int dstPort, int srcPort, rtp_format_t fmt)
|
||||
{
|
||||
kvz_rtp::writer *writer = nullptr;
|
||||
|
||||
if ((writer = create_writer(dstAddr, dstPort, srcPort)) == nullptr)
|
||||
return nullptr;
|
||||
|
||||
conns_.insert(std::pair<int, connection *>(writer->get_ssrc(), writer));
|
||||
writer->set_payload(fmt);
|
||||
return writer;
|
||||
|
|
|
|||
|
|
@ -16,15 +16,12 @@ namespace kvz_rtp {
|
|||
*
|
||||
* Read packets are stored in a ring buffer which can be read by
|
||||
* calling kvz_rtp::reader::pull_frame() */
|
||||
kvz_rtp::reader *create_reader(std::string src_addr, int src_port);
|
||||
kvz_rtp::reader *create_reader(std::string src_addr, int src_port, rtp_format_t fmt);
|
||||
|
||||
/* Open connection for writing RTP packets to dst_addr:dst_port
|
||||
*
|
||||
* Packets can be sent by calling kvz_rtp::writer::push_frame() */
|
||||
kvz_rtp::writer *create_writer(std::string dst_addr, int dst_port);
|
||||
kvz_rtp::writer *create_writer(std::string dst_addr, int dst_port, rtp_format_t fmt);
|
||||
kvz_rtp::writer *create_writer(std::string dst_addr, int dst_port, int src_port);
|
||||
kvz_rtp::writer *create_writer(std::string dst_addr, int dst_port, int src_port, rtp_format_t fmt);
|
||||
|
||||
/* call reader/writer-specific destroy functions, send an RTCP BYE message
|
||||
|
|
@ -35,6 +32,8 @@ namespace kvz_rtp {
|
|||
std::string& get_cname();
|
||||
|
||||
private:
|
||||
kvz_rtp::writer *create_writer(std::string dst_addr, int dst_port);
|
||||
|
||||
/* Generate CNAME for participant using host and login names */
|
||||
std::string generate_cname();
|
||||
|
||||
|
|
|
|||
|
|
@ -18,8 +18,10 @@
|
|||
#include "writer.hh"
|
||||
|
||||
// TODO implement frame splitting if data_len > MTU
|
||||
rtp_error_t kvz_rtp::generic::push_frame(kvz_rtp::connection *conn, uint8_t *data, size_t data_len)
|
||||
rtp_error_t kvz_rtp::generic::push_frame(kvz_rtp::connection *conn, uint8_t *data, size_t data_len, int flags)
|
||||
{
|
||||
(void)flags;
|
||||
|
||||
if (data_len > MAX_PAYLOAD) {
|
||||
LOG_WARN("packet is larger (%zu bytes) than MAX_PAYLOAD (%u bytes)", data_len, MAX_PAYLOAD);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,8 +10,9 @@ namespace kvz_rtp {
|
|||
class reader;
|
||||
|
||||
namespace generic {
|
||||
|
||||
/* TODO: */
|
||||
rtp_error_t push_frame(kvz_rtp::connection *conn, uint8_t *data, size_t data_len);
|
||||
rtp_error_t push_frame(kvz_rtp::connection *conn, uint8_t *data, size_t data_len, int flags);
|
||||
|
||||
/* TODO: */
|
||||
rtp_error_t frame_receiver(kvz_rtp::reader *reader);
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ static rtp_error_t __push_hevc_frame(kvz_rtp::connection *conn, uint8_t *data, s
|
|||
|
||||
if (data_len <= MAX_PAYLOAD) {
|
||||
LOG_DEBUG("send unfrag size %zu, type %u", data_len, nalType);
|
||||
return kvz_rtp::generic::push_frame(conn, data, data_len);
|
||||
return kvz_rtp::generic::push_frame(conn, data, data_len, 0);
|
||||
}
|
||||
|
||||
LOG_DEBUG("send frag size: %zu, type %u", data_len, nalType);
|
||||
|
|
@ -157,7 +157,7 @@ static rtp_error_t __push_hevc_frame(kvz_rtp::connection *conn, uint8_t *data, s
|
|||
return ret;
|
||||
}
|
||||
|
||||
rtp_error_t kvz_rtp::hevc::push_frame(kvz_rtp::connection *conn, uint8_t *data, size_t data_len)
|
||||
rtp_error_t kvz_rtp::hevc::push_frame(kvz_rtp::connection *conn, uint8_t *data, size_t data_len, int flags)
|
||||
{
|
||||
uint8_t start_len;
|
||||
int32_t prev_offset = 0;
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ namespace kvz_rtp {
|
|||
FT_END = 3, /* frame contains a fragment with E bit set */
|
||||
};
|
||||
|
||||
rtp_error_t push_frame(kvz_rtp::connection *conn, uint8_t *data, size_t data_len);
|
||||
rtp_error_t push_frame(kvz_rtp::connection *conn, uint8_t *data, size_t data_len, int flags);
|
||||
|
||||
/* Inspect the type of "frame" and return its type to caller
|
||||
*
|
||||
|
|
|
|||
|
|
@ -7,9 +7,9 @@
|
|||
#include "send.hh"
|
||||
|
||||
/* Validity of arguments is checked by kvz_rtp::sender. We just need to relay them there */
|
||||
rtp_error_t kvz_rtp::opus::push_frame(connection *conn, uint8_t *data, uint32_t data_len)
|
||||
rtp_error_t kvz_rtp::opus::push_frame(connection *conn, uint8_t *data, uint32_t data_len, int flags)
|
||||
{
|
||||
return kvz_rtp::generic::push_frame(conn, data, data_len);
|
||||
return kvz_rtp::generic::push_frame(conn, data, data_len, flags);
|
||||
|
||||
#if 0
|
||||
rtp_error_t ret;
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ namespace kvz_rtp {
|
|||
uint8_t config_number;
|
||||
};
|
||||
|
||||
rtp_error_t push_frame(connection *conn, uint8_t *data, uint32_t data_len);
|
||||
rtp_error_t push_frame(connection *conn, uint8_t *data, uint32_t data_len, int flags);
|
||||
|
||||
/* Process the incoming Opus frame
|
||||
* The RTP frame "frame" given as parameter should be considered invalid after calling this function
|
||||
|
|
|
|||
|
|
@ -73,18 +73,18 @@ rtp_error_t kvz_rtp::writer::start()
|
|||
return RTP_OK;
|
||||
}
|
||||
|
||||
rtp_error_t kvz_rtp::writer::push_frame(uint8_t *data, uint32_t data_len, rtp_format_t fmt)
|
||||
rtp_error_t kvz_rtp::writer::push_frame(uint8_t *data, uint32_t data_len, int flags)
|
||||
{
|
||||
switch (fmt) {
|
||||
switch (get_payload()) {
|
||||
case RTP_FORMAT_HEVC:
|
||||
return kvz_rtp::hevc::push_frame(this, data, data_len);
|
||||
return kvz_rtp::hevc::push_frame(this, data, data_len, flags);
|
||||
|
||||
case RTP_FORMAT_OPUS:
|
||||
return kvz_rtp::opus::push_frame(this, data, data_len);
|
||||
return kvz_rtp::opus::push_frame(this, data, data_len, flags);
|
||||
|
||||
default:
|
||||
LOG_DEBUG("Format not recognized, pushing the frame as generic");
|
||||
return kvz_rtp::generic::push_frame(this, data, data_len);
|
||||
return kvz_rtp::generic::push_frame(this, data, data_len, flags);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -18,9 +18,10 @@ namespace kvz_rtp {
|
|||
// open socket for sending frames
|
||||
rtp_error_t start();
|
||||
|
||||
/* TODO: */
|
||||
rtp_error_t push_frame(uint8_t *data, uint32_t data_len, rtp_format_t fmt);
|
||||
/* TODO: */
|
||||
rtp_error_t push_frame(uint8_t *data, uint32_t data_len, int flags);
|
||||
|
||||
/* TODO: remove */
|
||||
sockaddr_in get_out_address();
|
||||
|
||||
const kvz_rtp::frame_queue& get_frame_queue() const;
|
||||
|
|
|
|||
Loading…
Reference in New Issue