Alejandro Acuña
2024-07-30 65a64a81d30f00f1fffd5da6866850e1308e1135
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// RTPAudioSink.h: interface for the RTPAudioSink class.
//
//////////////////////////////////////////////////////////////////////
 
#ifndef AFX_RTPAUDIOSINK_H__D14DA56A_E37A_4BF0_9746_6A803873E24E__INCLUDED_
#define AFX_RTPAUDIOSINK_H__D14DA56A_E37A_4BF0_9746_6A803873E24E__INCLUDED_
 
#include <string>
#include <vector>
#include <Winsock.h>
 
#include "AudioSink.h"
#include "TraceUser.h"
#include "Parameters.h"
 
class RTPAudioSink : public AudioSink
{
public:
    RTPAudioSink();
    virtual ~RTPAudioSink();
    int SetDestination(std::string ipAddress, unsigned short udpPort);
    int SetTOS(unsigned char tosByte);
    int SetLocalPort(unsigned short port);
    virtual int SinkStarted();
    virtual int SinkStopped();
    virtual int SinkThreadStarted(HANDLE sinkThreadHandle, DWORD sinkThreadID);
    virtual int SinkThreadStopped(HANDLE sinkThreadHandle, DWORD sinkThreadID);
protected:
    virtual int RenderAudioSamples(std::vector<std::pair<AudioSample *, AudioSource *> > &data);
    int SetTraceLevel();
private:
    int CreateSocket();
    int CloseSocket();
    int PrepareSink();
    int UnprepareSink();
    int SetCodecInRegistry(char *codecName);
private:
    unsigned long destinationIP;
    std::string destinationIPString;
    unsigned short destinationPort;
    SOCKET rtpSocket;
    sockaddr_in destinationSockAddr;
    unsigned short localPort;
    unsigned char tos;
    unsigned long timestamp;
    unsigned long ssrc;
    unsigned short seqno;
    unsigned char sendBuffer[512];
    bool bRunning;
    bool silenceInterval;
    int lastCodec;
    CRITICAL_SECTION filterMutex;
};
 
#endif // !defined(AFX_RTPAUDIOSINK_H__D14DA56A_E37A_4BF0_9746_6A803873E24E__INCLUDED_)