mirror of
https://github.com/ossrs/srs.git
synced 2025-02-13 20:01:56 +00:00
ps to rtmp via source, h264 start code with replace nalulen
This commit is contained in:
parent
194dcf504b
commit
9855e6a715
2 changed files with 36 additions and 4 deletions
|
@ -41,6 +41,9 @@
|
||||||
#include <srs_kernel_file.hpp>
|
#include <srs_kernel_file.hpp>
|
||||||
#include <srs_protocol_json.hpp>
|
#include <srs_protocol_json.hpp>
|
||||||
#include <srs_app_gb28181_sip.hpp>
|
#include <srs_app_gb28181_sip.hpp>
|
||||||
|
#include <srs_app_gb28181_jitbuffer.hpp>
|
||||||
|
#include <srs_rtmp_stack.hpp>
|
||||||
|
#include <srs_app_source.hpp>
|
||||||
|
|
||||||
#define RTP_PORT_MODE_FIXED "fixed"
|
#define RTP_PORT_MODE_FIXED "fixed"
|
||||||
#define RTP_PORT_MODE_RANDOM "random"
|
#define RTP_PORT_MODE_RANDOM "random"
|
||||||
|
@ -66,6 +69,10 @@ class SrsGb28181PsRtpProcessor;
|
||||||
class SrsGb28181SipService;
|
class SrsGb28181SipService;
|
||||||
class SrsGb28181StreamChannel;
|
class SrsGb28181StreamChannel;
|
||||||
class SrsGb28181SipSession;
|
class SrsGb28181SipSession;
|
||||||
|
class SrsPsJitterBuffer;
|
||||||
|
class SrsServer;
|
||||||
|
class SrsSource;
|
||||||
|
class SrsRequest;
|
||||||
|
|
||||||
//ps rtp header packet parse
|
//ps rtp header packet parse
|
||||||
class SrsPsRtpPacket: public SrsRtpPacket
|
class SrsPsRtpPacket: public SrsRtpPacket
|
||||||
|
@ -73,6 +80,7 @@ class SrsPsRtpPacket: public SrsRtpPacket
|
||||||
public:
|
public:
|
||||||
SrsPsRtpPacket();
|
SrsPsRtpPacket();
|
||||||
virtual ~SrsPsRtpPacket();
|
virtual ~SrsPsRtpPacket();
|
||||||
|
bool isFirstPacket;
|
||||||
public:
|
public:
|
||||||
virtual srs_error_t decode(SrsBuffer* stream);
|
virtual srs_error_t decode(SrsBuffer* stream);
|
||||||
};
|
};
|
||||||
|
@ -129,9 +137,15 @@ private:
|
||||||
bool can_send_ps_av_packet();
|
bool can_send_ps_av_packet();
|
||||||
void dispose();
|
void dispose();
|
||||||
void clear_pre_packet();
|
void clear_pre_packet();
|
||||||
|
SrsGb28181RtmpMuxer* create_rtmpmuxer(std::string channel_id, uint32_t ssrc);
|
||||||
|
srs_error_t rtmpmuxer_enqueue_data(SrsGb28181RtmpMuxer *muxer, uint32_t ssrc,
|
||||||
|
int peer_port, std::string address_string, SrsPsRtpPacket *pkt);
|
||||||
// Interface ISrsUdpHandler
|
// Interface ISrsUdpHandler
|
||||||
public:
|
public:
|
||||||
virtual srs_error_t on_udp_packet(const sockaddr* from, const int fromlen, char* buf, int nb_buf);
|
virtual srs_error_t on_udp_packet(const sockaddr* from, const int fromlen, char* buf, int nb_buf);
|
||||||
|
public:
|
||||||
|
virtual srs_error_t on_rtp_packet_jitter(const sockaddr* from, const int fromlen, char* buf, int nb_buf);
|
||||||
|
virtual srs_error_t on_rtp_packet(const sockaddr* from, const int fromlen, char* buf, int nb_buf);
|
||||||
};
|
};
|
||||||
|
|
||||||
//ps stream processing parsing interface
|
//ps stream processing parsing interface
|
||||||
|
@ -242,6 +256,15 @@ private:
|
||||||
SrsRawAacStream* aac;
|
SrsRawAacStream* aac;
|
||||||
std::string aac_specific_config;
|
std::string aac_specific_config;
|
||||||
|
|
||||||
|
SrsRequest* req;
|
||||||
|
SrsSource* source;
|
||||||
|
SrsServer* server;
|
||||||
|
|
||||||
|
SrsPsJitterBuffer *jitter_buffer;
|
||||||
|
char *ps_buffer;
|
||||||
|
|
||||||
|
bool source_publish;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
std::queue<SrsPsRtpPacket*> ps_queue;
|
std::queue<SrsPsRtpPacket*> ps_queue;
|
||||||
|
|
||||||
|
@ -252,6 +275,7 @@ public:
|
||||||
public:
|
public:
|
||||||
virtual srs_error_t serve();
|
virtual srs_error_t serve();
|
||||||
virtual void stop();
|
virtual void stop();
|
||||||
|
srs_error_t initialize(SrsServer* s, SrsRequest* r);
|
||||||
|
|
||||||
virtual std::string get_channel_id();
|
virtual std::string get_channel_id();
|
||||||
virtual void ps_packet_enqueue(SrsPsRtpPacket *pkt);
|
virtual void ps_packet_enqueue(SrsPsRtpPacket *pkt);
|
||||||
|
@ -265,6 +289,8 @@ public:
|
||||||
virtual SrsGb28181StreamChannel get_channel();
|
virtual SrsGb28181StreamChannel get_channel();
|
||||||
srs_utime_t get_recv_stream_time();
|
srs_utime_t get_recv_stream_time();
|
||||||
|
|
||||||
|
void insert_jitterbuffer(SrsPsRtpPacket *pkt);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
virtual srs_error_t do_cycle();
|
virtual srs_error_t do_cycle();
|
||||||
virtual void destroy();
|
virtual void destroy();
|
||||||
|
@ -277,10 +303,14 @@ public:
|
||||||
virtual srs_error_t on_rtp_video(SrsSimpleStream* stream, int64_t dts);
|
virtual srs_error_t on_rtp_video(SrsSimpleStream* stream, int64_t dts);
|
||||||
virtual srs_error_t on_rtp_audio(SrsSimpleStream* stream, int64_t dts);
|
virtual srs_error_t on_rtp_audio(SrsSimpleStream* stream, int64_t dts);
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
srs_error_t replace_startcode_with_nalulen(char *video_data, int &size, uint32_t pts, uint32_t dts);
|
||||||
|
srs_error_t write_h264_ipb_frame2(char *frame, int frame_size, uint32_t pts, uint32_t dts);
|
||||||
virtual srs_error_t write_h264_sps_pps(uint32_t dts, uint32_t pts);
|
virtual srs_error_t write_h264_sps_pps(uint32_t dts, uint32_t pts);
|
||||||
virtual srs_error_t write_h264_ipb_frame(char* frame, int frame_size, uint32_t dts, uint32_t pts);
|
virtual srs_error_t write_h264_ipb_frame(char* frame, int frame_size, uint32_t dts, uint32_t pts, bool b = true);
|
||||||
virtual srs_error_t write_audio_raw_frame(char* frame, int frame_size, SrsRawAacStreamCodec* codec, uint32_t dts);
|
virtual srs_error_t write_audio_raw_frame(char* frame, int frame_size, SrsRawAacStreamCodec* codec, uint32_t dts);
|
||||||
virtual srs_error_t rtmp_write_packet(char type, uint32_t timestamp, char* data, int size);
|
virtual srs_error_t rtmp_write_packet(char type, uint32_t timestamp, char* data, int size);
|
||||||
|
virtual srs_error_t rtmp_write_packet_by_source(char type, uint32_t timestamp, char* data, int size);
|
||||||
private:
|
private:
|
||||||
// Connect to RTMP server.
|
// Connect to RTMP server.
|
||||||
virtual srs_error_t connect();
|
virtual srs_error_t connect();
|
||||||
|
@ -304,6 +334,7 @@ public:
|
||||||
int rtp_port_max;
|
int rtp_port_max;
|
||||||
int rtp_mux_port;
|
int rtp_mux_port;
|
||||||
bool auto_create_channel;
|
bool auto_create_channel;
|
||||||
|
bool jitterbuffer_enable;
|
||||||
|
|
||||||
//sip config
|
//sip config
|
||||||
int sip_port;
|
int sip_port;
|
||||||
|
@ -395,12 +426,13 @@ private:
|
||||||
std::map<std::string, SrsGb28181RtmpMuxer*> rtmpmuxers;
|
std::map<std::string, SrsGb28181RtmpMuxer*> rtmpmuxers;
|
||||||
SrsCoroutineManager* manager;
|
SrsCoroutineManager* manager;
|
||||||
SrsGb28181SipService* sip_service;
|
SrsGb28181SipService* sip_service;
|
||||||
|
SrsServer* server;
|
||||||
public:
|
public:
|
||||||
SrsGb28181Manger(SrsConfDirective* c);
|
SrsGb28181Manger(SrsServer* s, SrsConfDirective* c);
|
||||||
virtual ~SrsGb28181Manger();
|
virtual ~SrsGb28181Manger();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
srs_error_t fetch_or_create_rtmpmuxer(std::string id, SrsGb28181RtmpMuxer** gb28181);
|
srs_error_t fetch_or_create_rtmpmuxer(std::string id, SrsRequest *req, SrsGb28181RtmpMuxer** gb28181);
|
||||||
SrsGb28181RtmpMuxer* fetch_rtmpmuxer(std::string id);
|
SrsGb28181RtmpMuxer* fetch_rtmpmuxer(std::string id);
|
||||||
SrsGb28181RtmpMuxer* fetch_rtmpmuxer_by_ssrc(uint32_t ssrc);
|
SrsGb28181RtmpMuxer* fetch_rtmpmuxer_by_ssrc(uint32_t ssrc);
|
||||||
void rtmpmuxer_map_by_ssrc(SrsGb28181RtmpMuxer*muxer, uint32_t ssrc);
|
void rtmpmuxer_map_by_ssrc(SrsGb28181RtmpMuxer*muxer, uint32_t ssrc);
|
||||||
|
|
|
@ -1413,7 +1413,7 @@ srs_error_t SrsServer::listen_stream_caster()
|
||||||
#ifdef SRS_GB28181
|
#ifdef SRS_GB28181
|
||||||
//init global gb28181 manger
|
//init global gb28181 manger
|
||||||
if (_srs_gb28181 == NULL){
|
if (_srs_gb28181 == NULL){
|
||||||
_srs_gb28181 = new SrsGb28181Manger(stream_caster);
|
_srs_gb28181 = new SrsGb28181Manger(this, stream_caster);
|
||||||
if ((err = _srs_gb28181->initialize()) != srs_success){
|
if ((err = _srs_gb28181->initialize()) != srs_success){
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue