X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=httpd.h;h=55a81c20e59ffa125ef59a28320e98aa0f34c494;hb=e45ebd282e3c6c369475ef0987945eca62ef8f58;hp=695c7082cd36436b8bbf345f48fd53681f924a33;hpb=72d11df3520d1afd8929b167dfa7eabdbe8eed63;p=nageru diff --git a/httpd.h b/httpd.h index 695c708..55a81c2 100644 --- a/httpd.h +++ b/httpd.h @@ -1,8 +1,7 @@ #ifndef _HTTPD_H #define _HTTPD_H -// A class dealing with stream output, both to HTTP (thus the class name) -// and to local output files. Since we generally have very few outputs +// A class dealing with stream output to HTTP. Since we generally have very few outputs // (end clients are not meant to connect directly to our stream; it should be // transcoded by something else and then sent to a reflector), we don't need to // care a lot about performance. Thus, we solve this by the simplest possible @@ -27,21 +26,13 @@ extern "C" { #include } +#include "mux.h" + class HTTPD { public: - enum PacketDestination { - DESTINATION_FILE_ONLY, - DESTINATION_HTTP_ONLY, - DESTINATION_FILE_AND_HTTP - }; - HTTPD(int width, int height); void start(int port); - void add_packet(const AVPacket &pkt, int64_t pts, int64_t dts, PacketDestination destination); - - // You can only have one going at the same time. - void open_output_file(const std::string &filename); - void close_output_file(); + void add_packet(const AVPacket &pkt, int64_t pts, int64_t dts); private: static int answer_to_connection_thunk(void *cls, MHD_Connection *connection, @@ -60,26 +51,10 @@ private: void request_completed(struct MHD_Connection *connection, void **con_cls, enum MHD_RequestTerminationCode toe); - class Mux { - public: - enum Codec { - CODEC_H264, - CODEC_NV12, // Uncompressed 4:2:0. - }; - - Mux(AVFormatContext *avctx, int width, int height, Codec video_codec); // Takes ownership of avctx. - ~Mux(); - void add_packet(const AVPacket &pkt, int64_t pts, int64_t dts); - - private: - bool seen_keyframe = false; - AVFormatContext *avctx; - AVStream *avstream_video, *avstream_audio; - }; class Stream { public: - Stream(AVOutputFormat *oformat, int width, int height); + Stream(AVOutputFormat *oformat, int width, int height, int time_base); static ssize_t reader_callback_thunk(void *cls, uint64_t pos, char *buf, size_t max); ssize_t reader_callback(uint64_t pos, char *buf, size_t max); @@ -102,7 +77,6 @@ private: std::set streams; // Not owned. int width, height; - std::unique_ptr file_mux; // To local disk. }; #endif // !defined(_HTTPD_H)