AlexxIT / go2rtc

Ultimate camera streaming application with support RTSP, RTMP, HTTP-FLV, WebRTC, MSE, HLS, MP4, MJPEG, HomeKit, FFmpeg, etc.
https://github.com/AlexxIT/Blog
MIT License
4.21k stars 344 forks source link

Unable to play incoming RTMP stream from DJI drone live stream feature #751

Open bdr99 opened 9 months ago

bdr99 commented 9 months ago

I have a DJI Mavic Air 2 drone. The drone's Android app supports live streaming the camera view to an RTMP server. When I try live streaming to go2rtc, I get this error when I try to play the stream in my browser:

14:18:21.388 ERR github.com/AlexxIT/go2rtc/internal/mjpeg/init.go:166 > error="streams: unknown error"

Here is the RTMP URL I'm using in the app: rtmp://192.168.1.177:1935/drone

Here is my config:

streams:
  drone:

rtmp:
  listen: ":1935"

webrtc:
  candidates:
    - stun:8555

Here is the response from the info endpoint when the stream is running:

{
  "producers": [
    {
      "type": "FLV producer",
      "recv": 760641
    }
  ],
  "consumers": null
}

And here are the full trace logs when I try to play the stream:

14:17:15.577 TRC [api] GET /stream.html?src=drone 127.0.0.1:57314
14:17:15.583 TRC [api] GET /video-stream.js 127.0.0.1:57314
14:17:15.589 TRC [api] GET /video-rtc.js 127.0.0.1:57314
14:17:15.602 TRC [api] GET /api/ws?src=drone 127.0.0.1:40590
14:17:15.616 TRC [api.ws] msg type=mse
14:17:15.616 TRC [mp4] new WS/MSE consumer codecs=avc1.640029,avc1.64002A,avc1.640033,hvc1.1.6.L153.B0,mp4a.40.2,mp4a.40.5,flac,opus
14:17:15.616 TRC [streams] check cons=0 media=video, sendonly, H264, H265
14:17:15.616 TRC [streams] check cons=0 media=audio, sendonly, MPEG4-GENERIC, PCMA, PCMU, L16, PCML, OPUS
14:17:15.616 DBG [streams] can't stop external producer
14:17:15.616 DBG [mp4] add consumer error="streams: unknown error"
14:17:15.616 TRC [api.ws] msg type=webrtc/offer
14:17:15.616 DBG [webrtc] new consumer src=drone
14:17:15.616 TRC [webrtc] offer:
v=0
o=- 5276376831686494338 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1
a=extmap-allow-mixed
a=msid-semantic: WMS
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 35 36 37 38 102 103 104 105 106 107 108 109 127 125 39 40 41 42 43 44 45 46 47 48 112 113 114 115 116 117 118 49
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:tCjX
a=ice-pwd:rkMiVbpJSb5084ciIFkMJvgT
a=ice-options:trickle
a=fingerprint:sha-256 E3:F2:D4:9C:9F:F3:EC:AE:58:41:66:71:F5:C9:19:14:B8:C6:2A:3A:44:62:3D:9E:1A:4F:48:4A:B4:74:0B:40
a=setup:actpass
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:toffset
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 urn:3gpp:video-orientation
a=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type
a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing
a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space
a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=recvonly
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
a=rtpmap:98 VP9/90000
a=rtcp-fb:98 goog-remb
a=rtcp-fb:98 transport-cc
a=rtcp-fb:98 ccm fir
a=rtcp-fb:98 nack
a=rtcp-fb:98 nack pli
a=fmtp:98 profile-id=0
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=98
a=rtpmap:100 VP9/90000
a=rtcp-fb:100 goog-remb
a=rtcp-fb:100 transport-cc
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=fmtp:100 profile-id=2
a=rtpmap:101 rtx/90000
a=fmtp:101 apt=100
a=rtpmap:35 VP9/90000
a=rtcp-fb:35 goog-remb
a=rtcp-fb:35 transport-cc
a=rtcp-fb:35 ccm fir
a=rtcp-fb:35 nack
a=rtcp-fb:35 nack pli
a=fmtp:35 profile-id=1
a=rtpmap:36 rtx/90000
a=fmtp:36 apt=35
a=rtpmap:37 VP9/90000
a=rtcp-fb:37 goog-remb
a=rtcp-fb:37 transport-cc
a=rtcp-fb:37 ccm fir
a=rtcp-fb:37 nack
a=rtcp-fb:37 nack pli
a=fmtp:37 profile-id=3
a=rtpmap:38 rtx/90000
a=fmtp:38 apt=37
a=rtpmap:102 H264/90000
a=rtcp-fb:102 goog-remb
a=rtcp-fb:102 transport-cc
a=rtcp-fb:102 ccm fir
a=rtcp-fb:102 nack
a=rtcp-fb:102 nack pli
a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f
a=rtpmap:103 rtx/90000
a=fmtp:103 apt=102
a=rtpmap:104 H264/90000
a=rtcp-fb:104 goog-remb
a=rtcp-fb:104 transport-cc
a=rtcp-fb:104 ccm fir
a=rtcp-fb:104 nack
a=rtcp-fb:104 nack pli
a=fmtp:104 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f
a=rtpmap:105 rtx/90000
a=fmtp:105 apt=104
a=rtpmap:106 H264/90000
a=rtcp-fb:106 goog-remb
a=rtcp-fb:106 transport-cc
a=rtcp-fb:106 ccm fir
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=rtpmap:107 rtx/90000
a=fmtp:107 apt=106
a=rtpmap:108 H264/90000
a=rtcp-fb:108 goog-remb
a=rtcp-fb:108 transport-cc
a=rtcp-fb:108 ccm fir
a=rtcp-fb:108 nack
a=rtcp-fb:108 nack pli
a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f
a=rtpmap:109 rtx/90000
a=fmtp:109 apt=108
a=rtpmap:127 H264/90000
a=rtcp-fb:127 goog-remb
a=rtcp-fb:127 transport-cc
a=rtcp-fb:127 ccm fir
a=rtcp-fb:127 nack
a=rtcp-fb:127 nack pli
a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d001f
a=rtpmap:125 rtx/90000
a=fmtp:125 apt=127
a=rtpmap:39 H264/90000
a=rtcp-fb:39 goog-remb
a=rtcp-fb:39 transport-cc
a=rtcp-fb:39 ccm fir
a=rtcp-fb:39 nack
a=rtcp-fb:39 nack pli
a=fmtp:39 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=4d001f
a=rtpmap:40 rtx/90000
a=fmtp:40 apt=39
a=rtpmap:41 H264/90000
a=rtcp-fb:41 goog-remb
a=rtcp-fb:41 transport-cc
a=rtcp-fb:41 ccm fir
a=rtcp-fb:41 nack
a=rtcp-fb:41 nack pli
a=fmtp:41 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=f4001f
a=rtpmap:42 rtx/90000
a=fmtp:42 apt=41
a=rtpmap:43 H264/90000
a=rtcp-fb:43 goog-remb
a=rtcp-fb:43 transport-cc
a=rtcp-fb:43 ccm fir
a=rtcp-fb:43 nack
a=rtcp-fb:43 nack pli
a=fmtp:43 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=f4001f
a=rtpmap:44 rtx/90000
a=fmtp:44 apt=43
a=rtpmap:45 AV1/90000
a=rtcp-fb:45 goog-remb
a=rtcp-fb:45 transport-cc
a=rtcp-fb:45 ccm fir
a=rtcp-fb:45 nack
a=rtcp-fb:45 nack pli
a=rtpmap:46 rtx/90000
a=fmtp:46 apt=45
a=rtpmap:47 AV1/90000
a=rtcp-fb:47 goog-remb
a=rtcp-fb:47 transport-cc
a=rtcp-fb:47 ccm fir
a=rtcp-fb:47 nack
a=rtcp-fb:47 nack pli
a=fmtp:47 profile=1
a=rtpmap:48 rtx/90000
a=fmtp:48 apt=47
a=rtpmap:112 H264/90000
a=rtcp-fb:112 goog-remb
a=rtcp-fb:112 transport-cc
a=rtcp-fb:112 ccm fir
a=rtcp-fb:112 nack
a=rtcp-fb:112 nack pli
a=fmtp:112 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=64001f
a=rtpmap:113 rtx/90000
a=fmtp:113 apt=112
a=rtpmap:114 H264/90000
a=rtcp-fb:114 goog-remb
a=rtcp-fb:114 transport-cc
a=rtcp-fb:114 ccm fir
a=rtcp-fb:114 nack
a=rtcp-fb:114 nack pli
a=fmtp:114 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=64001f
a=rtpmap:115 rtx/90000
a=fmtp:115 apt=114
a=rtpmap:116 red/90000
a=rtpmap:117 rtx/90000
a=fmtp:117 apt=116
a=rtpmap:118 ulpfec/90000
a=rtpmap:49 flexfec-03/90000
a=rtcp-fb:49 goog-remb
a=rtcp-fb:49 transport-cc
a=fmtp:49 repair-window=10000000
m=audio 9 UDP/TLS/RTP/SAVPF 111 63 9 0 8 13 110 126
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:tCjX
a=ice-pwd:rkMiVbpJSb5084ciIFkMJvgT
a=ice-options:trickle
a=fingerprint:sha-256 E3:F2:D4:9C:9F:F3:EC:AE:58:41:66:71:F5:C9:19:14:B8:C6:2A:3A:44:62:3D:9E:1A:4F:48:4A:B4:74:0B:40
a=setup:actpass
a=mid:1
a=extmap:14 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid
a=recvonly
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:63 red/48000/2
a=fmtp:63 111/111
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:13 CN/8000
a=rtpmap:110 telephone-event/48000
a=rtpmap:126 telephone-event/8000

14:17:15.617 TRC [streams] check cons=0 media=video, sendonly, VP8, RTX, VP9, H264, AV1, RED, ULPFEC, FLEXFEC-03
14:17:15.617 TRC [streams] check cons=0 media=audio, sendonly, OPUS/48000/2, RED/48000/2, G722/8000, PCMU/8000, PCMA/8000, CN/8000, TELEPHONE-EVENT/48000, TELEPHONE-EVENT/8000, L16, PCML
14:17:15.617 DBG [streams] can't stop external producer
14:17:15.617 DBG [webrtc] add consumer error="streams: unknown error"
14:17:15.617 DBG [streams] can't stop external producer
14:17:15.618 TRC [api.ws] msg type=mjpeg
14:17:15.619 TRC [streams] check cons=0 media=video, sendonly, JPEG
14:17:15.619 DBG [streams] can't stop external producer
14:17:15.619 ERR github.com/AlexxIT/go2rtc/internal/mjpeg/init.go:166 > error="streams: unknown error"

Please let me know if there is any other info I can provide to help troubleshoot this.

AlexxIT commented 9 months ago

Unfortunately I can't see any useful in your logs. I'll try to get RTMP from my GoPro camera. Maybe can find the problem

bdr99 commented 9 months ago

Thanks @AlexxIT for the reply. It seems like it's possible to start the RTMP stream in the DJI Fly app even without a drone connected. Maybe this can help you replicate the issue.

bdr99 commented 9 months ago

Hi @AlexxIT, is there anything I can do to assist with diagnosing this issue? I'd be happy to direct my stream at a go2rtc instance controlled by you, if it would help. Just let me know. I'm also on Discord as bdr99 if you'd like to contact me there to make it easier to collaborate.

masterfork commented 6 months ago

Was trying to do something similar using the DJI Pocket 3 but running into the same issue! Any suggestions? It does look like data is being received as the recv numbers go up if I refresh... I could be misinterpreting though

bdr99 commented 6 months ago

Unfortunately I was not able to make any progress on this issue. I'm still happy to help @AlexxIT with any diagnostics or troubleshooting steps.

AlexxIT commented 6 months ago

I think you can't help me remotely. I need to check stream in the debugger. And needs to hope that the GoPro will have the same problem. Anyway, I haven't had time to check this

dr3amr commented 3 weeks ago

Hi all, any advancements to this specific subject ? Trying to use the RTMP stream to send data from my Xiaomi Yi 4K camera, using the rtmp://:1935/ and although the service starts properly listening on the 1935 port, camera cannot connect to the rtmp server ... getting same error as in the description. Created in configuration without source same as @bdr99 . What should I do next ?