ossrs / srs

SRS is a simple, high-efficiency, real-time video server supporting RTMP, WebRTC, HLS, HTTP-FLV, SRT, MPEG-DASH, and GB28181.
https://ossrs.io
MIT License
24.86k stars 5.29k forks source link

Using RTMP to push stream to SRS and using webRTC to push stream to SRS, the latency remains consistent without reduction. #3751

Closed peterlij closed 10 months ago

peterlij commented 11 months ago

Note: Please read FAQ before file an issue, see #2716

Description

Please description your issue here

  1. SRS Version: 4.0-r4

  2. SRS Log:

RTMP push SRS log

[2023-08-03 17:33:20.511][Trace][7034][z8f02e37] RTC: Need PLI ssrc=425322809, play=[z8f02e37], publish=[l64c34w5], count=11851/11852
[2023-08-03 17:33:20.511][Trace][7034][l64c34w5] RTC: Request PLI ssrc=425322809, play=[z8f02e37], count=11851/11852, bytes=12B
[2023-08-03 17:33:20.850][Trace][7034][740e6qxx] Hybrid cpu=1.00%,16MB, cid=569,12, timer=62,10,98, clock=0,47,1,0,0,0,0,0,0, objs=(pkt:1126,raw:0,fua:1126,msg:1126,oth:0,buf:563)
[2023-08-03 17:33:20.850][Trace][7034][740e6qxx] RTC: Server conns=2, rpkts=(575,rtp:563,stun:1,rtcp:11), spkts=(573,rtp:563,stun:1,rtcp:8), rtcp=(pli:9,twcc:9,rr:1), snk=(98,a:49,v:49,h:0), fid=(id:0,fid:575,ffid:0,addr:1,faddr:575)
[2023-08-03 17:33:22.487][Trace][7034][820dx570] RTMP client ip=10.29.182.44:64272, fd=13
[2023-08-03 17:33:22.488][Trace][7034][820dx570] complex handshake success
[2023-08-03 17:33:22.529][Trace][7034][820dx570] connect app, tcUrl=rtmp://10.29.182.44:1935/live, pageUrl=, swfUrl=, schema=rtmp, vhost=10.29.182.44, port=1935, app=live, args=null
[2023-08-03 17:33:22.529][Trace][7034][820dx570] protocol in.buffer=0, in.ack=0, out.ack=0, in.chunk=128, out.chunk=128
[2023-08-03 17:33:22.611][Trace][7034][820dx570] client identified, type=fmle-publish, vhost=10.29.182.44, app=live, stream=livestream, param=, duration=0ms
[2023-08-03 17:33:22.611][Trace][7034][820dx570] connected stream, tcUrl=rtmp://10.29.182.44:1935/live, pageUrl=, swfUrl=, schema=rtmp, vhost=__defaultVhost__, port=1935, app=live, stream=livestream, param=, args=null
[2023-08-03 17:33:22.611][Trace][7034][820dx570] new source, stream_url=/live/livestream
[2023-08-03 17:33:22.611][Trace][7034][820dx570] source url=/live/livestream, ip=10.29.182.44, cache=1, is_edge=0, source_id=/
[2023-08-03 17:33:22.693][Trace][7034][820dx570] RTC bridge from RTMP, rtmp2rtc=0, keep_bframe=0, merge_nalus=0
[2023-08-03 17:33:22.693][Trace][7034][820dx570] ignore disabled exec for vhost=__defaultVhost__
[2023-08-03 17:33:22.693][Trace][7034][820dx570] http: mount flv stream for sid=/live/livestream, mount=/live/livestream.flv
[2023-08-03 17:33:22.693][Trace][7034][820dx570] start publish mr=0/350, p1stpt=20000, pnt=5000, tcp_nodelay=0
[2023-08-03 17:33:23.279][Trace][7034][820dx570] got metadata, width=1920, height=1080, vcodec=7
[2023-08-03 17:33:23.279][Trace][7034][820dx570] 44B video sh,  codec(7, profile=Baseline, level=4, 1920x1080, 0kbps, 0.0fps, 0.0s)
[2023-08-03 17:33:25.850][Trace][7034][740e6qxx] Hybrid cpu=1.00%,18MB, cid=569,12, timer=62,10,98, clock=0,47,1,0,0,0,0,0,0, objs=(pkt:1126,raw:0,fua:1126,msg:1126,oth:0,buf:563)
[2023-08-03 17:33:25.850][Trace][7034][740e6qxx] RTC: Server conns=2, rpkts=(575,rtp:563,stun:1,rtcp:11), spkts=(573,rtp:563,stun:1,rtcp:8), rtcp=(pli:9,twcc:9,rr:1), snk=(98,a:49,v:49,h:0), fid=(id:0,fid:575,ffid:0,addr:1,faddr:575)
[2023-08-03 17:33:26.604][Trace][7034][8f96u864] <- RTC RECV #12, udp 5929, pps 503/591, schedule 5929

WebRTC push SRS log

[2023-08-03 14:03:01.010][Trace][33196][43ly2t7q] -> HLS time=50118084ms, sno=3, ts=livestream-2.ts, dur=10485ms, dva=0p
[2023-08-03 14:03:03.547][Trace][33196][0h72s8y2] Hybrid cpu=2.00%,20MB, cid=405,1, timer=62,0,0, clock=0,47,1,1,0,0,0,0,0, objs=(pkt:572,raw:186,fua:385,msg:646,oth:1,buf:1)
[2023-08-03 14:03:05.989][Trace][33196][43ly2t7q] <- CPB time=49995238, okbps=0,1,0, ikbps=3894,3920,0, mr=0/350, p1stpt=20000, pnt=5000
[2023-08-03 14:03:08.548][Trace][33196][0h72s8y2] Hybrid cpu=0.00%,20MB, cid=405,1, timer=62,0,0, clock=0,47,1,1,0,0,0,0,0, objs=(pkt:572,raw:186,fua:385,msg:646,oth:1,buf:1)
[2023-08-03 14:03:11.047][Trace][33196][43ly2t7q] -> HLS time=60146921ms, sno=4, ts=livestream-3.ts, dur=598ms, dva=0p
[2023-08-03 14:03:13.549][Trace][33196][0h72s8y2] Hybrid cpu=0.00%,21MB, cid=112,1, timer=62,0,0, clock=0,47,2,1,0,0,0,0,0, objs=(pkt:592,raw:183,fua:409,msg:667,oth:1,buf:1)
[2023-08-03 14:03:14.082][Trace][33196][855ey26v] HTTP #0 10.29.182.44:48330 POST http://10.29.182.44:1985/rtc/v1/publish/, content-length=1527
[2023-08-03 14:03:14.083][Trace][33196][855ey26v] RTC publish webrtc://10.29.182.44:1985//, api=http://10.29.182.44:1985/rtc/v1/publish/, tid=, clientip=10.29.182.44, app=__defaultApp__, stream=, offer=1409B, eip=, codec=
[2023-08-03 14:03:14.083][Trace][33196][855ey26v] ignore attribute=, value=
[2023-08-03 14:03:14.083][Trace][33196][855ey26v] new source, stream_url=/__defaultApp__/
[2023-08-03 14:03:14.083][Trace][33196][855ey26v] RTC publisher nack=1, nnc=1, pt-drop=0, twcc=1/3
[2023-08-03 14:03:14.083][Trace][33196][855ey26v] RTC: Init tracks {track: 18180649-9605-u394-1s93-910t127f06qh, is_active: 0=>1},{track: 7ta5rcp6-encb-543k-92j9-102n4um448ov, is_active: 0=>1}, ok
[2023-08-03 14:03:14.083][Trace][33196][855ey26v] RTC: Use candidates 10.29.182.44
[2023-08-03 14:03:14.084][Trace][33196][855ey26v] RTC init session, user=070hz077:7u56, url=/__defaultApp__/, encrypt=1/1, DTLS(role=passive, version=auto), timeout=30000ms, nack=1
[2023-08-03 14:03:14.084][Trace][33196][855ey26v] RTC username=070hz077:7u56, offer=1409B, answer=1299B
[2023-08-03 14:03:14.084][Trace][33196][855ey26v] RTC remote offer: v=0
o=MetaRtc 140728237200968 2 IN IP4 0.0.0.0
s=MetaRtcSession
t=0 0
a=ice-lite
a=group:BUNDLE 0 1
a=msid-semantic: WMS metaRTCLiveStream
m=audio 9 UDP/TLS/RTP/SAVPF 111
c=IN IP4 0.0.0.0
a=ice-ufrag:7u56
a=ice-pwd:66d69059r2w569w3rd798im04mx6w222
a=fingerprint:sha-256 B6:2D:A6:0F:F2:31:F6:08:E9:59:CC:47:33:97:2F:A6:E8:83:E7:1B:1F:1F:D2:15:2A:87:6E:AD:41:CB:C1:6F
a=setup:active
a=mid:0
a=sendonly
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
a=ssrc:502514650 cname:95oyzt77ck8i3420
a=ssrc:502514650 msid:- 7ta5rcp6-encb-543k-92j9-102n4um448ov
a=ssrc:502514650 mslabel:-
a=ssrc:502514650 label:7ta5rcp6-encb-543k-92j9-102n4um448ov
m=video 9 UDP/TLS/RTP/SAVPF 106
c=IN IP4 0.0.0.0
a=ice-ufrag:7u56
a=ice-pwd:66d69059r2w569w3rd798im04mx6w222
a=fingerprint:sha-256 B6:2D:A6:0F:F2:31:F6:08:E9:59:CC:47:33:97:2F:A6:E8:83:E7:1B:1F:1F:D2:15:2A:87:6E:AD:41:CB:C1:6F
a=setup:active
a=mid:1
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=sendonly
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:106 H264/90000
a=rtcp-fb:106 transport-cc
a=rtcp-fb:106 nack
a=rtcp-fb:106 nack pli
a=fmtp:106 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=ssrc:502514651 cname:95oyzt77ck8i3420
a=ssrc:502514651 msid:- 18180649-9605-u394-1s93-910t127f06qh
a=ssrc:502514651 mslabel:-
a=ssrc:502514651 label:18180649-9605-u394-1s93-910t127f06qh

[2023-08-03 14:03:14.084][Trace][33196][855ey26v] RTC local answer: v=0\r\no=SRS/4.0.268(Leo) 41717248 2 IN IP4 0.0.0.0\r\ns=SRSPublishSession\r\nt=0 0\r\na=ice-lite\r\na=group:BUNDLE 0 1\r\na=msid-semantic: WMS __defaultApp__/\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111\r\nc=IN IP4 0.0.0.0\r\na=ice-ufrag:070hz077\r\na=ice-pwd:478072058f36x0123r05sq185b07539k\r\na=fingerprint:sha-256 54:D0:F2:8E:D3:BB:37:D4:60:31:2E:68:30:47:C1:01:4A:E5:A7:C3:5A:70:FD:32:27:7D:A7:43:C6:11:7D:7F\r\na=setup:passive\r\na=mid:0\r\na=recvonly\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:111 opus/48000/2\r\na=fmtp:111 minptime=10;useinbandfec=1\r\na=candidate:0 1 udp 2130706431 10.29.182.44 8000 typ host generation 0\r\nm=video 9 UDP/TLS/RTP/SAVPF 106\r\nc=IN IP4 0.0.0.0\r\na=ice-ufrag:070hz077\r\na=ice-pwd:478072058f36x0123r05sq185b07539k\r\na=fingerprint:sha-256 54:D0:F2:8E:D3:BB:37:D4:60:31:2E:68:30:47:C1:01:4A:E5:A7:C3:5A:70:FD:32:27:7D:A7:43:C6:11:7D:7F\r\na=setup:passive\r\na=mid:1\r\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=recvonly\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:106 H264/90000\r\na=rtcp-fb:106 transport-cc\r\na=rtcp-fb:106 nack\r\na=rtcp-fb:106 nack pli\r\na=fmtp:106 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\na=candidate:0 1 udp 2130706431 10.29.182.44 8000 typ host generation 0\r\n
[2023-08-03 14:03:14.084][Trace][33196][855ey26v] TCP: before dispose resource(HttpConn)(0x27dffd0), conns=2, zombies=0, ign=0, inz=0, ind=0
[2023-08-03 14:03:14.084][Warn][33196][855ey26v][104] client disconnect peer. ret=1007
[2023-08-03 14:03:14.084][Trace][33196][pag4q721] TCP: clear zombies=1 resources, conns=2, removing=0, unsubs=0
[2023-08-03 14:03:14.084][Trace][33196][855ey26v] TCP: disposing #0 resource(HttpConn)(0x27dffd0), conns=2, disposing=1, zombies=0
[2023-08-03 14:03:14.086][Trace][33196][855ey26v] RTC: session address init 10.29.182.44:16177
[2023-08-03 14:03:14.086][Trace][33196][855ey26v] RTC: session STUN done, waiting DTLS handshake.
[2023-08-03 14:03:14.086][Trace][33196][0435fb8n] <- RTC RECV #12, udp 1603, pps 359/104, schedule 1603
[2023-08-03 14:03:14.086][Trace][33196][855ey26v] DTLS: State Passive RECV, done=0, arq=0/0, r0=1, r1=0, len=312, cnt=22, size=299, hs=1
[2023-08-03 14:03:14.089][Trace][33196][855ey26v] DTLS: State Passive SEND, done=0, arq=0/0, r0=-1, r1=2, len=749, cnt=22, size=82, hs=2
[2023-08-03 14:03:14.094][Trace][33196][855ey26v] DTLS: State Passive RECV, done=0, arq=0/0, r0=1, r1=0, len=642, cnt=22, size=295, hs=11
[2023-08-03 14:03:14.097][Trace][33196][855ey26v] DTLS: State Passive SEND, done=1, arq=0/0, r0=1, r1=0, len=554, cnt=22, size=466, hs=4
[2023-08-03 14:03:14.097][Trace][33196][855ey26v] RTC: DTLS handshake done.
[2023-08-03 14:03:14.097][Trace][33196][855ey26v] RTC: session pub=1, sub=0, to=30000ms connection established
[2023-08-03 14:03:14.097][Trace][33196][855ey26v] RTC: Publisher url=/__defaultApp__/ established
  1. SRS Config:
listen              1935;
max_connections     1000;
srs_log_tank        file;
srs_log_file        ./objs/srs.log;
daemon              on;
http_api {
    enabled         on;
    listen          1985;
}
http_server {
    enabled         on;
    listen          8090;
    dir             ./objs/nginx/html;
}
rtc_server {
    enabled on;
    listen 8000; # UDP port
    # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#config-candidate
    candidate 10.29.182.44;
}
vhost __defaultVhost__ {
    hls {
        enabled         on;
    }
    http_remux {
        enabled     on;
        mount       [vhost]/[app]/[stream].flv;
    }
    rtc {
        enabled     on;
        # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtmp-to-rtc
        rtmp_to_rtc on;
        # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtc-to-rtmp
        rtc_to_rtmp on;
    }
}

Replay

Please describe how to replay the bug?

Step 1: Use FFMpeg to push rtmp stream and webRTC stream to SRS separately. When pushing webRTC stream, use FFMpeg's metaRTC plugin.

Step 2: Access port 8080 and modify the webRTC address for playback.

Expect

The expected latency for video playback using webRTC streaming is lower than that of video playback using RTMP streaming, because when streaming with RTMP, the transcoding process in SRS takes approximately 150ms. However, in reality, the latency for webRTC streaming is mostly consistent with that of RTMP streaming, and sometimes even higher.

TRANS_BY_GPT3

xiaozhihong commented 10 months ago

The delay is almost irrelevant to the streaming method, it is more related to the player, and the protocol of the downstream playback.

TRANS_BY_GPT4