mirror of
				https://github.com/ossrs/srs.git
				synced 2025-03-09 15:49:59 +00:00 
			
		
		
		
	Remove dead link for issues
This commit is contained in:
		
							parent
							
								
									2ac214fdc6
								
							
						
					
					
						commit
						19e857ada4
					
				
					 25 changed files with 1 additions and 70 deletions
				
			
		| 
						 | 
					@ -1,5 +1,4 @@
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 # see: https://github.com/ossrs/srs/issues/190
 | 
					 | 
				
			||||||
 # see: https://github.com/ossrs/srs/wiki/v1_CN_SrsLinuxArm
 | 
					 # see: https://github.com/ossrs/srs/wiki/v1_CN_SrsLinuxArm
 | 
				
			||||||
 g++ -g -O0 -o jmp_sp jmp_sp.cpp
 | 
					 g++ -g -O0 -o jmp_sp jmp_sp.cpp
 | 
				
			||||||
 arm-linux-gnueabi-g++ -g -o jmp_sp jmp_sp.cpp -static
 | 
					 arm-linux-gnueabi-g++ -g -o jmp_sp jmp_sp.cpp -static
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -746,7 +746,6 @@ public:
 | 
				
			||||||
    // all clients connected to edge must be tranverse to origin to verify.
 | 
					    // all clients connected to edge must be tranverse to origin to verify.
 | 
				
			||||||
    virtual bool get_vhost_edge_token_traverse(std::string vhost);
 | 
					    virtual bool get_vhost_edge_token_traverse(std::string vhost);
 | 
				
			||||||
    // Get the transformed vhost for edge,
 | 
					    // Get the transformed vhost for edge,
 | 
				
			||||||
    // @see https://github.com/ossrs/srs/issues/372
 | 
					 | 
				
			||||||
    virtual std::string get_vhost_edge_transform_vhost(std::string vhost);
 | 
					    virtual std::string get_vhost_edge_transform_vhost(std::string vhost);
 | 
				
			||||||
    // Whether enable the origin cluster.
 | 
					    // Whether enable the origin cluster.
 | 
				
			||||||
    // @see https://github.com/ossrs/srs/wiki/v3_EN_OriginCluster
 | 
					    // @see https://github.com/ossrs/srs/wiki/v3_EN_OriginCluster
 | 
				
			||||||
| 
						 | 
					@ -921,7 +920,6 @@ public:
 | 
				
			||||||
    // Get the hls hls_on_error config.
 | 
					    // Get the hls hls_on_error config.
 | 
				
			||||||
    // The ignore will ignore error and disable hls.
 | 
					    // The ignore will ignore error and disable hls.
 | 
				
			||||||
    // The disconnect will disconnect publish connection.
 | 
					    // The disconnect will disconnect publish connection.
 | 
				
			||||||
    // @see https://github.com/ossrs/srs/issues/264
 | 
					 | 
				
			||||||
    virtual std::string get_hls_on_error(std::string vhost);
 | 
					    virtual std::string get_hls_on_error(std::string vhost);
 | 
				
			||||||
    // Get the HLS default audio codec.
 | 
					    // Get the HLS default audio codec.
 | 
				
			||||||
    virtual std::string get_hls_acodec(std::string vhost);
 | 
					    virtual std::string get_hls_acodec(std::string vhost);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -66,7 +66,6 @@ srs_error_t SrsEdgeRtmpUpstream::connect(SrsRequest* r, SrsLbRoundRobin* lb)
 | 
				
			||||||
    if (true) {
 | 
					    if (true) {
 | 
				
			||||||
        SrsConfDirective* conf = _srs_config->get_vhost_edge_origin(req->vhost);
 | 
					        SrsConfDirective* conf = _srs_config->get_vhost_edge_origin(req->vhost);
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        // @see https://github.com/ossrs/srs/issues/79
 | 
					 | 
				
			||||||
        // when origin is error, for instance, server is shutdown,
 | 
					        // when origin is error, for instance, server is shutdown,
 | 
				
			||||||
        // then user remove the vhost then reload, the conf is empty.
 | 
					        // then user remove the vhost then reload, the conf is empty.
 | 
				
			||||||
        if (!conf) {
 | 
					        if (!conf) {
 | 
				
			||||||
| 
						 | 
					@ -93,7 +92,6 @@ srs_error_t SrsEdgeRtmpUpstream::connect(SrsRequest* r, SrsLbRoundRobin* lb)
 | 
				
			||||||
        selected_port = port;
 | 
					        selected_port = port;
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        // support vhost tranform for edge,
 | 
					        // support vhost tranform for edge,
 | 
				
			||||||
        // @see https://github.com/ossrs/srs/issues/372
 | 
					 | 
				
			||||||
        std::string vhost = _srs_config->get_vhost_edge_transform_vhost(req->vhost);
 | 
					        std::string vhost = _srs_config->get_vhost_edge_transform_vhost(req->vhost);
 | 
				
			||||||
        vhost = srs_string_replace(vhost, "[vhost]", req->vhost);
 | 
					        vhost = srs_string_replace(vhost, "[vhost]", req->vhost);
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
| 
						 | 
					@ -478,7 +476,6 @@ srs_error_t SrsEdgeForwarder::start()
 | 
				
			||||||
        srs_parse_hostport(server, server, port);
 | 
					        srs_parse_hostport(server, server, port);
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        // support vhost tranform for edge,
 | 
					        // support vhost tranform for edge,
 | 
				
			||||||
        // @see https://github.com/ossrs/srs/issues/372
 | 
					 | 
				
			||||||
        std::string vhost = _srs_config->get_vhost_edge_transform_vhost(req->vhost);
 | 
					        std::string vhost = _srs_config->get_vhost_edge_transform_vhost(req->vhost);
 | 
				
			||||||
        vhost = srs_string_replace(vhost, "[vhost]", req->vhost);
 | 
					        vhost = srs_string_replace(vhost, "[vhost]", req->vhost);
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
| 
						 | 
					@ -759,7 +756,6 @@ srs_error_t SrsPublishEdge::on_client_publish()
 | 
				
			||||||
        return srs_error_new(ERROR_RTMP_EDGE_PUBLISH_STATE, "invalid state");
 | 
					        return srs_error_new(ERROR_RTMP_EDGE_PUBLISH_STATE, "invalid state");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    // @see https://github.com/ossrs/srs/issues/180
 | 
					 | 
				
			||||||
    // to avoid multiple publish the same stream on the same edge,
 | 
					    // to avoid multiple publish the same stream on the same edge,
 | 
				
			||||||
    // directly enter the publish stage.
 | 
					    // directly enter the publish stage.
 | 
				
			||||||
    if (true) {
 | 
					    if (true) {
 | 
				
			||||||
| 
						 | 
					@ -771,7 +767,6 @@ srs_error_t SrsPublishEdge::on_client_publish()
 | 
				
			||||||
    // start to forward stream to origin.
 | 
					    // start to forward stream to origin.
 | 
				
			||||||
    err = forwarder->start();
 | 
					    err = forwarder->start();
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    // @see https://github.com/ossrs/srs/issues/180
 | 
					 | 
				
			||||||
    // when failed, revert to init
 | 
					    // when failed, revert to init
 | 
				
			||||||
    if (err != srs_success) {
 | 
					    if (err != srs_success) {
 | 
				
			||||||
        SrsEdgeState pstate = state;
 | 
					        SrsEdgeState pstate = state;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,7 +40,6 @@ private:
 | 
				
			||||||
    SrsRtmpJitter* jitter;
 | 
					    SrsRtmpJitter* jitter;
 | 
				
			||||||
    SrsMessageQueue* queue;
 | 
					    SrsMessageQueue* queue;
 | 
				
			||||||
    // Cache the sequence header for retry when slave is failed.
 | 
					    // Cache the sequence header for retry when slave is failed.
 | 
				
			||||||
    // @see https://github.com/ossrs/srs/issues/150
 | 
					 | 
				
			||||||
    SrsSharedPtrMessage* sh_audio;
 | 
					    SrsSharedPtrMessage* sh_audio;
 | 
				
			||||||
    SrsSharedPtrMessage* sh_video;
 | 
					    SrsSharedPtrMessage* sh_video;
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -153,7 +153,6 @@ private:
 | 
				
			||||||
    // The current writing segment.
 | 
					    // The current writing segment.
 | 
				
			||||||
    SrsHlsSegment* current;
 | 
					    SrsHlsSegment* current;
 | 
				
			||||||
    // The ts context, to keep cc continous between ts.
 | 
					    // The ts context, to keep cc continous between ts.
 | 
				
			||||||
    // @see https://github.com/ossrs/srs/issues/375
 | 
					 | 
				
			||||||
    SrsTsContext* context;
 | 
					    SrsTsContext* context;
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    SrsHlsMuxer();
 | 
					    SrsHlsMuxer();
 | 
				
			||||||
| 
						 | 
					@ -187,7 +186,6 @@ public:
 | 
				
			||||||
    virtual bool wait_keyframe();
 | 
					    virtual bool wait_keyframe();
 | 
				
			||||||
    // Whether segment absolutely overflow, for pure audio to reap segment,
 | 
					    // Whether segment absolutely overflow, for pure audio to reap segment,
 | 
				
			||||||
    // that is whether the current segment duration>=2*(the segment in config)
 | 
					    // that is whether the current segment duration>=2*(the segment in config)
 | 
				
			||||||
    // @see https://github.com/ossrs/srs/issues/151#issuecomment-71155184
 | 
					 | 
				
			||||||
    virtual bool is_segment_absolutely_overflow();
 | 
					    virtual bool is_segment_absolutely_overflow();
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    // Whether current hls muxer is pure audio mode.
 | 
					    // Whether current hls muxer is pure audio mode.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -509,7 +509,6 @@ srs_error_t SrsHttpHooks::do_post(SrsHttpClient* hc, std::string url, std::strin
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    // ensure the http status is ok.
 | 
					    // ensure the http status is ok.
 | 
				
			||||||
    // https://github.com/ossrs/srs/issues/158
 | 
					 | 
				
			||||||
    if (code != SRS_CONSTS_HTTP_OK && code != SRS_CONSTS_HTTP_Created) {
 | 
					    if (code != SRS_CONSTS_HTTP_OK && code != SRS_CONSTS_HTTP_Created) {
 | 
				
			||||||
        return srs_error_new(ERROR_HTTP_STATUS_INVALID, "http: status %d", code);
 | 
					        return srs_error_new(ERROR_HTTP_STATUS_INVALID, "http: status %d", code);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -928,7 +928,6 @@ srs_error_t SrsHttpStreamServer::http_mount(SrsLiveSource* s, SrsRequest* r)
 | 
				
			||||||
        // mount the http flv stream.
 | 
					        // mount the http flv stream.
 | 
				
			||||||
        // we must register the handler, then start the thread,
 | 
					        // we must register the handler, then start the thread,
 | 
				
			||||||
        // for the thread will cause thread switch context.
 | 
					        // for the thread will cause thread switch context.
 | 
				
			||||||
        // @see https://github.com/ossrs/srs/issues/404
 | 
					 | 
				
			||||||
        if ((err = mux.handle(mount, entry->stream)) != srs_success) {
 | 
					        if ((err = mux.handle(mount, entry->stream)) != srs_success) {
 | 
				
			||||||
            return srs_error_wrap(err, "http: mount flv stream for vhost=%s failed", sid.c_str());
 | 
					            return srs_error_wrap(err, "http: mount flv stream for vhost=%s failed", sid.c_str());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -449,7 +449,6 @@ srs_error_t SrsMpegtsOverUdp::write_h264_ipb_frame(char* frame, int frame_size,
 | 
				
			||||||
    srs_error_t err = srs_success;
 | 
					    srs_error_t err = srs_success;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    // when sps or pps not sent, ignore the packet.
 | 
					    // when sps or pps not sent, ignore the packet.
 | 
				
			||||||
    // @see https://github.com/ossrs/srs/issues/203
 | 
					 | 
				
			||||||
    if (!h264_sps_pps_sent) {
 | 
					    if (!h264_sps_pps_sent) {
 | 
				
			||||||
        return srs_error_new(ERROR_H264_DROP_BEFORE_SPS_PPS, "drop sps/pps");
 | 
					        return srs_error_new(ERROR_H264_DROP_BEFORE_SPS_PPS, "drop sps/pps");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -93,8 +93,6 @@ srs_error_t SrsRecvThread::cycle()
 | 
				
			||||||
    // the multiple messages writev improve performance large,
 | 
					    // the multiple messages writev improve performance large,
 | 
				
			||||||
    // but the timeout recv will cause 33% sys call performance,
 | 
					    // but the timeout recv will cause 33% sys call performance,
 | 
				
			||||||
    // to use isolate thread to recv, can improve about 33% performance.
 | 
					    // to use isolate thread to recv, can improve about 33% performance.
 | 
				
			||||||
    // @see https://github.com/ossrs/srs/issues/194
 | 
					 | 
				
			||||||
    // @see: https://github.com/ossrs/srs/issues/217
 | 
					 | 
				
			||||||
    rtmp->set_recv_timeout(SRS_UTIME_NO_TIMEOUT);
 | 
					    rtmp->set_recv_timeout(SRS_UTIME_NO_TIMEOUT);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    pumper->on_start();
 | 
					    pumper->on_start();
 | 
				
			||||||
| 
						 | 
					@ -279,7 +277,6 @@ SrsPublishRecvThread::SrsPublishRecvThread(SrsRtmpServer* rtmp_sdk, SrsRequest*
 | 
				
			||||||
    mr_fd = mr_sock_fd;
 | 
					    mr_fd = mr_sock_fd;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    // the mr settings,
 | 
					    // the mr settings,
 | 
				
			||||||
    // @see https://github.com/ossrs/srs/issues/241
 | 
					 | 
				
			||||||
    mr = _srs_config->get_mr_enabled(req->vhost);
 | 
					    mr = _srs_config->get_mr_enabled(req->vhost);
 | 
				
			||||||
    mr_sleep = _srs_config->get_mr_sleep(req->vhost);
 | 
					    mr_sleep = _srs_config->get_mr_sleep(req->vhost);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
| 
						 | 
					@ -405,7 +402,6 @@ void SrsPublishRecvThread::interrupt(srs_error_t err)
 | 
				
			||||||
    recv_error = srs_error_copy(err);
 | 
					    recv_error = srs_error_copy(err);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    // when recv thread error, signal the conn thread to process it.
 | 
					    // when recv thread error, signal the conn thread to process it.
 | 
				
			||||||
    // @see https://github.com/ossrs/srs/issues/244
 | 
					 | 
				
			||||||
    srs_cond_signal(error);
 | 
					    srs_cond_signal(error);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -420,7 +416,6 @@ void SrsPublishRecvThread::on_start()
 | 
				
			||||||
        set_socket_buffer(mr_sleep);
 | 
					        set_socket_buffer(mr_sleep);
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        // disable the merge read
 | 
					        // disable the merge read
 | 
				
			||||||
        // @see https://github.com/ossrs/srs/issues/241
 | 
					 | 
				
			||||||
        rtmp->set_merge_read(true, this);
 | 
					        rtmp->set_merge_read(true, this);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -432,13 +427,11 @@ void SrsPublishRecvThread::on_stop()
 | 
				
			||||||
    // for we donot set to false yet.
 | 
					    // for we donot set to false yet.
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    // when thread stop, signal the conn thread which wait.
 | 
					    // when thread stop, signal the conn thread which wait.
 | 
				
			||||||
    // @see https://github.com/ossrs/srs/issues/244
 | 
					 | 
				
			||||||
    srs_cond_signal(error);
 | 
					    srs_cond_signal(error);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
#ifdef SRS_PERF_MERGED_READ
 | 
					#ifdef SRS_PERF_MERGED_READ
 | 
				
			||||||
    if (mr) {
 | 
					    if (mr) {
 | 
				
			||||||
        // disable the merge read
 | 
					        // disable the merge read
 | 
				
			||||||
        // @see https://github.com/ossrs/srs/issues/241
 | 
					 | 
				
			||||||
        rtmp->set_merge_read(false, NULL);
 | 
					        rtmp->set_merge_read(false, NULL);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -459,7 +452,6 @@ void SrsPublishRecvThread::on_read(ssize_t nread)
 | 
				
			||||||
     * to improve read performance, merge some packets then read,
 | 
					     * to improve read performance, merge some packets then read,
 | 
				
			||||||
     * when it on and read small bytes, we sleep to wait more data.,
 | 
					     * when it on and read small bytes, we sleep to wait more data.,
 | 
				
			||||||
     * that is, we merge some data to read together.
 | 
					     * that is, we merge some data to read together.
 | 
				
			||||||
     * @see https://github.com/ossrs/srs/issues/241
 | 
					 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    if (nread < SRS_MR_SMALL_BYTES) {
 | 
					    if (nread < SRS_MR_SMALL_BYTES) {
 | 
				
			||||||
        srs_usleep(mr_sleep);
 | 
					        srs_usleep(mr_sleep);
 | 
				
			||||||
| 
						 | 
					@ -476,7 +468,6 @@ srs_error_t SrsPublishRecvThread::on_reload_vhost_publish(string vhost)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    // the mr settings,
 | 
					    // the mr settings,
 | 
				
			||||||
    // @see https://github.com/ossrs/srs/issues/241
 | 
					 | 
				
			||||||
    bool mr_enabled = _srs_config->get_mr_enabled(req->vhost);
 | 
					    bool mr_enabled = _srs_config->get_mr_enabled(req->vhost);
 | 
				
			||||||
    srs_utime_t sleep_v = _srs_config->get_mr_sleep(req->vhost);
 | 
					    srs_utime_t sleep_v = _srs_config->get_mr_sleep(req->vhost);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
| 
						 | 
					@ -489,13 +480,11 @@ srs_error_t SrsPublishRecvThread::on_reload_vhost_publish(string vhost)
 | 
				
			||||||
    // mr enabled=>disabled
 | 
					    // mr enabled=>disabled
 | 
				
			||||||
    if (mr && !mr_enabled) {
 | 
					    if (mr && !mr_enabled) {
 | 
				
			||||||
        // disable the merge read
 | 
					        // disable the merge read
 | 
				
			||||||
        // @see https://github.com/ossrs/srs/issues/241
 | 
					 | 
				
			||||||
        rtmp->set_merge_read(false, NULL);
 | 
					        rtmp->set_merge_read(false, NULL);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    // mr disabled=>enabled
 | 
					    // mr disabled=>enabled
 | 
				
			||||||
    if (!mr && mr_enabled) {
 | 
					    if (!mr && mr_enabled) {
 | 
				
			||||||
        // enable the merge read
 | 
					        // enable the merge read
 | 
				
			||||||
        // @see https://github.com/ossrs/srs/issues/241
 | 
					 | 
				
			||||||
        rtmp->set_merge_read(true, this);
 | 
					        rtmp->set_merge_read(true, this);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -75,7 +75,6 @@ private:
 | 
				
			||||||
    // when source id changed, notice all consumers
 | 
					    // when source id changed, notice all consumers
 | 
				
			||||||
    bool should_update_source_id;
 | 
					    bool should_update_source_id;
 | 
				
			||||||
    // The cond wait for mw.
 | 
					    // The cond wait for mw.
 | 
				
			||||||
    // @see https://github.com/ossrs/srs/issues/251
 | 
					 | 
				
			||||||
    srs_cond_t mw_wait;
 | 
					    srs_cond_t mw_wait;
 | 
				
			||||||
    bool mw_waiting;
 | 
					    bool mw_waiting;
 | 
				
			||||||
    int mw_min_msgs;
 | 
					    int mw_min_msgs;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -429,7 +429,6 @@ srs_error_t SrsRtmpConn::service_cycle()
 | 
				
			||||||
        // logical accept and retry stream service.
 | 
					        // logical accept and retry stream service.
 | 
				
			||||||
        if (srs_error_code(err) == ERROR_CONTROL_RTMP_CLOSE) {
 | 
					        if (srs_error_code(err) == ERROR_CONTROL_RTMP_CLOSE) {
 | 
				
			||||||
            // TODO: FIXME: use ping message to anti-death of socket.
 | 
					            // TODO: FIXME: use ping message to anti-death of socket.
 | 
				
			||||||
            // @see: https://github.com/ossrs/srs/issues/39
 | 
					 | 
				
			||||||
            // set timeout to a larger value, for user paused.
 | 
					            // set timeout to a larger value, for user paused.
 | 
				
			||||||
            rtmp->set_recv_timeout(SRS_PAUSED_RECV_TIMEOUT);
 | 
					            rtmp->set_recv_timeout(SRS_PAUSED_RECV_TIMEOUT);
 | 
				
			||||||
            rtmp->set_send_timeout(SRS_PAUSED_SEND_TIMEOUT);
 | 
					            rtmp->set_send_timeout(SRS_PAUSED_SEND_TIMEOUT);
 | 
				
			||||||
| 
						 | 
					@ -670,7 +669,6 @@ srs_error_t SrsRtmpConn::playing(SrsLiveSource* source)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    // Use receiving thread to receive packets from peer.
 | 
					    // Use receiving thread to receive packets from peer.
 | 
				
			||||||
    // @see: https://github.com/ossrs/srs/issues/217
 | 
					 | 
				
			||||||
    SrsQueueRecvThread trd(consumer, rtmp, SRS_PERF_MW_SLEEP, _srs_context->get_id());
 | 
					    SrsQueueRecvThread trd(consumer, rtmp, SRS_PERF_MW_SLEEP, _srs_context->get_id());
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    if ((err = trd.start()) != srs_success) {
 | 
					    if ((err = trd.start()) != srs_success) {
 | 
				
			||||||
| 
						 | 
					@ -731,8 +729,6 @@ srs_error_t SrsRtmpConn::do_playing(SrsLiveSource* source, SrsLiveConsumer* cons
 | 
				
			||||||
        pprint->elapse();
 | 
					        pprint->elapse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // to use isolate thread to recv, can improve about 33% performance.
 | 
					        // to use isolate thread to recv, can improve about 33% performance.
 | 
				
			||||||
        // @see: https://github.com/ossrs/srs/issues/196
 | 
					 | 
				
			||||||
        // @see: https://github.com/ossrs/srs/issues/217
 | 
					 | 
				
			||||||
        while (!rtrd->empty()) {
 | 
					        while (!rtrd->empty()) {
 | 
				
			||||||
            SrsCommonMessage* msg = rtrd->pump();
 | 
					            SrsCommonMessage* msg = rtrd->pump();
 | 
				
			||||||
            if ((err = process_play_control_msg(consumer, msg)) != srs_success) {
 | 
					            if ((err = process_play_control_msg(consumer, msg)) != srs_success) {
 | 
				
			||||||
| 
						 | 
					@ -1114,7 +1110,6 @@ srs_error_t SrsRtmpConn::process_play_control_msg(SrsLiveConsumer* consumer, Srs
 | 
				
			||||||
    SrsAutoFree(SrsPacket, pkt);
 | 
					    SrsAutoFree(SrsPacket, pkt);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    // for jwplayer/flowplayer, which send close as pause message.
 | 
					    // for jwplayer/flowplayer, which send close as pause message.
 | 
				
			||||||
    // @see https://github.com/ossrs/srs/issues/6
 | 
					 | 
				
			||||||
    SrsCloseStreamPacket* close = dynamic_cast<SrsCloseStreamPacket*>(pkt);
 | 
					    SrsCloseStreamPacket* close = dynamic_cast<SrsCloseStreamPacket*>(pkt);
 | 
				
			||||||
    if (close) {
 | 
					    if (close) {
 | 
				
			||||||
        return srs_error_new(ERROR_CONTROL_RTMP_CLOSE, "rtmp: close stream");
 | 
					        return srs_error_new(ERROR_CONTROL_RTMP_CLOSE, "rtmp: close stream");
 | 
				
			||||||
| 
						 | 
					@ -1122,7 +1117,6 @@ srs_error_t SrsRtmpConn::process_play_control_msg(SrsLiveConsumer* consumer, Srs
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    // call msg,
 | 
					    // call msg,
 | 
				
			||||||
    // support response null first,
 | 
					    // support response null first,
 | 
				
			||||||
    // @see https://github.com/ossrs/srs/issues/106
 | 
					 | 
				
			||||||
    // TODO: FIXME: response in right way, or forward in edge mode.
 | 
					    // TODO: FIXME: response in right way, or forward in edge mode.
 | 
				
			||||||
    SrsCallPacket* call = dynamic_cast<SrsCallPacket*>(pkt);
 | 
					    SrsCallPacket* call = dynamic_cast<SrsCallPacket*>(pkt);
 | 
				
			||||||
    if (call) {
 | 
					    if (call) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -82,7 +82,6 @@ private:
 | 
				
			||||||
    ISrsWakable* wakable;
 | 
					    ISrsWakable* wakable;
 | 
				
			||||||
    // The elapsed duration in srs_utime_t
 | 
					    // The elapsed duration in srs_utime_t
 | 
				
			||||||
    // For live play duration, for instance, rtmpdump to record.
 | 
					    // For live play duration, for instance, rtmpdump to record.
 | 
				
			||||||
    // @see https://github.com/ossrs/srs/issues/47
 | 
					 | 
				
			||||||
    srs_utime_t duration;
 | 
					    srs_utime_t duration;
 | 
				
			||||||
    // The MR(merged-write) sleep time in srs_utime_t.
 | 
					    // The MR(merged-write) sleep time in srs_utime_t.
 | 
				
			||||||
    srs_utime_t mw_sleep;
 | 
					    srs_utime_t mw_sleep;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,7 +16,6 @@
 | 
				
			||||||
class SrsConfDirective;
 | 
					class SrsConfDirective;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// The security apply on vhost.
 | 
					// The security apply on vhost.
 | 
				
			||||||
// @see https://github.com/ossrs/srs/issues/211
 | 
					 | 
				
			||||||
class SrsSecurity
 | 
					class SrsSecurity
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,7 +6,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <srs_kernel_mp3.hpp>
 | 
					#include <srs_kernel_mp3.hpp>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// for srs-librtmp, @see https://github.com/ossrs/srs/issues/213
 | 
					 | 
				
			||||||
#ifndef _WIN32
 | 
					#ifndef _WIN32
 | 
				
			||||||
#include <unistd.h>
 | 
					#include <unistd.h>
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,7 +6,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <srs_kernel_utility.hpp>
 | 
					#include <srs_kernel_utility.hpp>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// for srs-librtmp, @see https://github.com/ossrs/srs/issues/213
 | 
					 | 
				
			||||||
#ifndef _WIN32
 | 
					#ifndef _WIN32
 | 
				
			||||||
#include <unistd.h>
 | 
					#include <unistd.h>
 | 
				
			||||||
#include <netdb.h>
 | 
					#include <netdb.h>
 | 
				
			||||||
| 
						 | 
					@ -120,7 +119,6 @@ srs_utime_t srs_update_system_time()
 | 
				
			||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    // @see: https://github.com/ossrs/srs/issues/35
 | 
					 | 
				
			||||||
    // we must convert the tv_sec/tv_usec to int64_t.
 | 
					    // we must convert the tv_sec/tv_usec to int64_t.
 | 
				
			||||||
    int64_t now_us = ((int64_t)now.tv_sec) * 1000 * 1000 + (int64_t)now.tv_usec;
 | 
					    int64_t now_us = ((int64_t)now.tv_sec) * 1000 * 1000 + (int64_t)now.tv_usec;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
| 
						 | 
					@ -140,7 +138,6 @@ srs_utime_t srs_update_system_time()
 | 
				
			||||||
    diff = srs_max(0, diff);
 | 
					    diff = srs_max(0, diff);
 | 
				
			||||||
    if (diff < 0 || diff > 1000 * SYS_TIME_RESOLUTION_US) {
 | 
					    if (diff < 0 || diff > 1000 * SYS_TIME_RESOLUTION_US) {
 | 
				
			||||||
        srs_warn("clock jump, history=%" PRId64 "us, now=%" PRId64 "us, diff=%" PRId64 "us", _srs_system_time_us_cache, now_us, diff);
 | 
					        srs_warn("clock jump, history=%" PRId64 "us, now=%" PRId64 "us, diff=%" PRId64 "us", _srs_system_time_us_cache, now_us, diff);
 | 
				
			||||||
        // @see: https://github.com/ossrs/srs/issues/109
 | 
					 | 
				
			||||||
        _srs_system_time_startup_time += diff;
 | 
					        _srs_system_time_startup_time += diff;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
| 
						 | 
					@ -580,7 +577,6 @@ int srs_do_create_dir_recursively(string dir)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    // create curren dir.
 | 
					    // create curren dir.
 | 
				
			||||||
    // for srs-librtmp, @see https://github.com/ossrs/srs/issues/213
 | 
					 | 
				
			||||||
#ifdef _WIN32
 | 
					#ifdef _WIN32
 | 
				
			||||||
    if (::_mkdir(dir.c_str()) < 0) {
 | 
					    if (::_mkdir(dir.c_str()) < 0) {
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -167,7 +167,6 @@ srs_error_t SrsFastStream::grow(ISrsReader* reader, int required_size)
 | 
				
			||||||
         * to improve read performance, merge some packets then read,
 | 
					         * to improve read performance, merge some packets then read,
 | 
				
			||||||
         * when it on and read small bytes, we sleep to wait more data.,
 | 
					         * when it on and read small bytes, we sleep to wait more data.,
 | 
				
			||||||
         * that is, we merge some data to read together.
 | 
					         * that is, we merge some data to read together.
 | 
				
			||||||
         * @see https://github.com/ossrs/srs/issues/241
 | 
					 | 
				
			||||||
         */
 | 
					         */
 | 
				
			||||||
        if (merged_read && _handler) {
 | 
					        if (merged_read && _handler) {
 | 
				
			||||||
            _handler->on_read(nread);
 | 
					            _handler->on_read(nread);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,7 +6,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <srs_protocol_utility.hpp>
 | 
					#include <srs_protocol_utility.hpp>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// for srs-librtmp, @see https://github.com/ossrs/srs/issues/213
 | 
					 | 
				
			||||||
#ifndef _WIN32
 | 
					#ifndef _WIN32
 | 
				
			||||||
#include <unistd.h>
 | 
					#include <unistd.h>
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -345,7 +344,6 @@ srs_error_t srs_write_large_iovs(ISrsProtocolReadWriter* skt, iovec* iovs, int s
 | 
				
			||||||
    srs_error_t err = srs_success;
 | 
					    srs_error_t err = srs_success;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    // the limits of writev iovs.
 | 
					    // the limits of writev iovs.
 | 
				
			||||||
    // for srs-librtmp, @see https://github.com/ossrs/srs/issues/213
 | 
					 | 
				
			||||||
#ifndef _WIN32
 | 
					#ifndef _WIN32
 | 
				
			||||||
    // for linux, generally it's 1024.
 | 
					    // for linux, generally it's 1024.
 | 
				
			||||||
    static int limits = (int)sysconf(_SC_IOV_MAX);
 | 
					    static int limits = (int)sysconf(_SC_IOV_MAX);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,7 +9,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <srs_core.hpp>
 | 
					#include <srs_core.hpp>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// for srs-librtmp, @see https://github.com/ossrs/srs/issues/213
 | 
					 | 
				
			||||||
#ifndef _WIN32
 | 
					#ifndef _WIN32
 | 
				
			||||||
#include <sys/uio.h>
 | 
					#include <sys/uio.h>
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -281,7 +281,6 @@ srs_error_t SrsRawAacStream::adts_demux(SrsBuffer* stream, char** pframe, int* p
 | 
				
			||||||
        // decode the ADTS.
 | 
					        // decode the ADTS.
 | 
				
			||||||
        // @see ISO_IEC_13818-7-AAC-2004.pdf, page 26
 | 
					        // @see ISO_IEC_13818-7-AAC-2004.pdf, page 26
 | 
				
			||||||
        //      6.2 Audio Data Transport Stream, ADTS
 | 
					        //      6.2 Audio Data Transport Stream, ADTS
 | 
				
			||||||
        // @see https://github.com/ossrs/srs/issues/212#issuecomment-64145885
 | 
					 | 
				
			||||||
        // byte_alignment()
 | 
					        // byte_alignment()
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        // adts_fixed_header:
 | 
					        // adts_fixed_header:
 | 
				
			||||||
| 
						 | 
					@ -342,7 +341,7 @@ srs_error_t SrsRawAacStream::adts_demux(SrsBuffer* stream, char** pframe, int* p
 | 
				
			||||||
        int8_t channel_configuration = (sfiv >> 6) & 0x07;
 | 
					        int8_t channel_configuration = (sfiv >> 6) & 0x07;
 | 
				
			||||||
        /*int8_t original = (sfiv >> 5) & 0x01;*/
 | 
					        /*int8_t original = (sfiv >> 5) & 0x01;*/
 | 
				
			||||||
        /*int8_t home = (sfiv >> 4) & 0x01;*/
 | 
					        /*int8_t home = (sfiv >> 4) & 0x01;*/
 | 
				
			||||||
        //int8_t Emphasis; @remark, Emphasis is removed, @see https://github.com/ossrs/srs/issues/212#issuecomment-64154736
 | 
					        //int8_t Emphasis; @remark, Emphasis is removed
 | 
				
			||||||
        // 4bits left.
 | 
					        // 4bits left.
 | 
				
			||||||
        // adts_variable_header(), 1.A.2.2.2 Variable Header of ADTS
 | 
					        // adts_variable_header(), 1.A.2.2.2 Variable Header of ADTS
 | 
				
			||||||
        // copyright_identification_bit 1 bslbf
 | 
					        // copyright_identification_bit 1 bslbf
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -571,7 +571,6 @@ namespace srs_internal
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        // directly generate the public key.
 | 
					        // directly generate the public key.
 | 
				
			||||||
        // @see: https://github.com/ossrs/srs/issues/148
 | 
					 | 
				
			||||||
        int pkey_size = 128;
 | 
					        int pkey_size = 128;
 | 
				
			||||||
        if ((err = dh.copy_shared_key(c1->get_key(), 128, key.key, pkey_size)) != srs_success) {
 | 
					        if ((err = dh.copy_shared_key(c1->get_key(), 128, key.key, pkey_size)) != srs_success) {
 | 
				
			||||||
            return srs_error_wrap(err, "copy shared key");
 | 
					            return srs_error_wrap(err, "copy shared key");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1036,7 +1036,6 @@ srs_error_t SrsProtocol::read_message_header(SrsChunkStream* chunk, char fmt)
 | 
				
			||||||
        // 0x04             where: message_type=4(protocol control user-control message)
 | 
					        // 0x04             where: message_type=4(protocol control user-control message)
 | 
				
			||||||
        // 0x00 0x06            where: event Ping(0x06)
 | 
					        // 0x00 0x06            where: event Ping(0x06)
 | 
				
			||||||
        // 0x00 0x00 0x0d 0x0f  where: event data 4bytes ping timestamp.
 | 
					        // 0x00 0x00 0x0d 0x0f  where: event data 4bytes ping timestamp.
 | 
				
			||||||
        // @see: https://github.com/ossrs/srs/issues/98
 | 
					 | 
				
			||||||
        if (fmt == RTMP_FMT_TYPE1) {
 | 
					        if (fmt == RTMP_FMT_TYPE1) {
 | 
				
			||||||
            srs_warn("fresh chunk starts with fmt=1");
 | 
					            srs_warn("fresh chunk starts with fmt=1");
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
| 
						 | 
					@ -1175,7 +1174,6 @@ srs_error_t SrsProtocol::read_message_header(SrsChunkStream* chunk, char fmt)
 | 
				
			||||||
        pp[0] = *p++;
 | 
					        pp[0] = *p++;
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        // always use 31bits timestamp, for some server may use 32bits extended timestamp.
 | 
					        // always use 31bits timestamp, for some server may use 32bits extended timestamp.
 | 
				
			||||||
        // @see https://github.com/ossrs/srs/issues/111
 | 
					 | 
				
			||||||
        timestamp &= 0x7fffffff;
 | 
					        timestamp &= 0x7fffffff;
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        /**
 | 
					        /**
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,7 +13,6 @@
 | 
				
			||||||
#include <vector>
 | 
					#include <vector>
 | 
				
			||||||
#include <string>
 | 
					#include <string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// For srs-librtmp, @see https://github.com/ossrs/srs/issues/213
 | 
					 | 
				
			||||||
#ifndef _WIN32
 | 
					#ifndef _WIN32
 | 
				
			||||||
#include <sys/uio.h>
 | 
					#include <sys/uio.h>
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -161,7 +160,6 @@ private:
 | 
				
			||||||
    std::map<int, SrsChunkStream*> chunk_streams;
 | 
					    std::map<int, SrsChunkStream*> chunk_streams;
 | 
				
			||||||
    // Cache some frequently used chunk header.
 | 
					    // Cache some frequently used chunk header.
 | 
				
			||||||
    // cs_cache, the chunk stream cache.
 | 
					    // cs_cache, the chunk stream cache.
 | 
				
			||||||
    // @see https://github.com/ossrs/srs/issues/249
 | 
					 | 
				
			||||||
    SrsChunkStream** cs_cache;
 | 
					    SrsChunkStream** cs_cache;
 | 
				
			||||||
    // The bytes buffer cache, recv from skt, provide services for stream.
 | 
					    // The bytes buffer cache, recv from skt, provide services for stream.
 | 
				
			||||||
    SrsFastStream* in_buffer;
 | 
					    SrsFastStream* in_buffer;
 | 
				
			||||||
| 
						 | 
					@ -179,7 +177,6 @@ private:
 | 
				
			||||||
    bool show_debug_info;
 | 
					    bool show_debug_info;
 | 
				
			||||||
    // Whether auto response when recv messages.
 | 
					    // Whether auto response when recv messages.
 | 
				
			||||||
    // default to true for it's very easy to use the protocol stack.
 | 
					    // default to true for it's very easy to use the protocol stack.
 | 
				
			||||||
    // @see: https://github.com/ossrs/srs/issues/217
 | 
					 | 
				
			||||||
    bool auto_response_when_recv;
 | 
					    bool auto_response_when_recv;
 | 
				
			||||||
    // When not auto response message, manual flush the messages in queue.
 | 
					    // When not auto response message, manual flush the messages in queue.
 | 
				
			||||||
    std::vector<SrsPacket*> manual_response_queue;
 | 
					    std::vector<SrsPacket*> manual_response_queue;
 | 
				
			||||||
| 
						 | 
					@ -208,7 +205,6 @@ public:
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    // Set the auto response message when recv for protocol stack.
 | 
					    // Set the auto response message when recv for protocol stack.
 | 
				
			||||||
    // @param v, whether auto response message when recv message.
 | 
					    // @param v, whether auto response message when recv message.
 | 
				
			||||||
    // @see: https://github.com/ossrs/srs/issues/217
 | 
					 | 
				
			||||||
    virtual void set_auto_response(bool v);
 | 
					    virtual void set_auto_response(bool v);
 | 
				
			||||||
    // Flush for manual response when the auto response is disabled
 | 
					    // Flush for manual response when the auto response is disabled
 | 
				
			||||||
    // by set_auto_response(false), we default use auto response, so donot
 | 
					    // by set_auto_response(false), we default use auto response, so donot
 | 
				
			||||||
| 
						 | 
					@ -222,13 +218,11 @@ public:
 | 
				
			||||||
    // that is, we merge some data to read together.
 | 
					    // that is, we merge some data to read together.
 | 
				
			||||||
    // @param v true to ename merged read.
 | 
					    // @param v true to ename merged read.
 | 
				
			||||||
    // @param handler the handler when merge read is enabled.
 | 
					    // @param handler the handler when merge read is enabled.
 | 
				
			||||||
    // @see https://github.com/ossrs/srs/issues/241
 | 
					 | 
				
			||||||
    virtual void set_merge_read(bool v, IMergeReadHandler* handler);
 | 
					    virtual void set_merge_read(bool v, IMergeReadHandler* handler);
 | 
				
			||||||
    // Create buffer with specifeid size.
 | 
					    // Create buffer with specifeid size.
 | 
				
			||||||
    // @param buffer the size of buffer.
 | 
					    // @param buffer the size of buffer.
 | 
				
			||||||
    // @remark when MR(SRS_PERF_MERGED_READ) disabled, always set to 8K.
 | 
					    // @remark when MR(SRS_PERF_MERGED_READ) disabled, always set to 8K.
 | 
				
			||||||
    // @remark when buffer changed, the previous ptr maybe invalid.
 | 
					    // @remark when buffer changed, the previous ptr maybe invalid.
 | 
				
			||||||
    // @see https://github.com/ossrs/srs/issues/241
 | 
					 | 
				
			||||||
    virtual void set_recv_buffer(int buffer_size);
 | 
					    virtual void set_recv_buffer(int buffer_size);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
| 
						 | 
					@ -429,7 +423,6 @@ public:
 | 
				
			||||||
    std::string stream;
 | 
					    std::string stream;
 | 
				
			||||||
    // For play live stream,
 | 
					    // For play live stream,
 | 
				
			||||||
    // used to specified the stop when exceed the duration.
 | 
					    // used to specified the stop when exceed the duration.
 | 
				
			||||||
    // @see https://github.com/ossrs/srs/issues/45
 | 
					 | 
				
			||||||
    // in srs_utime_t.
 | 
					    // in srs_utime_t.
 | 
				
			||||||
    srs_utime_t duration;
 | 
					    srs_utime_t duration;
 | 
				
			||||||
    // The token in the connect request,
 | 
					    // The token in the connect request,
 | 
				
			||||||
| 
						 | 
					@ -614,7 +607,6 @@ public:
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    // Set the auto response message when recv for protocol stack.
 | 
					    // Set the auto response message when recv for protocol stack.
 | 
				
			||||||
    // @param v, whether auto response message when recv message.
 | 
					    // @param v, whether auto response message when recv message.
 | 
				
			||||||
    // @see: https://github.com/ossrs/srs/issues/217
 | 
					 | 
				
			||||||
    virtual void set_auto_response(bool v);
 | 
					    virtual void set_auto_response(bool v);
 | 
				
			||||||
#ifdef SRS_PERF_MERGED_READ
 | 
					#ifdef SRS_PERF_MERGED_READ
 | 
				
			||||||
    // To improve read performance, merge some packets then read,
 | 
					    // To improve read performance, merge some packets then read,
 | 
				
			||||||
| 
						 | 
					@ -622,13 +614,11 @@ public:
 | 
				
			||||||
    // that is, we merge some data to read together.
 | 
					    // that is, we merge some data to read together.
 | 
				
			||||||
    // @param v true to ename merged read.
 | 
					    // @param v true to ename merged read.
 | 
				
			||||||
    // @param handler the handler when merge read is enabled.
 | 
					    // @param handler the handler when merge read is enabled.
 | 
				
			||||||
    // @see https://github.com/ossrs/srs/issues/241
 | 
					 | 
				
			||||||
    virtual void set_merge_read(bool v, IMergeReadHandler* handler);
 | 
					    virtual void set_merge_read(bool v, IMergeReadHandler* handler);
 | 
				
			||||||
    // Create buffer with specifeid size.
 | 
					    // Create buffer with specifeid size.
 | 
				
			||||||
    // @param buffer the size of buffer.
 | 
					    // @param buffer the size of buffer.
 | 
				
			||||||
    // @remark when MR(SRS_PERF_MERGED_READ) disabled, always set to 8K.
 | 
					    // @remark when MR(SRS_PERF_MERGED_READ) disabled, always set to 8K.
 | 
				
			||||||
    // @remark when buffer changed, the previous ptr maybe invalid.
 | 
					    // @remark when buffer changed, the previous ptr maybe invalid.
 | 
				
			||||||
    // @see https://github.com/ossrs/srs/issues/241
 | 
					 | 
				
			||||||
    virtual void set_recv_buffer(int buffer_size);
 | 
					    virtual void set_recv_buffer(int buffer_size);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    // To set/get the recv timeout in srs_utime_t.
 | 
					    // To set/get the recv timeout in srs_utime_t.
 | 
				
			||||||
| 
						 | 
					@ -669,7 +659,6 @@ public:
 | 
				
			||||||
    // @param stream_id, the stream id of packet to send over, 0 for control message.
 | 
					    // @param stream_id, the stream id of packet to send over, 0 for control message.
 | 
				
			||||||
    //
 | 
					    //
 | 
				
			||||||
    // @remark performance issue, to support 6k+ 250kbps client,
 | 
					    // @remark performance issue, to support 6k+ 250kbps client,
 | 
				
			||||||
    //       @see https://github.com/ossrs/srs/issues/194
 | 
					 | 
				
			||||||
    virtual srs_error_t send_and_free_messages(SrsSharedPtrMessage** msgs, int nb_msgs, int stream_id);
 | 
					    virtual srs_error_t send_and_free_messages(SrsSharedPtrMessage** msgs, int nb_msgs, int stream_id);
 | 
				
			||||||
    // Send the RTMP packet and always free it.
 | 
					    // Send the RTMP packet and always free it.
 | 
				
			||||||
    // user must never free or use the packet after this method,
 | 
					    // user must never free or use the packet after this method,
 | 
				
			||||||
| 
						 | 
					@ -1330,11 +1319,9 @@ public:
 | 
				
			||||||
    // Name of command. Set to "|RtmpSampleAccess".
 | 
					    // Name of command. Set to "|RtmpSampleAccess".
 | 
				
			||||||
    std::string command_name;
 | 
					    std::string command_name;
 | 
				
			||||||
    // Whether allow access the sample of video.
 | 
					    // Whether allow access the sample of video.
 | 
				
			||||||
    // @see: https://github.com/ossrs/srs/issues/49
 | 
					 | 
				
			||||||
    // @see: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/NetStream.html#videoSampleAccess
 | 
					    // @see: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/NetStream.html#videoSampleAccess
 | 
				
			||||||
    bool video_sample_access;
 | 
					    bool video_sample_access;
 | 
				
			||||||
    // Whether allow access the sample of audio.
 | 
					    // Whether allow access the sample of audio.
 | 
				
			||||||
    // @see: https://github.com/ossrs/srs/issues/49
 | 
					 | 
				
			||||||
    // @see: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/NetStream.html#audioSampleAccess
 | 
					    // @see: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/NetStream.html#audioSampleAccess
 | 
				
			||||||
    bool audio_sample_access;
 | 
					    bool audio_sample_access;
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -97,7 +97,6 @@ srs_error_t SrsBasicRtmpClient::do_connect_app(string local_ip, bool debug)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    // notify server the edge identity,
 | 
					    // notify server the edge identity,
 | 
				
			||||||
    // @see https://github.com/ossrs/srs/issues/147
 | 
					 | 
				
			||||||
    SrsAmf0Object* data = req->args;
 | 
					    SrsAmf0Object* data = req->args;
 | 
				
			||||||
    data->set("srs_sig", SrsAmf0Any::str(RTMP_SIG_SRS_KEY));
 | 
					    data->set("srs_sig", SrsAmf0Any::str(RTMP_SIG_SRS_KEY));
 | 
				
			||||||
    data->set("srs_server", SrsAmf0Any::str(RTMP_SIG_SRS_SERVER));
 | 
					    data->set("srs_server", SrsAmf0Any::str(RTMP_SIG_SRS_SERVER));
 | 
				
			||||||
| 
						 | 
					@ -121,7 +120,6 @@ srs_error_t SrsBasicRtmpClient::do_connect_app(string local_ip, bool debug)
 | 
				
			||||||
    req->tcUrl = tc_url;
 | 
					    req->tcUrl = tc_url;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    // upnode server identity will show in the connect_app of client.
 | 
					    // upnode server identity will show in the connect_app of client.
 | 
				
			||||||
    // @see https://github.com/ossrs/srs/issues/160
 | 
					 | 
				
			||||||
    // the debug_srs_upnode is config in vhost and default to true.
 | 
					    // the debug_srs_upnode is config in vhost and default to true.
 | 
				
			||||||
    SrsServerInfo si;
 | 
					    SrsServerInfo si;
 | 
				
			||||||
    if ((err = client->connect_app(req->app, tc_url, req, debug, &si)) != srs_success) {
 | 
					    if ((err = client->connect_app(req->app, tc_url, req, debug, &si)) != srs_success) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,7 +41,6 @@ srs_error_t srs_st_init()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#ifdef __linux__
 | 
					#ifdef __linux__
 | 
				
			||||||
    // check epoll, some old linux donot support epoll.
 | 
					    // check epoll, some old linux donot support epoll.
 | 
				
			||||||
    // @see https://github.com/ossrs/srs/issues/162
 | 
					 | 
				
			||||||
    if (!srs_st_epoll_is_supported()) {
 | 
					    if (!srs_st_epoll_is_supported()) {
 | 
				
			||||||
        return srs_error_new(ERROR_ST_SET_EPOLL, "linux epoll disabled");
 | 
					        return srs_error_new(ERROR_ST_SET_EPOLL, "linux epoll disabled");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -495,7 +494,6 @@ srs_error_t SrsStSocket::read(void* buf, size_t size, ssize_t* nread)
 | 
				
			||||||
    // (a value of 0 means the network connection is closed or end of file is reached).
 | 
					    // (a value of 0 means the network connection is closed or end of file is reached).
 | 
				
			||||||
    // Otherwise, a value of -1 is returned and errno is set to indicate the error.
 | 
					    // Otherwise, a value of -1 is returned and errno is set to indicate the error.
 | 
				
			||||||
    if (nb_read <= 0) {
 | 
					    if (nb_read <= 0) {
 | 
				
			||||||
        // @see https://github.com/ossrs/srs/issues/200
 | 
					 | 
				
			||||||
        if (nb_read < 0 && errno == ETIME) {
 | 
					        if (nb_read < 0 && errno == ETIME) {
 | 
				
			||||||
            return srs_error_new(ERROR_SOCKET_TIMEOUT, "timeout %d ms", srsu2msi(rtm));
 | 
					            return srs_error_new(ERROR_SOCKET_TIMEOUT, "timeout %d ms", srsu2msi(rtm));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -531,7 +529,6 @@ srs_error_t SrsStSocket::read_fully(void* buf, size_t size, ssize_t* nread)
 | 
				
			||||||
    // (a value less than nbyte means the network connection is closed or end of file is reached)
 | 
					    // (a value less than nbyte means the network connection is closed or end of file is reached)
 | 
				
			||||||
    // Otherwise, a value of -1 is returned and errno is set to indicate the error.
 | 
					    // Otherwise, a value of -1 is returned and errno is set to indicate the error.
 | 
				
			||||||
    if (nb_read != (ssize_t)size) {
 | 
					    if (nb_read != (ssize_t)size) {
 | 
				
			||||||
        // @see https://github.com/ossrs/srs/issues/200
 | 
					 | 
				
			||||||
        if (nb_read < 0 && errno == ETIME) {
 | 
					        if (nb_read < 0 && errno == ETIME) {
 | 
				
			||||||
            return srs_error_new(ERROR_SOCKET_TIMEOUT, "timeout %d ms", srsu2msi(rtm));
 | 
					            return srs_error_new(ERROR_SOCKET_TIMEOUT, "timeout %d ms", srsu2msi(rtm));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -566,7 +563,6 @@ srs_error_t SrsStSocket::write(void* buf, size_t size, ssize_t* nwrite)
 | 
				
			||||||
    // On success a non-negative integer equal to nbyte is returned.
 | 
					    // On success a non-negative integer equal to nbyte is returned.
 | 
				
			||||||
    // Otherwise, a value of -1 is returned and errno is set to indicate the error.
 | 
					    // Otherwise, a value of -1 is returned and errno is set to indicate the error.
 | 
				
			||||||
    if (nb_write <= 0) {
 | 
					    if (nb_write <= 0) {
 | 
				
			||||||
        // @see https://github.com/ossrs/srs/issues/200
 | 
					 | 
				
			||||||
        if (nb_write < 0 && errno == ETIME) {
 | 
					        if (nb_write < 0 && errno == ETIME) {
 | 
				
			||||||
            return srs_error_new(ERROR_SOCKET_TIMEOUT, "write timeout %d ms", srsu2msi(stm));
 | 
					            return srs_error_new(ERROR_SOCKET_TIMEOUT, "write timeout %d ms", srsu2msi(stm));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -597,7 +593,6 @@ srs_error_t SrsStSocket::writev(const iovec *iov, int iov_size, ssize_t* nwrite)
 | 
				
			||||||
    // On success a non-negative integer equal to nbyte is returned.
 | 
					    // On success a non-negative integer equal to nbyte is returned.
 | 
				
			||||||
    // Otherwise, a value of -1 is returned and errno is set to indicate the error.
 | 
					    // Otherwise, a value of -1 is returned and errno is set to indicate the error.
 | 
				
			||||||
    if (nb_write <= 0) {
 | 
					    if (nb_write <= 0) {
 | 
				
			||||||
        // @see https://github.com/ossrs/srs/issues/200
 | 
					 | 
				
			||||||
        if (nb_write < 0 && errno == ETIME) {
 | 
					        if (nb_write < 0 && errno == ETIME) {
 | 
				
			||||||
            return srs_error_new(ERROR_SOCKET_TIMEOUT, "writev timeout %d ms", srsu2msi(stm));
 | 
					            return srs_error_new(ERROR_SOCKET_TIMEOUT, "writev timeout %d ms", srsu2msi(stm));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -727,7 +727,6 @@ VOID TEST(ProtocolStackTest, ProtocolRecvMessage)
 | 
				
			||||||
// 0x04             where: message_type=4(protocol control user-control message)
 | 
					// 0x04             where: message_type=4(protocol control user-control message)
 | 
				
			||||||
// 0x00 0x06            where: event Ping(0x06)
 | 
					// 0x00 0x06            where: event Ping(0x06)
 | 
				
			||||||
// 0x00 0x00 0x0d 0x0f  where: event data 4bytes ping timestamp.
 | 
					// 0x00 0x00 0x0d 0x0f  where: event data 4bytes ping timestamp.
 | 
				
			||||||
// @see: https://github.com/ossrs/srs/issues/98
 | 
					 | 
				
			||||||
VOID TEST(ProtocolStackTest, ProtocolRecvMessageBug98)
 | 
					VOID TEST(ProtocolStackTest, ProtocolRecvMessageBug98)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    MockBufferIO bio;
 | 
					    MockBufferIO bio;
 | 
				
			||||||
| 
						 | 
					@ -3824,7 +3823,6 @@ VOID TEST(ProtocolStackTest, ProtocolRecvExtTimeMessage2)
 | 
				
			||||||
* always use 31bits timestamp.
 | 
					* always use 31bits timestamp.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
// always use 31bits timestamp, for some server may use 32bits extended timestamp.
 | 
					// always use 31bits timestamp, for some server may use 32bits extended timestamp.
 | 
				
			||||||
// @see https://github.com/ossrs/srs/issues/111
 | 
					 | 
				
			||||||
VOID TEST(ProtocolStackTest, ProtocolRecvExtTimeMessage3)
 | 
					VOID TEST(ProtocolStackTest, ProtocolRecvExtTimeMessage3)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    MockBufferIO bio;
 | 
					    MockBufferIO bio;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue