winlin

change metadata. add hls class.

@@ -114,7 +114,8 @@ MODULE_FILES=("srs_core" "srs_core_log" "srs_core_server" @@ -114,7 +114,8 @@ MODULE_FILES=("srs_core" "srs_core_log" "srs_core_server"
114 "srs_core_autofree" "srs_core_protocol" "srs_core_amf0" 114 "srs_core_autofree" "srs_core_protocol" "srs_core_amf0"
115 "srs_core_stream" "srs_core_source" "srs_core_codec" 115 "srs_core_stream" "srs_core_source" "srs_core_codec"
116 "srs_core_handshake" "srs_core_pithy_print" 116 "srs_core_handshake" "srs_core_pithy_print"
117 - "srs_core_config" "srs_core_refer" "srs_core_reload") 117 + "srs_core_config" "srs_core_refer" "srs_core_reload"
  118 + "srs_core_hls")
118 MODULE_DIR="src/core" . auto/modules.sh 119 MODULE_DIR="src/core" . auto/modules.sh
119 CORE_OBJS="${MODULE_OBJS[@]}" 120 CORE_OBJS="${MODULE_OBJS[@]}"
120 121
@@ -36,6 +36,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -36,6 +36,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
36 #include <srs_core_pithy_print.hpp> 36 #include <srs_core_pithy_print.hpp>
37 #include <srs_core_config.hpp> 37 #include <srs_core_config.hpp>
38 #include <srs_core_refer.hpp> 38 #include <srs_core_refer.hpp>
  39 +#include <srs_core_hls.hpp>
39 40
40 #define SRS_PULSE_TIMEOUT_MS 100 41 #define SRS_PULSE_TIMEOUT_MS 100
41 #define SRS_SEND_TIMEOUT_MS 5000000L 42 #define SRS_SEND_TIMEOUT_MS 5000000L
@@ -330,6 +331,7 @@ int SrsClient::publish(SrsSource* source, bool is_fmle) @@ -330,6 +331,7 @@ int SrsClient::publish(SrsSource* source, bool is_fmle)
330 331
331 SrsPithyPrint pithy_print(SRS_STAGE_PUBLISH_USER); 332 SrsPithyPrint pithy_print(SRS_STAGE_PUBLISH_USER);
332 333
  334 + SrsHLS* hls = source->get_hls();
333 while (true) { 335 while (true) {
334 // switch to other st-threads. 336 // switch to other st-threads.
335 st_usleep(0); 337 st_usleep(0);
@@ -23,3 +23,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -23,3 +23,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 23
24 #include <srs_core_hls.hpp> 24 #include <srs_core_hls.hpp>
25 25
  26 +SrsHLS::SrsHLS()
  27 +{
  28 +}
  29 +
  30 +SrsHLS::~SrsHLS()
  31 +{
  32 +}
  33 +
@@ -29,4 +29,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -29,4 +29,11 @@ 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 +class SrsHLS
  33 +{
  34 +public:
  35 + SrsHLS();
  36 + virtual ~SrsHLS();
  37 +};
  38 +
32 #endif 39 #endif
@@ -30,6 +30,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -30,6 +30,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30 #include <srs_core_autofree.hpp> 30 #include <srs_core_autofree.hpp>
31 #include <srs_core_amf0.hpp> 31 #include <srs_core_amf0.hpp>
32 #include <srs_core_codec.hpp> 32 #include <srs_core_codec.hpp>
  33 +#include <srs_core_hls.hpp>
33 34
34 #define CONST_MAX_JITTER_MS 500 35 #define CONST_MAX_JITTER_MS 500
35 #define DEFAULT_FRAME_TIME_MS 10 36 #define DEFAULT_FRAME_TIME_MS 10
@@ -240,6 +241,7 @@ SrsSource::SrsSource(std::string _stream_url) @@ -240,6 +241,7 @@ SrsSource::SrsSource(std::string _stream_url)
240 { 241 {
241 stream_url = _stream_url; 242 stream_url = _stream_url;
242 codec = new SrsCodec(); 243 codec = new SrsCodec();
  244 + hls = new SrsHLS();
243 245
244 cache_metadata = cache_sh_video = cache_sh_audio = NULL; 246 cache_metadata = cache_sh_video = cache_sh_audio = NULL;
245 247
@@ -265,13 +267,20 @@ SrsSource::~SrsSource() @@ -265,13 +267,20 @@ SrsSource::~SrsSource()
265 srs_freep(cache_sh_audio); 267 srs_freep(cache_sh_audio);
266 268
267 srs_freep(codec); 269 srs_freep(codec);
  270 + srs_freep(hls);
  271 +}
  272 +
  273 +SrsHLS* SrsSource::get_hls()
  274 +{
  275 + return hls;
268 } 276 }
269 277
270 int SrsSource::on_meta_data(SrsCommonMessage* msg, SrsOnMetaDataPacket* metadata) 278 int SrsSource::on_meta_data(SrsCommonMessage* msg, SrsOnMetaDataPacket* metadata)
271 { 279 {
272 int ret = ERROR_SUCCESS; 280 int ret = ERROR_SUCCESS;
273 281
274 - metadata->metadata->set("server", new SrsAmf0String( 282 + metadata->metadata->set("server", new SrsAmf0String(RTMP_SIG_SRS_KEY));
  283 + metadata->metadata->set("srs_server", new SrsAmf0String(
275 RTMP_SIG_SRS_KEY" "RTMP_SIG_SRS_VERSION" ("RTMP_SIG_SRS_URL_SHORT")")); 284 RTMP_SIG_SRS_KEY" "RTMP_SIG_SRS_VERSION" ("RTMP_SIG_SRS_URL_SHORT")"));
276 285
277 SrsAmf0Any* prop = NULL; 286 SrsAmf0Any* prop = NULL;
@@ -418,6 +427,19 @@ int SrsSource::on_video(SrsCommonMessage* video) @@ -418,6 +427,19 @@ int SrsSource::on_video(SrsCommonMessage* video)
418 return ret; 427 return ret;
419 } 428 }
420 429
  430 +void SrsSource::on_unpublish()
  431 +{
  432 + clear_gop_cache();
  433 +
  434 + srs_freep(cache_metadata);
  435 + video_frame_rate = audio_sample_rate = 0;
  436 +
  437 + srs_freep(cache_sh_video);
  438 + srs_freep(cache_sh_audio);
  439 +
  440 + srs_trace("clear cache/metadata/sequence-headers when unpublish.");
  441 +}
  442 +
421 int SrsSource::create_consumer(SrsConsumer*& consumer) 443 int SrsSource::create_consumer(SrsConsumer*& consumer)
422 { 444 {
423 int ret = ERROR_SUCCESS; 445 int ret = ERROR_SUCCESS;
@@ -466,19 +488,6 @@ void SrsSource::on_consumer_destroy(SrsConsumer* consumer) @@ -466,19 +488,6 @@ void SrsSource::on_consumer_destroy(SrsConsumer* consumer)
466 srs_info("handle consumer destroy success."); 488 srs_info("handle consumer destroy success.");
467 } 489 }
468 490
469 -void SrsSource::on_unpublish()  
470 -{  
471 - clear_gop_cache();  
472 -  
473 - srs_freep(cache_metadata);  
474 - video_frame_rate = audio_sample_rate = 0;  
475 -  
476 - srs_freep(cache_sh_video);  
477 - srs_freep(cache_sh_audio);  
478 -  
479 - srs_trace("clear cache/metadata/sequence-headers when unpublish.");  
480 -}  
481 -  
482 void SrsSource::set_cache(bool enabled) 491 void SrsSource::set_cache(bool enabled)
483 { 492 {
484 enable_gop_cache = enabled; 493 enable_gop_cache = enabled;
@@ -39,6 +39,7 @@ class SrsSource; @@ -39,6 +39,7 @@ class SrsSource;
39 class SrsCommonMessage; 39 class SrsCommonMessage;
40 class SrsOnMetaDataPacket; 40 class SrsOnMetaDataPacket;
41 class SrsSharedPtrMessage; 41 class SrsSharedPtrMessage;
  42 +class SrsHLS;
42 43
43 /** 44 /**
44 * the consumer for SrsSource, that is a play client. 45 * the consumer for SrsSource, that is a play client.
@@ -106,6 +107,7 @@ public: @@ -106,6 +107,7 @@ public:
106 */ 107 */
107 static SrsSource* find(std::string stream_url); 108 static SrsSource* find(std::string stream_url);
108 private: 109 private:
  110 + SrsHLS* hls;
109 SrsCodec* codec; 111 SrsCodec* codec;
110 std::string stream_url; 112 std::string stream_url;
111 std::vector<SrsConsumer*> consumers; 113 std::vector<SrsConsumer*> consumers;
@@ -144,13 +146,19 @@ public: @@ -144,13 +146,19 @@ public:
144 SrsSource(std::string _stream_url); 146 SrsSource(std::string _stream_url);
145 virtual ~SrsSource(); 147 virtual ~SrsSource();
146 public: 148 public:
  149 + /**
  150 + * get the hls handler, which has a long lifecycle
  151 + * util the source destroyed.
  152 + */
  153 + virtual SrsHLS* get_hls();
  154 +public:
147 virtual int on_meta_data(SrsCommonMessage* msg, SrsOnMetaDataPacket* metadata); 155 virtual int on_meta_data(SrsCommonMessage* msg, SrsOnMetaDataPacket* metadata);
148 virtual int on_audio(SrsCommonMessage* audio); 156 virtual int on_audio(SrsCommonMessage* audio);
149 virtual int on_video(SrsCommonMessage* video); 157 virtual int on_video(SrsCommonMessage* video);
  158 + virtual void on_unpublish();
150 public: 159 public:
151 virtual int create_consumer(SrsConsumer*& consumer); 160 virtual int create_consumer(SrsConsumer*& consumer);
152 virtual void on_consumer_destroy(SrsConsumer* consumer); 161 virtual void on_consumer_destroy(SrsConsumer* consumer);
153 - virtual void on_unpublish();  
154 virtual void set_cache(bool enabled); 162 virtual void set_cache(bool enabled);
155 private: 163 private:
156 /** 164 /**