From a4bb03b9d6ed139251f8e9bf87ceee9dea0ebde1 Mon Sep 17 00:00:00 2001 From: winlin Date: Thu, 18 Aug 2016 11:27:11 +0800 Subject: [PATCH 1/2] ignore other 264 frame except sps,pps,idr,nonidr --- trunk/src/libs/srs_librtmp.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/trunk/src/libs/srs_librtmp.cpp b/trunk/src/libs/srs_librtmp.cpp index d61a11754..9cdc7c8e0 100644 --- a/trunk/src/libs/srs_librtmp.cpp +++ b/trunk/src/libs/srs_librtmp.cpp @@ -1366,6 +1366,11 @@ int srs_write_h264_raw_frame(Context* context, char* frame, int frame_size, u_int32_t dts, u_int32_t pts ) { int ret = ERROR_SUCCESS; + + // empty frame. + if (frame_size <= 0) { + return ret; + } // for sps if (context->avc_raw.is_sps(frame, frame_size)) { @@ -1399,6 +1404,15 @@ int srs_write_h264_raw_frame(Context* context, return ret; } + // ignore others. + // 5bits, 7.3.1 NAL unit syntax, + // H.264-AVC-ISO_IEC_14496-10.pdf, page 44. + // 7: SPS, 8: PPS, 5: I Frame, 1: P Frame + SrsAvcNaluType nut = (SrsAvcNaluType)(frame[0] & 0x1f); + if (nut != SrsAvcNaluTypeSPS && nut != SrsAvcNaluTypePPS && nut != SrsAvcNaluTypeIDR && nut != SrsAvcNaluTypeNonIDR) { + return ret; + } + // send pps+sps before ipb frames when sps/pps changed. if ((ret = srs_write_h264_sps_pps(context, dts, pts)) != ERROR_SUCCESS) { return ret; From f080537887050c63aa9460cbfc5725bd500ce59d Mon Sep 17 00:00:00 2001 From: winlin Date: Thu, 18 Aug 2016 11:28:54 +0800 Subject: [PATCH 2/2] update readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index cd1d37c84..495e5b215 100755 --- a/README.md +++ b/README.md @@ -340,6 +340,7 @@ Remark: ## History +* v2.0, 2016-08-18, fix [srs-librtmp#4](https://github.com/ossrs/srs-librtmp/issues/4) filter frame. * v2.0, 2016-08-10, fix socket timeout for librtmp. * v2.0, 2016-08-08, fix the crash by srs_info log. * v2.0, 2016-08-06, [2.0 beta0(2.0.210)][r2.0b0] released. 89704 lines.