mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
For #299, refine the codec info structure.
This commit is contained in:
parent
5e419c66f8
commit
c4a510b834
10 changed files with 574 additions and 298 deletions
|
@ -50,6 +50,7 @@ using namespace std;
|
|||
#include <srs_kernel_ts.hpp>
|
||||
#include <srs_app_utility.hpp>
|
||||
#include <srs_app_http_hooks.hpp>
|
||||
#include <srs_protocol_format.hpp>
|
||||
|
||||
// drop the segment when duration of ts too small.
|
||||
#define SRS_AUTO_HLS_SEGMENT_MIN_DURATION_MS 100
|
||||
|
@ -1117,13 +1118,12 @@ SrsHls::SrsHls()
|
|||
{
|
||||
req = NULL;
|
||||
hub = NULL;
|
||||
format = NULL;
|
||||
|
||||
enabled = false;
|
||||
disposable = false;
|
||||
last_update_time = 0;
|
||||
|
||||
codec = new SrsAvcAacCodec();
|
||||
sample = new SrsCodecSample();
|
||||
jitter = new SrsRtmpJitter();
|
||||
|
||||
muxer = new SrsHlsMuxer();
|
||||
|
@ -1135,8 +1135,6 @@ SrsHls::SrsHls()
|
|||
|
||||
SrsHls::~SrsHls()
|
||||
{
|
||||
srs_freep(codec);
|
||||
srs_freep(sample);
|
||||
srs_freep(jitter);
|
||||
|
||||
srs_freep(muxer);
|
||||
|
@ -1188,12 +1186,13 @@ int SrsHls::cycle()
|
|||
return ret;
|
||||
}
|
||||
|
||||
int SrsHls::initialize(SrsOriginHub* h, SrsRequest* r)
|
||||
int SrsHls::initialize(SrsOriginHub* h, SrsFormat* f, SrsRequest* r)
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
hub = h;
|
||||
req = r;
|
||||
format = f;
|
||||
|
||||
if ((ret = muxer->initialize()) != ERROR_SUCCESS) {
|
||||
return ret;
|
||||
|
|
|
@ -36,12 +36,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#include <srs_kernel_file.hpp>
|
||||
#include <srs_app_async_call.hpp>
|
||||
|
||||
class SrsFormat;
|
||||
class SrsSharedPtrMessage;
|
||||
class SrsCodecSample;
|
||||
class SrsAmf0Object;
|
||||
class SrsRtmpJitter;
|
||||
class SrsTSMuxer;
|
||||
class SrsAvcAacCodec;
|
||||
class SrsRequest;
|
||||
class SrsPithyPrint;
|
||||
class SrsSource;
|
||||
|
@ -343,8 +342,7 @@ private:
|
|||
};
|
||||
|
||||
/**
|
||||
* delivery RTMP stream to HLS(m3u8 and ts),
|
||||
* SrsHls provides interface with SrsSource.
|
||||
* Transmux RTMP stream to HLS(m3u8 and ts).
|
||||
* TODO: FIXME: add utest for hls.
|
||||
*/
|
||||
class SrsHls
|
||||
|
@ -359,8 +357,7 @@ private:
|
|||
int64_t last_update_time;
|
||||
private:
|
||||
SrsOriginHub* hub;
|
||||
SrsAvcAacCodec* codec;
|
||||
SrsCodecSample* sample;
|
||||
SrsFormat* format;
|
||||
SrsRtmpJitter* jitter;
|
||||
SrsPithyPrint* pprint;
|
||||
/**
|
||||
|
@ -387,7 +384,7 @@ public:
|
|||
/**
|
||||
* initialize the hls by handler and source.
|
||||
*/
|
||||
virtual int initialize(SrsOriginHub* h, SrsRequest* r);
|
||||
virtual int initialize(SrsOriginHub* h, SrsFormat* f, SrsRequest* r);
|
||||
/**
|
||||
* publish stream event, continue to write the m3u8,
|
||||
* for the muxer object not destroyed.
|
||||
|
|
|
@ -48,6 +48,7 @@ using namespace std;
|
|||
#include <srs_protocol_utility.hpp>
|
||||
#include <srs_app_ng_exec.hpp>
|
||||
#include <srs_app_dash.hpp>
|
||||
#include <srs_protocol_format.hpp>
|
||||
|
||||
#define CONST_MAX_JITTER_MS 250
|
||||
#define CONST_MAX_JITTER_MS_NEG -250
|
||||
|
@ -853,6 +854,7 @@ SrsOriginHub::SrsOriginHub()
|
|||
hds = new SrsHds();
|
||||
#endif
|
||||
ng_exec = new SrsNgExec();
|
||||
format = new SrsFormat();
|
||||
|
||||
_srs_config->subscribe(this);
|
||||
}
|
||||
|
@ -871,6 +873,7 @@ SrsOriginHub::~SrsOriginHub()
|
|||
}
|
||||
srs_freep(ng_exec);
|
||||
|
||||
srs_freep(format);
|
||||
srs_freep(hls);
|
||||
srs_freep(dash);
|
||||
srs_freep(dvr);
|
||||
|
@ -889,7 +892,11 @@ int SrsOriginHub::initialize(SrsSource* s, SrsRequest* r)
|
|||
req = r;
|
||||
source = s;
|
||||
|
||||
if ((ret = hls->initialize(this, req)) != ERROR_SUCCESS) {
|
||||
if ((ret = format->initialize()) != ERROR_SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
if ((ret = hls->initialize(this, format, req)) != ERROR_SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -924,10 +931,15 @@ int SrsOriginHub::cycle()
|
|||
return ret;
|
||||
}
|
||||
|
||||
int SrsOriginHub::on_meta_data(SrsSharedPtrMessage* shared_metadata)
|
||||
int SrsOriginHub::on_meta_data(SrsSharedPtrMessage* shared_metadata, SrsOnMetaDataPacket* packet)
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
if ((ret = format->on_metadata(packet)) != ERROR_SUCCESS) {
|
||||
srs_error("Codec parse metadata failed, ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
// copy to all forwarders
|
||||
if (true) {
|
||||
std::vector<SrsForwarder*>::iterator it;
|
||||
|
@ -954,6 +966,11 @@ int SrsOriginHub::on_audio(SrsSharedPtrMessage* shared_audio)
|
|||
|
||||
SrsSharedPtrMessage* msg = shared_audio;
|
||||
|
||||
if ((ret = format->on_audio(msg)) != ERROR_SUCCESS) {
|
||||
srs_error("Codec parse audio failed, ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if ((ret = hls->on_audio(msg)) != ERROR_SUCCESS) {
|
||||
// apply the error strategy for hls.
|
||||
// @see https://github.com/ossrs/srs/issues/264
|
||||
|
@ -1027,6 +1044,11 @@ int SrsOriginHub::on_video(SrsSharedPtrMessage* shared_video, bool is_sequence_h
|
|||
|
||||
SrsSharedPtrMessage* msg = shared_video;
|
||||
|
||||
if ((ret = format->on_video(msg, is_sequence_header)) != ERROR_SUCCESS) {
|
||||
srs_error("Codec parse video failed, ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if ((ret = hls->on_video(msg, is_sequence_header)) != ERROR_SUCCESS) {
|
||||
// apply the error strategy for hls.
|
||||
// @see https://github.com/ossrs/srs/issues/264
|
||||
|
@ -2048,7 +2070,7 @@ int SrsSource::on_meta_data(SrsCommonMessage* msg, SrsOnMetaDataPacket* metadata
|
|||
}
|
||||
|
||||
// Copy to hub to all utilities.
|
||||
return hub->on_meta_data(meta->data());
|
||||
return hub->on_meta_data(meta->data(), metadata);
|
||||
}
|
||||
|
||||
int SrsSource::on_audio(SrsCommonMessage* shared_audio)
|
||||
|
|
|
@ -38,6 +38,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
#include <srs_app_reload.hpp>
|
||||
#include <srs_core_performance.hpp>
|
||||
|
||||
class SrsFormat;
|
||||
class SrsConsumer;
|
||||
class SrsPlayEdge;
|
||||
class SrsPublishEdge;
|
||||
|
@ -421,6 +422,8 @@ private:
|
|||
// Whether the stream hub is active, or stream is publishing.
|
||||
bool is_active;
|
||||
private:
|
||||
// The format, codec information.
|
||||
SrsFormat* format;
|
||||
// hls handler.
|
||||
SrsHls* hls;
|
||||
// The DASH encoder.
|
||||
|
@ -454,7 +457,7 @@ public:
|
|||
virtual int cycle();
|
||||
public:
|
||||
// When got a parsed metadata.
|
||||
virtual int on_meta_data(SrsSharedPtrMessage* shared_metadata);
|
||||
virtual int on_meta_data(SrsSharedPtrMessage* shared_metadata, SrsOnMetaDataPacket* packet);
|
||||
// When got a parsed audio packet.
|
||||
virtual int on_audio(SrsSharedPtrMessage* shared_audio);
|
||||
// When got a parsed video packet.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue