mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-07-20 10:09:15 +00:00
71 lines
1.6 KiB
C++
71 lines
1.6 KiB
C++
#pragma once
|
|
|
|
#include <obs-module.h>
|
|
#include <util/curl/curl-helper.h>
|
|
#include <util/platform.h>
|
|
#include <util/base.h>
|
|
#include <util/dstr.h>
|
|
|
|
#include <string>
|
|
#include <atomic>
|
|
#include <mutex>
|
|
#include <thread>
|
|
|
|
#include <rtc/rtc.hpp>
|
|
|
|
class WHIPOutput {
|
|
public:
|
|
WHIPOutput(obs_data_t *settings, obs_output_t *output);
|
|
~WHIPOutput();
|
|
|
|
bool Start();
|
|
void Stop(bool signal = true);
|
|
void Data(struct encoder_packet *packet);
|
|
|
|
inline size_t GetTotalBytes() { return total_bytes_sent; }
|
|
|
|
inline int GetConnectTime() { return connect_time_ms; }
|
|
|
|
private:
|
|
void ConfigureAudioTrack(std::string media_stream_id,
|
|
std::string cname);
|
|
void ConfigureVideoTrack(std::string media_stream_id,
|
|
std::string cname);
|
|
bool Init();
|
|
bool Setup();
|
|
bool Connect();
|
|
void StartThread();
|
|
void SendDelete();
|
|
void StopThread(bool signal);
|
|
|
|
void Send(void *data, uintptr_t size, uint64_t duration,
|
|
std::shared_ptr<rtc::Track> track,
|
|
std::shared_ptr<rtc::RtcpSrReporter> rtcp_sr_reporter);
|
|
|
|
obs_output_t *output;
|
|
|
|
std::string endpoint_url;
|
|
std::string bearer_token;
|
|
std::string resource_url;
|
|
|
|
std::atomic<bool> running;
|
|
|
|
std::mutex start_stop_mutex;
|
|
std::thread start_stop_thread;
|
|
|
|
uint32_t base_ssrc;
|
|
std::shared_ptr<rtc::PeerConnection> peer_connection;
|
|
std::shared_ptr<rtc::Track> audio_track;
|
|
std::shared_ptr<rtc::Track> video_track;
|
|
std::shared_ptr<rtc::RtcpSrReporter> audio_sr_reporter;
|
|
std::shared_ptr<rtc::RtcpSrReporter> video_sr_reporter;
|
|
|
|
std::atomic<size_t> total_bytes_sent;
|
|
std::atomic<int> connect_time_ms;
|
|
int64_t start_time_ns;
|
|
int64_t last_audio_timestamp;
|
|
int64_t last_video_timestamp;
|
|
};
|
|
|
|
void register_whip_output();
|