1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #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 ParseLinkHeader(std::string linkHeader, std::vector<rtc::IceServer> &iceServers);
- 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();
|