winlin

Merge branch '2.0release' into develop

@@ -403,6 +403,7 @@ Remark: @@ -403,6 +403,7 @@ Remark:
403 ======= 403 =======
404 ## History 404 ## History
405 405
  406 +* v2.0, 2016-08-18, fix [srs-librtmp#4](https://github.com/ossrs/srs-librtmp/issues/4) filter frame.
406 * v2.0, 2016-08-10, fix socket timeout for librtmp. 407 * v2.0, 2016-08-10, fix socket timeout for librtmp.
407 * v2.0, 2016-08-08, fix the crash by srs_info log. 408 * v2.0, 2016-08-08, fix the crash by srs_info log.
408 * <strong>v2.0, 2016-08-06, [2.0 beta0(2.0.210)][r2.0b0] released. 89704 lines.</strong> 409 * <strong>v2.0, 2016-08-06, [2.0 beta0(2.0.210)][r2.0b0] released. 89704 lines.</strong>
@@ -1393,6 +1393,11 @@ int srs_write_h264_raw_frame(Context* context, @@ -1393,6 +1393,11 @@ int srs_write_h264_raw_frame(Context* context,
1393 ) { 1393 ) {
1394 int ret = ERROR_SUCCESS; 1394 int ret = ERROR_SUCCESS;
1395 1395
  1396 + // empty frame.
  1397 + if (frame_size <= 0) {
  1398 + return ret;
  1399 + }
  1400 +
1396 // for sps 1401 // for sps
1397 if (context->avc_raw.is_sps(frame, frame_size)) { 1402 if (context->avc_raw.is_sps(frame, frame_size)) {
1398 std::string sps; 1403 std::string sps;
@@ -1425,6 +1430,15 @@ int srs_write_h264_raw_frame(Context* context, @@ -1425,6 +1430,15 @@ int srs_write_h264_raw_frame(Context* context,
1425 return ret; 1430 return ret;
1426 } 1431 }
1427 1432
  1433 + // ignore others.
  1434 + // 5bits, 7.3.1 NAL unit syntax,
  1435 + // H.264-AVC-ISO_IEC_14496-10.pdf, page 44.
  1436 + // 7: SPS, 8: PPS, 5: I Frame, 1: P Frame
  1437 + SrsAvcNaluType nut = (SrsAvcNaluType)(frame[0] & 0x1f);
  1438 + if (nut != SrsAvcNaluTypeSPS && nut != SrsAvcNaluTypePPS && nut != SrsAvcNaluTypeIDR && nut != SrsAvcNaluTypeNonIDR) {
  1439 + return ret;
  1440 + }
  1441 +
1428 // send pps+sps before ipb frames when sps/pps changed. 1442 // send pps+sps before ipb frames when sps/pps changed.
1429 if ((ret = srs_write_h264_sps_pps(context, dts, pts)) != ERROR_SUCCESS) { 1443 if ((ret = srs_write_h264_sps_pps(context, dts, pts)) != ERROR_SUCCESS) {
1430 return ret; 1444 return ret;