mirror of
https://github.com/ossrs/srs.git
synced 2025-02-13 03:41:55 +00:00
add comments and variable for c3 extended-timestamp. to 0.9.82
This commit is contained in:
parent
80ddddf823
commit
0f498acd7b
4 changed files with 32 additions and 7 deletions
|
@ -42,7 +42,11 @@ int main(int argc, char** argv)
|
||||||
printf("srs(simple-rtmp-server) client librtmp library.\n");
|
printf("srs(simple-rtmp-server) client librtmp library.\n");
|
||||||
printf("version: %d.%d.%d\n", srs_version_major(), srs_version_minor(), srs_version_revision());
|
printf("version: %d.%d.%d\n", srs_version_major(), srs_version_minor(), srs_version_revision());
|
||||||
|
|
||||||
rtmp = srs_rtmp_create("rtmp://127.0.0.1:1935/live/livestream");
|
if (argc > 1) {
|
||||||
|
rtmp = srs_rtmp_create(argv[1]);
|
||||||
|
} else {
|
||||||
|
rtmp = srs_rtmp_create("rtmp://127.0.0.1:1935/live/livestream");
|
||||||
|
}
|
||||||
|
|
||||||
if (srs_simple_handshake(rtmp) != 0) {
|
if (srs_simple_handshake(rtmp) != 0) {
|
||||||
printf("simple handshake failed.\n");
|
printf("simple handshake failed.\n");
|
||||||
|
|
|
@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
// current release version
|
// current release version
|
||||||
#define VERSION_MAJOR "0"
|
#define VERSION_MAJOR "0"
|
||||||
#define VERSION_MINOR "9"
|
#define VERSION_MINOR "9"
|
||||||
#define VERSION_REVISION "81"
|
#define VERSION_REVISION "82"
|
||||||
#define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION
|
#define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION
|
||||||
// server info.
|
// server info.
|
||||||
#define RTMP_SIG_SRS_KEY "srs"
|
#define RTMP_SIG_SRS_KEY "srs"
|
||||||
|
|
|
@ -301,6 +301,7 @@ SrsProtocol::SrsProtocol(ISrsProtocolReaderWriter* io)
|
||||||
skt = io;
|
skt = io;
|
||||||
|
|
||||||
in_chunk_size = out_chunk_size = RTMP_DEFAULT_CHUNK_SIZE;
|
in_chunk_size = out_chunk_size = RTMP_DEFAULT_CHUNK_SIZE;
|
||||||
|
send_extended_timestamp_for_C3_chunk = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsProtocol::~SrsProtocol()
|
SrsProtocol::~SrsProtocol()
|
||||||
|
@ -519,13 +520,13 @@ int SrsProtocol::do_send_and_free_message(SrsMessage* msg, SrsPacket* packet)
|
||||||
// present. Type 3 chunks MUST NOT have this field.
|
// present. Type 3 chunks MUST NOT have this field.
|
||||||
// adobe changed for Type3 chunk:
|
// adobe changed for Type3 chunk:
|
||||||
// FMLE always sendout the extended-timestamp,
|
// FMLE always sendout the extended-timestamp,
|
||||||
// must send the extended-timestamp to FMS,
|
// must send the extended-timestamp to FMS,
|
||||||
// must send the extended-timestamp to flash-player.
|
// must send the extended-timestamp to flash-player.
|
||||||
// @see: ngx_rtmp_prepare_message
|
// @see: ngx_rtmp_prepare_message
|
||||||
// @see: http://blog.csdn.net/win_lin/article/details/13363699
|
// @see: http://blog.csdn.net/win_lin/article/details/13363699
|
||||||
u_int32_t timestamp = (u_int32_t)msg->header.timestamp;
|
u_int32_t timestamp = (u_int32_t)msg->header.timestamp;
|
||||||
if(timestamp >= RTMP_EXTENDED_TIMESTAMP){
|
if(send_extended_timestamp_for_C3_chunk && timestamp >= RTMP_EXTENDED_TIMESTAMP){
|
||||||
pp = (char*)×tamp;
|
pp = (char*)×tamp;
|
||||||
*pheader++ = pp[3];
|
*pheader++ = pp[3];
|
||||||
*pheader++ = pp[2];
|
*pheader++ = pp[2];
|
||||||
*pheader++ = pp[1];
|
*pheader++ = pp[1];
|
||||||
|
@ -1086,7 +1087,8 @@ int SrsProtocol::read_message_header(SrsChunkStream* chunk, char fmt, int bh_siz
|
||||||
fmt, mh_size, chunk->extended_timestamp);
|
fmt, mh_size, chunk->extended_timestamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (chunk->extended_timestamp) {
|
// read extended-timestamp
|
||||||
|
if (chunk->extended_timestamp && send_extended_timestamp_for_C3_chunk) {
|
||||||
mh_size += 4;
|
mh_size += 4;
|
||||||
required_size = bh_size + mh_size;
|
required_size = bh_size + mh_size;
|
||||||
srs_verbose("read header ext time. fmt=%d, ext_time=%d, mh_size=%d", fmt, chunk->extended_timestamp, mh_size);
|
srs_verbose("read header ext time. fmt=%d, ext_time=%d, mh_size=%d", fmt, chunk->extended_timestamp, mh_size);
|
||||||
|
@ -1111,7 +1113,8 @@ int SrsProtocol::read_message_header(SrsChunkStream* chunk, char fmt, int bh_siz
|
||||||
u_int32_t chunk_timestamp = chunk->header.timestamp;
|
u_int32_t chunk_timestamp = chunk->header.timestamp;
|
||||||
if (chunk_timestamp > RTMP_EXTENDED_TIMESTAMP && chunk_timestamp != timestamp) {
|
if (chunk_timestamp > RTMP_EXTENDED_TIMESTAMP && chunk_timestamp != timestamp) {
|
||||||
mh_size -= 4;
|
mh_size -= 4;
|
||||||
srs_verbose("ignore the 4bytes extended timestamp. mh_size=%d", mh_size);
|
send_extended_timestamp_for_C3_chunk = false;
|
||||||
|
srs_warn("no 4bytes extended timestamp in the continued chunk");
|
||||||
} else {
|
} else {
|
||||||
chunk->header.timestamp = timestamp;
|
chunk->header.timestamp = timestamp;
|
||||||
}
|
}
|
||||||
|
|
|
@ -107,6 +107,24 @@ private:
|
||||||
* value: the request command name
|
* value: the request command name
|
||||||
*/
|
*/
|
||||||
std::map<double, std::string> requests;
|
std::map<double, std::string> requests;
|
||||||
|
/**
|
||||||
|
* RTMP specification and ffmpeg/librtmp is false,
|
||||||
|
* but, adobe changed the specification, so flash/FMLE/FMS always true.
|
||||||
|
* default to true to support flash/FMLE/FMS.
|
||||||
|
*
|
||||||
|
* ffmpeg/librtmp may donot send this filed, need to detect the value.
|
||||||
|
* @see also: http://blog.csdn.net/win_lin/article/details/13363699
|
||||||
|
* compare to the chunk timestamp, which is set by chunk message header
|
||||||
|
* type 0,1 or 2.
|
||||||
|
*
|
||||||
|
* @remark, nginx send the extended-timestamp in sequence-header,
|
||||||
|
* and timestamp delta in continue C1 chunks, and so compatible with ffmpeg,
|
||||||
|
* that is, there is no continue chunks and extended-timestamp in nginx-rtmp.
|
||||||
|
*
|
||||||
|
* @remark, srs always send the extended-timestamp, to keep simple,
|
||||||
|
* and compatible with adobe products.
|
||||||
|
*/
|
||||||
|
bool send_extended_timestamp_for_C3_chunk;
|
||||||
// peer in
|
// peer in
|
||||||
private:
|
private:
|
||||||
std::map<int, SrsChunkStream*> chunk_streams;
|
std::map<int, SrsChunkStream*> chunk_streams;
|
||||||
|
|
Loading…
Reference in a new issue