mirror of
				https://github.com/ossrs/srs.git
				synced 2025-03-09 15:49:59 +00:00 
			
		
		
		
	Merge branch 'srs.master'
This commit is contained in:
		
						commit
						bee313e924
					
				
					 1 changed files with 29 additions and 33 deletions
				
			
		| 
						 | 
				
			
			@ -600,13 +600,15 @@ void SrsProtocol::generate_chunk_header(SrsMessageHeader* mh, bool c0, int* pnbh
 | 
			
		|||
    // generate the header.
 | 
			
		||||
    char* p = cache;
 | 
			
		||||
    
 | 
			
		||||
    // timestamp for c0/c3
 | 
			
		||||
    u_int32_t timestamp = (u_int32_t)mh->timestamp;
 | 
			
		||||
    
 | 
			
		||||
    if (c0) {
 | 
			
		||||
        // write new chunk stream header, fmt is 0
 | 
			
		||||
        *p++ = 0x00 | (mh->perfer_cid & 0x3F);
 | 
			
		||||
        
 | 
			
		||||
        // chunk message header, 11 bytes
 | 
			
		||||
        // timestamp, 3bytes, big-endian
 | 
			
		||||
        u_int32_t timestamp = (u_int32_t)mh->timestamp;
 | 
			
		||||
        if (timestamp < RTMP_EXTENDED_TIMESTAMP) {
 | 
			
		||||
            pp = (char*)×tamp;
 | 
			
		||||
            *p++ = pp[2];
 | 
			
		||||
| 
						 | 
				
			
			@ -633,43 +635,37 @@ void SrsProtocol::generate_chunk_header(SrsMessageHeader* mh, bool c0, int* pnbh
 | 
			
		|||
        *p++ = pp[1];
 | 
			
		||||
        *p++ = pp[2];
 | 
			
		||||
        *p++ = pp[3];
 | 
			
		||||
        
 | 
			
		||||
        // chunk extended timestamp header, 0 or 4 bytes, big-endian
 | 
			
		||||
        if(timestamp >= RTMP_EXTENDED_TIMESTAMP) {
 | 
			
		||||
            pp = (char*)×tamp;
 | 
			
		||||
            *p++ = pp[3];
 | 
			
		||||
            *p++ = pp[2];
 | 
			
		||||
            *p++ = pp[1];
 | 
			
		||||
            *p++ = pp[0];
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        // write no message header chunk stream, fmt is 3
 | 
			
		||||
        // @remark, if perfer_cid > 0x3F, that is, use 2B/3B chunk header,
 | 
			
		||||
        // SRS will rollback to 1B chunk header.
 | 
			
		||||
        *p++ = 0xC0 | (mh->perfer_cid & 0x3F);
 | 
			
		||||
        
 | 
			
		||||
        // chunk extended timestamp header, 0 or 4 bytes, big-endian
 | 
			
		||||
        // 6.1.3. Extended Timestamp
 | 
			
		||||
        // This field is transmitted only when the normal time stamp in the
 | 
			
		||||
        // chunk message header is set to 0x00ffffff. If normal time stamp is
 | 
			
		||||
        // set to any value less than 0x00ffffff, this field MUST NOT be
 | 
			
		||||
        // present. This field MUST NOT be present if the timestamp field is not
 | 
			
		||||
        // present. Type 3 chunks MUST NOT have this field.
 | 
			
		||||
        // adobe changed for Type3 chunk:
 | 
			
		||||
        //        FMLE always sendout the extended-timestamp,
 | 
			
		||||
        //        must send the extended-timestamp to FMS,
 | 
			
		||||
        //        must send the extended-timestamp to flash-player.
 | 
			
		||||
        // @see: ngx_rtmp_prepare_message
 | 
			
		||||
        // @see: http://blog.csdn.net/win_lin/article/details/13363699
 | 
			
		||||
        // TODO: FIXME: extract to outer.
 | 
			
		||||
        u_int32_t timestamp = (u_int32_t)mh->timestamp;
 | 
			
		||||
        if (timestamp >= RTMP_EXTENDED_TIMESTAMP) {
 | 
			
		||||
            pp = (char*)×tamp;
 | 
			
		||||
            *p++ = pp[3];
 | 
			
		||||
            *p++ = pp[2];
 | 
			
		||||
            *p++ = pp[1];
 | 
			
		||||
            *p++ = pp[0];
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    // for c0
 | 
			
		||||
    // chunk extended timestamp header, 0 or 4 bytes, big-endian
 | 
			
		||||
    // 
 | 
			
		||||
    // for c3:
 | 
			
		||||
    // chunk extended timestamp header, 0 or 4 bytes, big-endian
 | 
			
		||||
    // 6.1.3. Extended Timestamp
 | 
			
		||||
    // This field is transmitted only when the normal time stamp in the
 | 
			
		||||
    // chunk message header is set to 0x00ffffff. If normal time stamp is
 | 
			
		||||
    // set to any value less than 0x00ffffff, this field MUST NOT be
 | 
			
		||||
    // present. This field MUST NOT be present if the timestamp field is not
 | 
			
		||||
    // present. Type 3 chunks MUST NOT have this field.
 | 
			
		||||
    // adobe changed for Type3 chunk:
 | 
			
		||||
    //        FMLE always sendout the extended-timestamp,
 | 
			
		||||
    //        must send the extended-timestamp to FMS,
 | 
			
		||||
    //        must send the extended-timestamp to flash-player.
 | 
			
		||||
    // @see: ngx_rtmp_prepare_message
 | 
			
		||||
    // @see: http://blog.csdn.net/win_lin/article/details/13363699
 | 
			
		||||
    // TODO: FIXME: extract to outer.
 | 
			
		||||
    if (timestamp >= RTMP_EXTENDED_TIMESTAMP) {
 | 
			
		||||
        pp = (char*)×tamp;
 | 
			
		||||
        *p++ = pp[3];
 | 
			
		||||
        *p++ = pp[2];
 | 
			
		||||
        *p++ = pp[1];
 | 
			
		||||
        *p++ = pp[0];
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    // always has header
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue