正在显示
6 个修改的文件
包含
94 行增加
和
6 行删除
| @@ -223,7 +223,7 @@ int SrsClient::check_vhost() | @@ -223,7 +223,7 @@ int SrsClient::check_vhost() | ||
| 223 | } | 223 | } |
| 224 | 224 | ||
| 225 | SrsConfDirective* conf = NULL; | 225 | SrsConfDirective* conf = NULL; |
| 226 | - if ((conf = vhost->get(RTMP_VHOST_ENABLED)) != NULL && conf->arg0() != "on") { | 226 | + if ((conf = config->get_vhost_enabled(req->vhost)) != NULL && conf->arg0() != "on") { |
| 227 | ret = ERROR_RTMP_VHOST_NOT_FOUND; | 227 | ret = ERROR_RTMP_VHOST_NOT_FOUND; |
| 228 | srs_error("vhost %s disabled. ret=%d", req->vhost.c_str(), ret); | 228 | srs_error("vhost %s disabled. ret=%d", req->vhost.c_str(), ret); |
| 229 | return ret; | 229 | return ret; |
| @@ -336,7 +336,7 @@ int SrsClient::publish(SrsSource* source, bool is_fmle) | @@ -336,7 +336,7 @@ int SrsClient::publish(SrsSource* source, bool is_fmle) | ||
| 336 | SrsHLS* hls = source->get_hls(); | 336 | SrsHLS* hls = source->get_hls(); |
| 337 | 337 | ||
| 338 | // notify the hls to prepare when publish start. | 338 | // notify the hls to prepare when publish start. |
| 339 | - if ((ret = hls->on_publish()) != ERROR_SUCCESS) { | 339 | + if ((ret = hls->on_publish(req->vhost)) != ERROR_SUCCESS) { |
| 340 | srs_error("hls on_publish failed. ret=%d", ret); | 340 | srs_error("hls on_publish failed. ret=%d", ret); |
| 341 | return ret; | 341 | return ret; |
| 342 | } | 342 | } |
| @@ -551,6 +551,17 @@ SrsConfDirective* SrsConfig::get_vhost(std::string vhost) | @@ -551,6 +551,17 @@ SrsConfDirective* SrsConfig::get_vhost(std::string vhost) | ||
| 551 | return NULL; | 551 | return NULL; |
| 552 | } | 552 | } |
| 553 | 553 | ||
| 554 | +SrsConfDirective* SrsConfig::get_vhost_enabled(std::string vhost) | ||
| 555 | +{ | ||
| 556 | + SrsConfDirective* conf = get_vhost(vhost); | ||
| 557 | + | ||
| 558 | + if (!conf) { | ||
| 559 | + return NULL; | ||
| 560 | + } | ||
| 561 | + | ||
| 562 | + return conf->get("enabled"); | ||
| 563 | +} | ||
| 564 | + | ||
| 554 | SrsConfDirective* SrsConfig::get_gop_cache(std::string vhost) | 565 | SrsConfDirective* SrsConfig::get_gop_cache(std::string vhost) |
| 555 | { | 566 | { |
| 556 | SrsConfDirective* conf = get_vhost(vhost); | 567 | SrsConfDirective* conf = get_vhost(vhost); |
| @@ -668,6 +679,8 @@ int SrsConfig::parse_file(const char* filename) | @@ -668,6 +679,8 @@ int SrsConfig::parse_file(const char* filename) | ||
| 668 | "directive \"listen\" is empty, ret=%d", (conf? conf->conf_line:0), ret); | 679 | "directive \"listen\" is empty, ret=%d", (conf? conf->conf_line:0), ret); |
| 669 | return ret; | 680 | return ret; |
| 670 | } | 681 | } |
| 682 | + // TODO: check the hls. | ||
| 683 | + // TODO: check other config. | ||
| 671 | 684 | ||
| 672 | return ret; | 685 | return ret; |
| 673 | } | 686 | } |
| @@ -37,8 +37,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -37,8 +37,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
| 37 | // default vhost for rtmp | 37 | // default vhost for rtmp |
| 38 | #define RTMP_VHOST_DEFAULT "__defaultVhost__" | 38 | #define RTMP_VHOST_DEFAULT "__defaultVhost__" |
| 39 | 39 | ||
| 40 | -// conf node: enabled. | ||
| 41 | -#define RTMP_VHOST_ENABLED "enabled" | 40 | +#define SRS_CONF_DEFAULT_HLS_PATH "./hls" |
| 42 | 41 | ||
| 43 | class SrsFileBuffer | 42 | class SrsFileBuffer |
| 44 | { | 43 | { |
| @@ -108,6 +107,7 @@ public: | @@ -108,6 +107,7 @@ public: | ||
| 108 | public: | 107 | public: |
| 109 | virtual int parse_options(int argc, char** argv); | 108 | virtual int parse_options(int argc, char** argv); |
| 110 | virtual SrsConfDirective* get_vhost(std::string vhost); | 109 | virtual SrsConfDirective* get_vhost(std::string vhost); |
| 110 | + virtual SrsConfDirective* get_vhost_enabled(std::string vhost); | ||
| 111 | virtual SrsConfDirective* get_gop_cache(std::string vhost); | 111 | virtual SrsConfDirective* get_gop_cache(std::string vhost); |
| 112 | virtual SrsConfDirective* get_hls(std::string vhost); | 112 | virtual SrsConfDirective* get_hls(std::string vhost); |
| 113 | virtual SrsConfDirective* get_hls_path(std::string vhost); | 113 | virtual SrsConfDirective* get_hls_path(std::string vhost); |
| @@ -109,5 +109,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -109,5 +109,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
| 109 | 109 | ||
| 110 | #define ERROR_HLS_METADATA 600 | 110 | #define ERROR_HLS_METADATA 600 |
| 111 | #define ERROR_HLS_DECODE_ERROR 601 | 111 | #define ERROR_HLS_DECODE_ERROR 601 |
| 112 | +#define ERROR_HLS_BUSY 602 | ||
| 112 | 113 | ||
| 113 | #endif | 114 | #endif |
| @@ -27,27 +27,62 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -27,27 +27,62 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
| 27 | #include <srs_core_codec.hpp> | 27 | #include <srs_core_codec.hpp> |
| 28 | #include <srs_core_amf0.hpp> | 28 | #include <srs_core_amf0.hpp> |
| 29 | #include <srs_core_protocol.hpp> | 29 | #include <srs_core_protocol.hpp> |
| 30 | +#include <srs_core_config.hpp> | ||
| 30 | 31 | ||
| 31 | SrsHLS::SrsHLS() | 32 | SrsHLS::SrsHLS() |
| 32 | { | 33 | { |
| 34 | + hls_enabled = false; | ||
| 33 | codec = new SrsCodec(); | 35 | codec = new SrsCodec(); |
| 34 | sample = new SrsCodecSample(); | 36 | sample = new SrsCodecSample(); |
| 37 | + muxer = NULL; | ||
| 35 | } | 38 | } |
| 36 | 39 | ||
| 37 | SrsHLS::~SrsHLS() | 40 | SrsHLS::~SrsHLS() |
| 38 | { | 41 | { |
| 39 | srs_freep(codec); | 42 | srs_freep(codec); |
| 40 | srs_freep(sample); | 43 | srs_freep(sample); |
| 44 | + srs_freep(muxer); | ||
| 41 | } | 45 | } |
| 42 | 46 | ||
| 43 | -int SrsHLS::on_publish() | 47 | +int SrsHLS::on_publish(std::string _vhost) |
| 44 | { | 48 | { |
| 45 | int ret = ERROR_SUCCESS; | 49 | int ret = ERROR_SUCCESS; |
| 50 | + | ||
| 51 | + if (muxer) { | ||
| 52 | + ret = ERROR_HLS_BUSY; | ||
| 53 | + srs_error("hls is busy, something error, " | ||
| 54 | + "vhost=%s, ret=%d", _vhost.c_str(), ret); | ||
| 55 | + return ret; | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | + vhost = _vhost; | ||
| 59 | + muxer = new SrsTSMuxer(); | ||
| 60 | + | ||
| 61 | + // try to open the HLS muxer | ||
| 62 | + SrsConfDirective* conf = config->get_hls(vhost); | ||
| 63 | + if (!conf && conf->arg0() == "off") { | ||
| 64 | + return ret; | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | + hls_enabled = true; | ||
| 68 | + | ||
| 69 | + std::string path = SRS_CONF_DEFAULT_HLS_PATH; | ||
| 70 | + if ((conf = config->get_hls_path(vhost)) != NULL) { | ||
| 71 | + path = conf->arg0(); | ||
| 72 | + } | ||
| 73 | + | ||
| 74 | + if ((ret = muxer->open(path)) != ERROR_SUCCESS) { | ||
| 75 | + srs_error("open hls muxer failed. ret=%d", ret); | ||
| 76 | + return ret; | ||
| 77 | + } | ||
| 78 | + | ||
| 46 | return ret; | 79 | return ret; |
| 47 | } | 80 | } |
| 48 | 81 | ||
| 49 | void SrsHLS::on_unpublish() | 82 | void SrsHLS::on_unpublish() |
| 50 | { | 83 | { |
| 84 | + hls_enabled = false; | ||
| 85 | + srs_freep(muxer); | ||
| 51 | } | 86 | } |
| 52 | 87 | ||
| 53 | int SrsHLS::on_meta_data(SrsOnMetaDataPacket* metadata) | 88 | int SrsHLS::on_meta_data(SrsOnMetaDataPacket* metadata) |
| @@ -145,6 +180,11 @@ int SrsHLS::on_audio(SrsCommonMessage* audio) | @@ -145,6 +180,11 @@ int SrsHLS::on_audio(SrsCommonMessage* audio) | ||
| 145 | return ret; | 180 | return ret; |
| 146 | } | 181 | } |
| 147 | 182 | ||
| 183 | + // TODO: maybe donot need to demux the aac? | ||
| 184 | + if (!hls_enabled) { | ||
| 185 | + return ret; | ||
| 186 | + } | ||
| 187 | + | ||
| 148 | return ret; | 188 | return ret; |
| 149 | } | 189 | } |
| 150 | 190 | ||
| @@ -161,6 +201,25 @@ int SrsHLS::on_video(SrsCommonMessage* video) | @@ -161,6 +201,25 @@ int SrsHLS::on_video(SrsCommonMessage* video) | ||
| 161 | return ret; | 201 | return ret; |
| 162 | } | 202 | } |
| 163 | 203 | ||
| 204 | + // TODO: maybe donot need to demux the avc? | ||
| 205 | + if (!hls_enabled) { | ||
| 206 | + return ret; | ||
| 207 | + } | ||
| 208 | + | ||
| 209 | + return ret; | ||
| 210 | +} | ||
| 211 | + | ||
| 212 | +SrsTSMuxer::SrsTSMuxer() | ||
| 213 | +{ | ||
| 214 | +} | ||
| 215 | + | ||
| 216 | +SrsTSMuxer::~SrsTSMuxer() | ||
| 217 | +{ | ||
| 218 | +} | ||
| 219 | + | ||
| 220 | +int SrsTSMuxer::open(std::string path) | ||
| 221 | +{ | ||
| 222 | + int ret = ERROR_SUCCESS; | ||
| 164 | return ret; | 223 | return ret; |
| 165 | } | 224 | } |
| 166 | 225 |
| @@ -29,25 +29,40 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -29,25 +29,40 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
| 29 | */ | 29 | */ |
| 30 | #include <srs_core.hpp> | 30 | #include <srs_core.hpp> |
| 31 | 31 | ||
| 32 | +#include <string> | ||
| 33 | + | ||
| 32 | class SrsOnMetaDataPacket; | 34 | class SrsOnMetaDataPacket; |
| 33 | class SrsCommonMessage; | 35 | class SrsCommonMessage; |
| 34 | class SrsCodecSample; | 36 | class SrsCodecSample; |
| 37 | +class SrsTSMuxer; | ||
| 35 | class SrsCodec; | 38 | class SrsCodec; |
| 36 | 39 | ||
| 37 | class SrsHLS | 40 | class SrsHLS |
| 38 | { | 41 | { |
| 39 | private: | 42 | private: |
| 43 | + std::string vhost; | ||
| 44 | + bool hls_enabled; | ||
| 40 | SrsCodec* codec; | 45 | SrsCodec* codec; |
| 41 | SrsCodecSample* sample; | 46 | SrsCodecSample* sample; |
| 47 | + SrsTSMuxer* muxer; | ||
| 42 | public: | 48 | public: |
| 43 | SrsHLS(); | 49 | SrsHLS(); |
| 44 | virtual ~SrsHLS(); | 50 | virtual ~SrsHLS(); |
| 45 | public: | 51 | public: |
| 46 | - virtual int on_publish(); | 52 | + virtual int on_publish(std::string _vhost); |
| 47 | virtual void on_unpublish(); | 53 | virtual void on_unpublish(); |
| 48 | virtual int on_meta_data(SrsOnMetaDataPacket* metadata); | 54 | virtual int on_meta_data(SrsOnMetaDataPacket* metadata); |
| 49 | virtual int on_audio(SrsCommonMessage* audio); | 55 | virtual int on_audio(SrsCommonMessage* audio); |
| 50 | virtual int on_video(SrsCommonMessage* video); | 56 | virtual int on_video(SrsCommonMessage* video); |
| 51 | }; | 57 | }; |
| 52 | 58 | ||
| 59 | +class SrsTSMuxer | ||
| 60 | +{ | ||
| 61 | +public: | ||
| 62 | + SrsTSMuxer(); | ||
| 63 | + virtual ~SrsTSMuxer(); | ||
| 64 | +public: | ||
| 65 | + virtual int open(std::string path); | ||
| 66 | +}; | ||
| 67 | + | ||
| 53 | #endif | 68 | #endif |
-
请 注册 或 登录 后发表评论