1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

fix bug to accept FFMPEG streaming

This commit is contained in:
winlin 2013-10-23 00:01:59 +08:00
parent 150489af51
commit 444a45facd
3 changed files with 40 additions and 5 deletions

View file

@ -74,9 +74,11 @@ extern ILogContext* log_context;
#define srs_error(msg, ...) printf("[%s][%d][error][%s] ", log_context->format_time(), log_context->get_id(), __PRETTY_FUNCTION__);printf(msg, ##__VA_ARGS__);printf(" errno=%d(%s)", errno, strerror(errno));printf("\n")
#endif
#if 0
#if 1
#undef srs_verbose
#define srs_verbose(msg, ...) (void)0
#endif
#if 1
#undef srs_info
#define srs_info(msg, ...) (void)0
#endif

View file

@ -94,6 +94,8 @@ SrsSource::SrsSource(std::string _stream_url)
{
stream_url = _stream_url;
cache_metadata = NULL;
cache_sh_video = NULL;
cache_sh_audio = NULL;
}
SrsSource::~SrsSource()
@ -106,6 +108,8 @@ SrsSource::~SrsSource()
consumers.clear();
srs_freep(cache_metadata);
srs_freep(cache_sh_video);
srs_freep(cache_sh_audio);
}
int SrsSource::on_meta_data(SrsCommonMessage* msg, SrsOnMetaDataPacket* metadata)
@ -184,6 +188,11 @@ int SrsSource::on_audio(SrsCommonMessage* audio)
}
srs_info("dispatch audio success.");
if (!cache_sh_audio) {
srs_freep(cache_sh_audio);
cache_sh_audio = msg->copy();
}
return ret;
}
@ -214,19 +223,39 @@ int SrsSource::on_video(SrsCommonMessage* video)
}
srs_info("dispatch video success.");
if (!cache_sh_video) {
srs_freep(cache_sh_video);
cache_sh_video = msg->copy();
}
return ret;
}
int SrsSource::create_consumer(SrsConsumer*& consumer)
{
int ret = ERROR_SUCCESS;
consumer = new SrsConsumer();
consumers.push_back(consumer);
if (!cache_metadata) {
srs_info("no metadata found.");
return ERROR_SUCCESS;
}
return consumer->enqueue(cache_metadata->copy());
if (cache_metadata && (ret = consumer->enqueue(cache_metadata->copy())) != ERROR_SUCCESS) {
srs_error("dispatch metadata failed. ret=%d", ret);
return ret;
}
srs_info("dispatch metadata success");
if (cache_sh_video && (ret = consumer->enqueue(cache_sh_video->copy())) != ERROR_SUCCESS) {
srs_error("dispatch video sequence header failed. ret=%d", ret);
return ret;
}
srs_info("dispatch video sequence header success");
if (cache_sh_audio && (ret = consumer->enqueue(cache_sh_audio->copy())) != ERROR_SUCCESS) {
srs_error("dispatch audio sequence header failed. ret=%d", ret);
return ret;
}
srs_info("dispatch audio sequence header success");
return ret;
}

View file

@ -82,6 +82,10 @@ private:
std::vector<SrsConsumer*> consumers;
private:
SrsSharedPtrMessage* cache_metadata;
// the cached video sequence header.
SrsSharedPtrMessage* cache_sh_video;
// the cached audio sequence header.
SrsSharedPtrMessage* cache_sh_audio;
public:
SrsSource(std::string _stream_url);
virtual ~SrsSource();