正在显示
2 个修改的文件
包含
219 行增加
和
213 行删除
| @@ -701,23 +701,6 @@ int srs_publish_stream(srs_rtmp_t rtmp) | @@ -701,23 +701,6 @@ int srs_publish_stream(srs_rtmp_t rtmp) | ||
| 701 | return ret; | 701 | return ret; |
| 702 | } | 702 | } |
| 703 | 703 | ||
| 704 | -const char* srs_type2string(char type) | ||
| 705 | -{ | ||
| 706 | - static const char* audio = "Audio"; | ||
| 707 | - static const char* video = "Video"; | ||
| 708 | - static const char* data = "Data"; | ||
| 709 | - static const char* unknown = "Unknown"; | ||
| 710 | - | ||
| 711 | - switch (type) { | ||
| 712 | - case SRS_RTMP_TYPE_AUDIO: return audio; | ||
| 713 | - case SRS_RTMP_TYPE_VIDEO: return video; | ||
| 714 | - case SRS_RTMP_TYPE_SCRIPT: return data; | ||
| 715 | - default: return unknown; | ||
| 716 | - } | ||
| 717 | - | ||
| 718 | - return unknown; | ||
| 719 | -} | ||
| 720 | - | ||
| 721 | int srs_bandwidth_check(srs_rtmp_t rtmp, | 704 | int srs_bandwidth_check(srs_rtmp_t rtmp, |
| 722 | int64_t* start_time, int64_t* end_time, | 705 | int64_t* start_time, int64_t* end_time, |
| 723 | int* play_kbps, int* publish_kbps, | 706 | int* play_kbps, int* publish_kbps, |
| @@ -948,29 +931,6 @@ char srs_get_codec_id(char* data, int size) | @@ -948,29 +931,6 @@ char srs_get_codec_id(char* data, int size) | ||
| 948 | return codec_id; | 931 | return codec_id; |
| 949 | } | 932 | } |
| 950 | 933 | ||
| 951 | -const char* srs_code_id2string(char codec_id) | ||
| 952 | -{ | ||
| 953 | - static const char* h263 = "H.263"; | ||
| 954 | - static const char* screen = "Screen"; | ||
| 955 | - static const char* vp6 = "VP6"; | ||
| 956 | - static const char* vp6_alpha = "VP6Alpha"; | ||
| 957 | - static const char* screen2 = "Screen2"; | ||
| 958 | - static const char* h264 = "H.264"; | ||
| 959 | - static const char* unknown = "Unknown"; | ||
| 960 | - | ||
| 961 | - switch (codec_id) { | ||
| 962 | - case 2: return h263; | ||
| 963 | - case 3: return screen; | ||
| 964 | - case 4: return vp6; | ||
| 965 | - case 5: return vp6_alpha; | ||
| 966 | - case 6: return screen2; | ||
| 967 | - case 7: return h264; | ||
| 968 | - default: return unknown; | ||
| 969 | - } | ||
| 970 | - | ||
| 971 | - return unknown; | ||
| 972 | -} | ||
| 973 | - | ||
| 974 | char srs_get_avc_packet_type(char* data, int size) | 934 | char srs_get_avc_packet_type(char* data, int size) |
| 975 | { | 935 | { |
| 976 | if (size < 2) { | 936 | if (size < 2) { |
| @@ -990,23 +950,6 @@ char srs_get_avc_packet_type(char* data, int size) | @@ -990,23 +950,6 @@ char srs_get_avc_packet_type(char* data, int size) | ||
| 990 | return avc_packet_type; | 950 | return avc_packet_type; |
| 991 | } | 951 | } |
| 992 | 952 | ||
| 993 | -const char* srs_avc_packet2string(char avc_packet_type) | ||
| 994 | -{ | ||
| 995 | - static const char* sps_pps = "SpsPps"; | ||
| 996 | - static const char* nalu = "Nalu"; | ||
| 997 | - static const char* sps_pps_end = "SpsPpsEnd"; | ||
| 998 | - static const char* unknown = "Unknown"; | ||
| 999 | - | ||
| 1000 | - switch (avc_packet_type) { | ||
| 1001 | - case 0: return sps_pps; | ||
| 1002 | - case 1: return nalu; | ||
| 1003 | - case 2: return sps_pps_end; | ||
| 1004 | - default: return unknown; | ||
| 1005 | - } | ||
| 1006 | - | ||
| 1007 | - return unknown; | ||
| 1008 | -} | ||
| 1009 | - | ||
| 1010 | char srs_get_frame_type(char* data, int size) | 953 | char srs_get_frame_type(char* data, int size) |
| 1011 | { | 954 | { |
| 1012 | if (size < 1) { | 955 | if (size < 1) { |
| @@ -1026,101 +969,6 @@ char srs_get_frame_type(char* data, int size) | @@ -1026,101 +969,6 @@ char srs_get_frame_type(char* data, int size) | ||
| 1026 | return frame_type; | 969 | return frame_type; |
| 1027 | } | 970 | } |
| 1028 | 971 | ||
| 1029 | -const char* srs_frame_type2string(char frame_type) | ||
| 1030 | -{ | ||
| 1031 | - static const char* keyframe = "I"; | ||
| 1032 | - static const char* interframe = "P/B"; | ||
| 1033 | - static const char* disposable_interframe = "DI"; | ||
| 1034 | - static const char* generated_keyframe = "GI"; | ||
| 1035 | - static const char* video_infoframe = "VI"; | ||
| 1036 | - static const char* unknown = "Unknown"; | ||
| 1037 | - | ||
| 1038 | - switch (frame_type) { | ||
| 1039 | - case 1: return keyframe; | ||
| 1040 | - case 2: return interframe; | ||
| 1041 | - case 3: return disposable_interframe; | ||
| 1042 | - case 4: return generated_keyframe; | ||
| 1043 | - case 5: return video_infoframe; | ||
| 1044 | - default: return unknown; | ||
| 1045 | - } | ||
| 1046 | - | ||
| 1047 | - return unknown; | ||
| 1048 | -} | ||
| 1049 | - | ||
| 1050 | -int srs_print_rtmp_packet(char type, u_int32_t timestamp, char* data, int size) | ||
| 1051 | -{ | ||
| 1052 | - int ret = ERROR_SUCCESS; | ||
| 1053 | - | ||
| 1054 | - u_int32_t pts; | ||
| 1055 | - if (srs_parse_timestamp(timestamp, type, data, size, &pts) != 0) { | ||
| 1056 | - return ret; | ||
| 1057 | - } | ||
| 1058 | - | ||
| 1059 | - if (type == SRS_RTMP_TYPE_VIDEO) { | ||
| 1060 | - srs_lib_trace("Video packet type=%s, dts=%d, pts=%d, size=%d, %s(%s,%s)", | ||
| 1061 | - srs_type2string(type), timestamp, pts, size, | ||
| 1062 | - srs_code_id2string(srs_get_codec_id(data, size)), | ||
| 1063 | - srs_avc_packet2string(srs_get_avc_packet_type(data, size)), | ||
| 1064 | - srs_frame_type2string(srs_get_frame_type(data, size)) | ||
| 1065 | - ); | ||
| 1066 | - } else if (type == SRS_RTMP_TYPE_AUDIO) { | ||
| 1067 | - srs_lib_trace("Audio packet type=%s, dts=%d, pts=%d, size=%d", | ||
| 1068 | - srs_type2string(type), timestamp, pts, size); | ||
| 1069 | - } else if (type == SRS_RTMP_TYPE_SCRIPT) { | ||
| 1070 | - srs_lib_verbose("Data packet type=%s, time=%d, size=%d", | ||
| 1071 | - srs_type2string(type), timestamp, size); | ||
| 1072 | - int nparsed = 0; | ||
| 1073 | - while (nparsed < size) { | ||
| 1074 | - int nb_parsed_this = 0; | ||
| 1075 | - srs_amf0_t amf0 = srs_amf0_parse(data + nparsed, size - nparsed, &nb_parsed_this); | ||
| 1076 | - if (amf0 == NULL) { | ||
| 1077 | - break; | ||
| 1078 | - } | ||
| 1079 | - | ||
| 1080 | - nparsed += nb_parsed_this; | ||
| 1081 | - | ||
| 1082 | - char* amf0_str = NULL; | ||
| 1083 | - srs_raw_trace("%s", srs_amf0_human_print(amf0, &amf0_str, NULL)); | ||
| 1084 | - srs_amf0_free_bytes(amf0_str); | ||
| 1085 | - } | ||
| 1086 | - } else { | ||
| 1087 | - srs_lib_trace("Unknown packet type=%s, dts=%d, pts=%d, size=%d", | ||
| 1088 | - srs_type2string(type), timestamp, pts, size); | ||
| 1089 | - } | ||
| 1090 | - | ||
| 1091 | - return ret; | ||
| 1092 | -} | ||
| 1093 | - | ||
| 1094 | -const char* srs_format_time() | ||
| 1095 | -{ | ||
| 1096 | - struct timeval tv; | ||
| 1097 | - static char buf[23]; | ||
| 1098 | - | ||
| 1099 | - memset(buf, 0, sizeof(buf)); | ||
| 1100 | - | ||
| 1101 | - // clock time | ||
| 1102 | - if (gettimeofday(&tv, NULL) == -1) { | ||
| 1103 | - return buf; | ||
| 1104 | - } | ||
| 1105 | - | ||
| 1106 | - // to calendar time | ||
| 1107 | - struct tm* tm; | ||
| 1108 | - if ((tm = localtime((const time_t*)&tv.tv_sec)) == NULL) { | ||
| 1109 | - return buf; | ||
| 1110 | - } | ||
| 1111 | - | ||
| 1112 | - snprintf(buf, sizeof(buf), | ||
| 1113 | - "%d-%02d-%02d %02d:%02d:%02d.%03d", | ||
| 1114 | - 1900 + tm->tm_year, 1 + tm->tm_mon, tm->tm_mday, | ||
| 1115 | - tm->tm_hour, tm->tm_min, tm->tm_sec, | ||
| 1116 | - (int)(tv.tv_usec / 1000)); | ||
| 1117 | - | ||
| 1118 | - // for srs-librtmp, @see https://github.com/winlinvip/simple-rtmp-server/issues/213 | ||
| 1119 | - buf[sizeof(buf) - 1] = 0; | ||
| 1120 | - | ||
| 1121 | - return buf; | ||
| 1122 | -} | ||
| 1123 | - | ||
| 1124 | struct FlvContext | 972 | struct FlvContext |
| 1125 | { | 973 | { |
| 1126 | SrsFileReader reader; | 974 | SrsFileReader reader; |
| @@ -1595,6 +1443,158 @@ char* srs_amf0_human_print(srs_amf0_t amf0, char** pdata, int* psize) | @@ -1595,6 +1443,158 @@ char* srs_amf0_human_print(srs_amf0_t amf0, char** pdata, int* psize) | ||
| 1595 | return any->human_print(pdata, psize); | 1443 | return any->human_print(pdata, psize); |
| 1596 | } | 1444 | } |
| 1597 | 1445 | ||
| 1446 | +const char* srs_type2string(char type) | ||
| 1447 | +{ | ||
| 1448 | + static const char* audio = "Audio"; | ||
| 1449 | + static const char* video = "Video"; | ||
| 1450 | + static const char* data = "Data"; | ||
| 1451 | + static const char* unknown = "Unknown"; | ||
| 1452 | + | ||
| 1453 | + switch (type) { | ||
| 1454 | + case SRS_RTMP_TYPE_AUDIO: return audio; | ||
| 1455 | + case SRS_RTMP_TYPE_VIDEO: return video; | ||
| 1456 | + case SRS_RTMP_TYPE_SCRIPT: return data; | ||
| 1457 | + default: return unknown; | ||
| 1458 | + } | ||
| 1459 | + | ||
| 1460 | + return unknown; | ||
| 1461 | +} | ||
| 1462 | + | ||
| 1463 | +const char* srs_code_id2string(char codec_id) | ||
| 1464 | +{ | ||
| 1465 | + static const char* h263 = "H.263"; | ||
| 1466 | + static const char* screen = "Screen"; | ||
| 1467 | + static const char* vp6 = "VP6"; | ||
| 1468 | + static const char* vp6_alpha = "VP6Alpha"; | ||
| 1469 | + static const char* screen2 = "Screen2"; | ||
| 1470 | + static const char* h264 = "H.264"; | ||
| 1471 | + static const char* unknown = "Unknown"; | ||
| 1472 | + | ||
| 1473 | + switch (codec_id) { | ||
| 1474 | + case 2: return h263; | ||
| 1475 | + case 3: return screen; | ||
| 1476 | + case 4: return vp6; | ||
| 1477 | + case 5: return vp6_alpha; | ||
| 1478 | + case 6: return screen2; | ||
| 1479 | + case 7: return h264; | ||
| 1480 | + default: return unknown; | ||
| 1481 | + } | ||
| 1482 | + | ||
| 1483 | + return unknown; | ||
| 1484 | +} | ||
| 1485 | + | ||
| 1486 | +const char* srs_avc_packet2string(char avc_packet_type) | ||
| 1487 | +{ | ||
| 1488 | + static const char* sps_pps = "SpsPps"; | ||
| 1489 | + static const char* nalu = "Nalu"; | ||
| 1490 | + static const char* sps_pps_end = "SpsPpsEnd"; | ||
| 1491 | + static const char* unknown = "Unknown"; | ||
| 1492 | + | ||
| 1493 | + switch (avc_packet_type) { | ||
| 1494 | + case 0: return sps_pps; | ||
| 1495 | + case 1: return nalu; | ||
| 1496 | + case 2: return sps_pps_end; | ||
| 1497 | + default: return unknown; | ||
| 1498 | + } | ||
| 1499 | + | ||
| 1500 | + return unknown; | ||
| 1501 | +} | ||
| 1502 | + | ||
| 1503 | +const char* srs_frame_type2string(char frame_type) | ||
| 1504 | +{ | ||
| 1505 | + static const char* keyframe = "I"; | ||
| 1506 | + static const char* interframe = "P/B"; | ||
| 1507 | + static const char* disposable_interframe = "DI"; | ||
| 1508 | + static const char* generated_keyframe = "GI"; | ||
| 1509 | + static const char* video_infoframe = "VI"; | ||
| 1510 | + static const char* unknown = "Unknown"; | ||
| 1511 | + | ||
| 1512 | + switch (frame_type) { | ||
| 1513 | + case 1: return keyframe; | ||
| 1514 | + case 2: return interframe; | ||
| 1515 | + case 3: return disposable_interframe; | ||
| 1516 | + case 4: return generated_keyframe; | ||
| 1517 | + case 5: return video_infoframe; | ||
| 1518 | + default: return unknown; | ||
| 1519 | + } | ||
| 1520 | + | ||
| 1521 | + return unknown; | ||
| 1522 | +} | ||
| 1523 | + | ||
| 1524 | +int srs_print_rtmp_packet(char type, u_int32_t timestamp, char* data, int size) | ||
| 1525 | +{ | ||
| 1526 | + int ret = ERROR_SUCCESS; | ||
| 1527 | + | ||
| 1528 | + u_int32_t pts; | ||
| 1529 | + if (srs_parse_timestamp(timestamp, type, data, size, &pts) != 0) { | ||
| 1530 | + return ret; | ||
| 1531 | + } | ||
| 1532 | + | ||
| 1533 | + if (type == SRS_RTMP_TYPE_VIDEO) { | ||
| 1534 | + srs_lib_trace("Video packet type=%s, dts=%d, pts=%d, size=%d, %s(%s,%s)", | ||
| 1535 | + srs_type2string(type), timestamp, pts, size, | ||
| 1536 | + srs_code_id2string(srs_get_codec_id(data, size)), | ||
| 1537 | + srs_avc_packet2string(srs_get_avc_packet_type(data, size)), | ||
| 1538 | + srs_frame_type2string(srs_get_frame_type(data, size)) | ||
| 1539 | + ); | ||
| 1540 | + } else if (type == SRS_RTMP_TYPE_AUDIO) { | ||
| 1541 | + srs_lib_trace("Audio packet type=%s, dts=%d, pts=%d, size=%d", | ||
| 1542 | + srs_type2string(type), timestamp, pts, size); | ||
| 1543 | + } else if (type == SRS_RTMP_TYPE_SCRIPT) { | ||
| 1544 | + srs_lib_verbose("Data packet type=%s, time=%d, size=%d", | ||
| 1545 | + srs_type2string(type), timestamp, size); | ||
| 1546 | + int nparsed = 0; | ||
| 1547 | + while (nparsed < size) { | ||
| 1548 | + int nb_parsed_this = 0; | ||
| 1549 | + srs_amf0_t amf0 = srs_amf0_parse(data + nparsed, size - nparsed, &nb_parsed_this); | ||
| 1550 | + if (amf0 == NULL) { | ||
| 1551 | + break; | ||
| 1552 | + } | ||
| 1553 | + | ||
| 1554 | + nparsed += nb_parsed_this; | ||
| 1555 | + | ||
| 1556 | + char* amf0_str = NULL; | ||
| 1557 | + srs_raw_trace("%s", srs_amf0_human_print(amf0, &amf0_str, NULL)); | ||
| 1558 | + srs_amf0_free_bytes(amf0_str); | ||
| 1559 | + } | ||
| 1560 | + } else { | ||
| 1561 | + srs_lib_trace("Unknown packet type=%s, dts=%d, pts=%d, size=%d", | ||
| 1562 | + srs_type2string(type), timestamp, pts, size); | ||
| 1563 | + } | ||
| 1564 | + | ||
| 1565 | + return ret; | ||
| 1566 | +} | ||
| 1567 | + | ||
| 1568 | +const char* srs_format_time() | ||
| 1569 | +{ | ||
| 1570 | + struct timeval tv; | ||
| 1571 | + static char buf[23]; | ||
| 1572 | + | ||
| 1573 | + memset(buf, 0, sizeof(buf)); | ||
| 1574 | + | ||
| 1575 | + // clock time | ||
| 1576 | + if (gettimeofday(&tv, NULL) == -1) { | ||
| 1577 | + return buf; | ||
| 1578 | + } | ||
| 1579 | + | ||
| 1580 | + // to calendar time | ||
| 1581 | + struct tm* tm; | ||
| 1582 | + if ((tm = localtime((const time_t*)&tv.tv_sec)) == NULL) { | ||
| 1583 | + return buf; | ||
| 1584 | + } | ||
| 1585 | + | ||
| 1586 | + snprintf(buf, sizeof(buf), | ||
| 1587 | + "%d-%02d-%02d %02d:%02d:%02d.%03d", | ||
| 1588 | + 1900 + tm->tm_year, 1 + tm->tm_mon, tm->tm_mday, | ||
| 1589 | + tm->tm_hour, tm->tm_min, tm->tm_sec, | ||
| 1590 | + (int)(tv.tv_usec / 1000)); | ||
| 1591 | + | ||
| 1592 | + // for srs-librtmp, @see https://github.com/winlinvip/simple-rtmp-server/issues/213 | ||
| 1593 | + buf[sizeof(buf) - 1] = 0; | ||
| 1594 | + | ||
| 1595 | + return buf; | ||
| 1596 | +} | ||
| 1597 | + | ||
| 1598 | /** | 1598 | /** |
| 1599 | * write audio raw frame to SRS. | 1599 | * write audio raw frame to SRS. |
| 1600 | */ | 1600 | */ |
| @@ -226,16 +226,6 @@ extern int srs_bandwidth_check(srs_rtmp_t rtmp, | @@ -226,16 +226,6 @@ extern int srs_bandwidth_check(srs_rtmp_t rtmp, | ||
| 226 | // 18 = script data | 226 | // 18 = script data |
| 227 | #define SRS_RTMP_TYPE_SCRIPT 18 | 227 | #define SRS_RTMP_TYPE_SCRIPT 18 |
| 228 | /** | 228 | /** |
| 229 | -* convert the flv tag type to string. | ||
| 230 | -* SRS_RTMP_TYPE_AUDIO to "Audio" | ||
| 231 | -* SRS_RTMP_TYPE_VIDEO to "Video" | ||
| 232 | -* SRS_RTMP_TYPE_SCRIPT to "Data" | ||
| 233 | -* otherwise, "Unknown" | ||
| 234 | -* @remark user never free the return char*, | ||
| 235 | -* it's static shared const string. | ||
| 236 | -*/ | ||
| 237 | -extern const char* srs_type2string(char type); | ||
| 238 | -/** | ||
| 239 | * read a audio/video/script-data packet from rtmp stream. | 229 | * read a audio/video/script-data packet from rtmp stream. |
| 240 | * @param type, output the packet type, macros: | 230 | * @param type, output the packet type, macros: |
| 241 | * SRS_RTMP_TYPE_AUDIO, FlvTagAudio | 231 | * SRS_RTMP_TYPE_AUDIO, FlvTagAudio |
| @@ -323,20 +313,6 @@ extern int srs_parse_timestamp( | @@ -323,20 +313,6 @@ extern int srs_parse_timestamp( | ||
| 323 | extern char srs_get_codec_id(char* data, int size); | 313 | extern char srs_get_codec_id(char* data, int size); |
| 324 | 314 | ||
| 325 | /** | 315 | /** |
| 326 | -* get the codec id string. | ||
| 327 | -* H.263 = Sorenson H.263 | ||
| 328 | -* Screen = Screen video | ||
| 329 | -* VP6 = On2 VP6 | ||
| 330 | -* VP6Alpha = On2 VP6 with alpha channel | ||
| 331 | -* Screen2 = Screen video version 2 | ||
| 332 | -* H.264 = AVC | ||
| 333 | -* otherwise, "Unknown" | ||
| 334 | -* @remark user never free the return char*, | ||
| 335 | -* it's static shared const string. | ||
| 336 | -*/ | ||
| 337 | -extern const char* srs_code_id2string(char codec_id); | ||
| 338 | - | ||
| 339 | -/** | ||
| 340 | * get the AVCPacketType of video tag. | 316 | * get the AVCPacketType of video tag. |
| 341 | * The following values are defined: | 317 | * The following values are defined: |
| 342 | * 0 = AVC sequence header | 318 | * 0 = AVC sequence header |
| @@ -348,17 +324,6 @@ extern const char* srs_code_id2string(char codec_id); | @@ -348,17 +324,6 @@ extern const char* srs_code_id2string(char codec_id); | ||
| 348 | extern char srs_get_avc_packet_type(char* data, int size); | 324 | extern char srs_get_avc_packet_type(char* data, int size); |
| 349 | 325 | ||
| 350 | /** | 326 | /** |
| 351 | -* get the avc packet type string. | ||
| 352 | -* SpsPps = AVC sequence header | ||
| 353 | -* Nalu = AVC NALU | ||
| 354 | -* SpsPpsEnd = AVC end of sequence | ||
| 355 | -* otherwise, "Unknown" | ||
| 356 | -* @remark user never free the return char*, | ||
| 357 | -* it's static shared const string. | ||
| 358 | -*/ | ||
| 359 | -extern const char* srs_avc_packet2string(char avc_packet_type); | ||
| 360 | - | ||
| 361 | -/** | ||
| 362 | * get the FrameType of video tag. | 327 | * get the FrameType of video tag. |
| 363 | * Type of video frame. The following values are defined: | 328 | * Type of video frame. The following values are defined: |
| 364 | * 1 = key frame (for AVC, a seekable frame) | 329 | * 1 = key frame (for AVC, a seekable frame) |
| @@ -370,32 +335,6 @@ extern const char* srs_avc_packet2string(char avc_packet_type); | @@ -370,32 +335,6 @@ extern const char* srs_avc_packet2string(char avc_packet_type); | ||
| 370 | */ | 335 | */ |
| 371 | extern char srs_get_frame_type(char* data, int size); | 336 | extern char srs_get_frame_type(char* data, int size); |
| 372 | 337 | ||
| 373 | -/** | ||
| 374 | -* get the frame type string. | ||
| 375 | -* I = key frame (for AVC, a seekable frame) | ||
| 376 | -* P/B = inter frame (for AVC, a non-seekable frame) | ||
| 377 | -* DI = disposable inter frame (H.263 only) | ||
| 378 | -* GI = generated key frame (reserved for server use only) | ||
| 379 | -* VI = video info/command frame | ||
| 380 | -* otherwise, "Unknown" | ||
| 381 | -* @remark user never free the return char*, | ||
| 382 | -* it's static shared const string. | ||
| 383 | -*/ | ||
| 384 | -extern const char* srs_frame_type2string(char frame_type); | ||
| 385 | - | ||
| 386 | -/** | ||
| 387 | -* print the rtmp packet, use srs_lib_trace/srs_lib_verbose for packet, | ||
| 388 | -* and use srs_raw_trace for script data body. | ||
| 389 | -* @return an error code for parse the timetstamp to dts and pts. | ||
| 390 | -*/ | ||
| 391 | -extern int srs_print_rtmp_packet(char type, u_int32_t timestamp, char* data, int size); | ||
| 392 | - | ||
| 393 | -// log to console, for use srs-librtmp application. | ||
| 394 | -extern const char* srs_format_time(); | ||
| 395 | -#define srs_lib_trace(msg, ...) printf("[%s] ", srs_format_time());printf(msg, ##__VA_ARGS__);printf("\n") | ||
| 396 | -#define srs_lib_verbose(msg, ...) printf("[%s] ", srs_format_time());printf(msg, ##__VA_ARGS__);printf("\n") | ||
| 397 | -#define srs_raw_trace(msg, ...) printf(msg, ##__VA_ARGS__) | ||
| 398 | - | ||
| 399 | /************************************************************* | 338 | /************************************************************* |
| 400 | ************************************************************** | 339 | ************************************************************** |
| 401 | * flv codec | 340 | * flv codec |
| @@ -553,6 +492,12 @@ extern void srs_amf0_ecma_array_property_set(srs_amf0_t amf0, const char* name, | @@ -553,6 +492,12 @@ extern void srs_amf0_ecma_array_property_set(srs_amf0_t amf0, const char* name, | ||
| 553 | extern int srs_amf0_strict_array_property_count(srs_amf0_t amf0); | 492 | extern int srs_amf0_strict_array_property_count(srs_amf0_t amf0); |
| 554 | extern srs_amf0_t srs_amf0_strict_array_property_at(srs_amf0_t amf0, int index); | 493 | extern srs_amf0_t srs_amf0_strict_array_property_at(srs_amf0_t amf0, int index); |
| 555 | extern void srs_amf0_strict_array_append(srs_amf0_t amf0, srs_amf0_t value); | 494 | extern void srs_amf0_strict_array_append(srs_amf0_t amf0, srs_amf0_t value); |
| 495 | + | ||
| 496 | +/************************************************************* | ||
| 497 | +************************************************************** | ||
| 498 | +* human readable print. | ||
| 499 | +************************************************************** | ||
| 500 | +*************************************************************/ | ||
| 556 | /** | 501 | /** |
| 557 | * human readable print | 502 | * human readable print |
| 558 | * @param pdata, output the heap data, NULL to ignore. | 503 | * @param pdata, output the heap data, NULL to ignore. |
| @@ -560,6 +505,67 @@ extern void srs_amf0_strict_array_append(srs_amf0_t amf0, srs_amf0_t value); | @@ -560,6 +505,67 @@ extern void srs_amf0_strict_array_append(srs_amf0_t amf0, srs_amf0_t value); | ||
| 560 | * @return return the *pdata for print. NULL to ignore. | 505 | * @return return the *pdata for print. NULL to ignore. |
| 561 | */ | 506 | */ |
| 562 | extern char* srs_amf0_human_print(srs_amf0_t amf0, char** pdata, int* psize); | 507 | extern char* srs_amf0_human_print(srs_amf0_t amf0, char** pdata, int* psize); |
| 508 | +/** | ||
| 509 | +* convert the flv tag type to string. | ||
| 510 | +* SRS_RTMP_TYPE_AUDIO to "Audio" | ||
| 511 | +* SRS_RTMP_TYPE_VIDEO to "Video" | ||
| 512 | +* SRS_RTMP_TYPE_SCRIPT to "Data" | ||
| 513 | +* otherwise, "Unknown" | ||
| 514 | +* @remark user never free the return char*, | ||
| 515 | +* it's static shared const string. | ||
| 516 | +*/ | ||
| 517 | +extern const char* srs_type2string(char type); | ||
| 518 | + | ||
| 519 | +/** | ||
| 520 | +* get the codec id string. | ||
| 521 | +* H.263 = Sorenson H.263 | ||
| 522 | +* Screen = Screen video | ||
| 523 | +* VP6 = On2 VP6 | ||
| 524 | +* VP6Alpha = On2 VP6 with alpha channel | ||
| 525 | +* Screen2 = Screen video version 2 | ||
| 526 | +* H.264 = AVC | ||
| 527 | +* otherwise, "Unknown" | ||
| 528 | +* @remark user never free the return char*, | ||
| 529 | +* it's static shared const string. | ||
| 530 | +*/ | ||
| 531 | +extern const char* srs_code_id2string(char codec_id); | ||
| 532 | + | ||
| 533 | +/** | ||
| 534 | +* get the avc packet type string. | ||
| 535 | +* SpsPps = AVC sequence header | ||
| 536 | +* Nalu = AVC NALU | ||
| 537 | +* SpsPpsEnd = AVC end of sequence | ||
| 538 | +* otherwise, "Unknown" | ||
| 539 | +* @remark user never free the return char*, | ||
| 540 | +* it's static shared const string. | ||
| 541 | +*/ | ||
| 542 | +extern const char* srs_avc_packet2string(char avc_packet_type); | ||
| 543 | + | ||
| 544 | +/** | ||
| 545 | +* get the frame type string. | ||
| 546 | +* I = key frame (for AVC, a seekable frame) | ||
| 547 | +* P/B = inter frame (for AVC, a non-seekable frame) | ||
| 548 | +* DI = disposable inter frame (H.263 only) | ||
| 549 | +* GI = generated key frame (reserved for server use only) | ||
| 550 | +* VI = video info/command frame | ||
| 551 | +* otherwise, "Unknown" | ||
| 552 | +* @remark user never free the return char*, | ||
| 553 | +* it's static shared const string. | ||
| 554 | +*/ | ||
| 555 | +extern const char* srs_frame_type2string(char frame_type); | ||
| 556 | + | ||
| 557 | +/** | ||
| 558 | +* print the rtmp packet, use srs_lib_trace/srs_lib_verbose for packet, | ||
| 559 | +* and use srs_raw_trace for script data body. | ||
| 560 | +* @return an error code for parse the timetstamp to dts and pts. | ||
| 561 | +*/ | ||
| 562 | +extern int srs_print_rtmp_packet(char type, u_int32_t timestamp, char* data, int size); | ||
| 563 | + | ||
| 564 | +// log to console, for use srs-librtmp application. | ||
| 565 | +extern const char* srs_format_time(); | ||
| 566 | +#define srs_lib_trace(msg, ...) printf("[%s] ", srs_format_time());printf(msg, ##__VA_ARGS__);printf("\n") | ||
| 567 | +#define srs_lib_verbose(msg, ...) printf("[%s] ", srs_format_time());printf(msg, ##__VA_ARGS__);printf("\n") | ||
| 568 | +#define srs_raw_trace(msg, ...) printf(msg, ##__VA_ARGS__) | ||
| 563 | 569 | ||
| 564 | /************************************************************* | 570 | /************************************************************* |
| 565 | ************************************************************** | 571 | ************************************************************** |
-
请 注册 或 登录 后发表评论