mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
for #250, decode the ts packet header and adaptation field.
This commit is contained in:
parent
bd395904df
commit
51aecb8fde
5 changed files with 305 additions and 17 deletions
|
@ -33,16 +33,21 @@ using namespace std;
|
|||
#include <srs_kernel_log.hpp>
|
||||
#include <srs_app_config.hpp>
|
||||
#include <srs_kernel_ts.hpp>
|
||||
#include <srs_kernel_stream.hpp>
|
||||
#include <srs_kernel_ts.hpp>
|
||||
#include <srs_core_autofree.hpp>
|
||||
|
||||
#ifdef SRS_AUTO_STREAM_CASTER
|
||||
|
||||
SrsMpegtsOverUdp::SrsMpegtsOverUdp(SrsConfDirective* c)
|
||||
{
|
||||
stream = new SrsStream();
|
||||
output = _srs_config->get_stream_caster_output(c);
|
||||
}
|
||||
|
||||
SrsMpegtsOverUdp::~SrsMpegtsOverUdp()
|
||||
{
|
||||
srs_freep(stream);
|
||||
}
|
||||
|
||||
int SrsMpegtsOverUdp::on_udp_packet(sockaddr_in* from, char* buf, int nb_buf)
|
||||
|
@ -59,22 +64,36 @@ int SrsMpegtsOverUdp::on_udp_packet(sockaddr_in* from, char* buf, int nb_buf)
|
|||
}
|
||||
srs_info("udp: got %s:%d packet %d bytes", peer_ip.c_str(), peer_port, nb_buf);
|
||||
|
||||
// process each ts packet
|
||||
// use stream to parse ts packet.
|
||||
for (int i = 0; i < nb_buf; i += SRS_TS_PACKET_SIZE) {
|
||||
char* ts_packet = buf + i;
|
||||
if ((ret = on_ts_packet(ts_packet)) != ERROR_SUCCESS) {
|
||||
srs_warn("mpegts: ignore ts packet error. ret=%d", ret);
|
||||
continue;
|
||||
if ((ret = stream->initialize(buf + i, SRS_TS_PACKET_SIZE)) != ERROR_SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
// process each ts packet
|
||||
if ((ret = on_ts_packet(stream)) != ERROR_SUCCESS) {
|
||||
break;
|
||||
}
|
||||
srs_info("mpegts: parse ts packet completed");
|
||||
}
|
||||
srs_info("mpegts: parse udp packet completed");
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int SrsMpegtsOverUdp::on_ts_packet(SrsStream* stream)
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
SrsTsPacket* packet = new SrsTsPacket();
|
||||
SrsAutoFree(SrsTsPacket, packet);
|
||||
|
||||
if ((ret = packet->decode(stream)) != ERROR_SUCCESS) {
|
||||
srs_error("mpegts: decode ts packet failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int SrsMpegtsOverUdp::on_ts_packet(char* ts_packet)
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -33,6 +33,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
class sockaddr_in;
|
||||
#include <string>
|
||||
|
||||
class SrsStream;
|
||||
class SrsConfDirective;
|
||||
|
||||
#ifdef SRS_AUTO_STREAM_CASTER
|
||||
|
@ -43,6 +44,7 @@ class SrsConfDirective;
|
|||
class SrsMpegtsOverUdp
|
||||
{
|
||||
private:
|
||||
SrsStream* stream;
|
||||
std::string output;
|
||||
public:
|
||||
SrsMpegtsOverUdp(SrsConfDirective* c);
|
||||
|
@ -60,9 +62,9 @@ public:
|
|||
virtual int on_udp_packet(sockaddr_in* from, char* buf, int nb_buf);
|
||||
private:
|
||||
/**
|
||||
* when got a ts packet, in size TS_PACKET_SIZE.
|
||||
* the stream contains the ts packet to parse.
|
||||
*/
|
||||
virtual int on_ts_packet(char* ts_packet);
|
||||
virtual int on_ts_packet(SrsStream* stream);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue