grantfayvor / hexcord-mediaserver

WebRTC to RTMP media server heavily inspired by https://github.com/pion/webrtc/tree/master/examples/rtp-forwarder
Apache License 2.0
58 stars 12 forks source link

FFMPEG Disconnect #5

Open remymatheus opened 3 years ago

remymatheus commented 3 years ago

Hello friend, good job, the server generates the following error once FFMPEG starts:

libpostproc    55.  5.100 / 55.  5.100
[sdp @ 0x5577fa3e0d00] Could not find codec parameters for stream 1 (Video: h264, none): unspecified size
Consider increasing the value for the 'analyzeduration' and 'probesize' options
Input #0, sdp, from 'rtp-forwarder.sdp':
  Metadata:
    title           : Pion WebRTC
  Duration: N/A, bitrate: N/A
    Stream #0:0: Audio: opus, 48000 Hz, stereo, fltp
    Stream #0:1: Video: h264, none, 90k tbr, 90k tbn, 180k tbc
Stream mapping:
  Stream #0:0 -> #0:0 (opus (native) -> aac (native))

Metadata:
    title           : Pion WebRTC
    encoder         : Lavf58.29.100
    Stream #0:0: Audio: aac (LC) ([10][0][0][0] / 0x000A), 48000 Hz, stereo, fltp, 128 kb/s
    Metadata:
      encoder         : Lavc58.54.100 aac
[flv @ 0x5577fa488700] Failed to update header with correct duration.
[flv @ 0x5577fa488700] Failed to update header with correct filesize.
size=       0kB time=00:00:00.00 bitrate=N/A speed=   0x
video:0kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
[aac @ 0x5577fa46ec40] Qavg: -nan
Connection State has changed failed
Connection State has changed closed

Thanks for your reply.

remymatheus commented 3 years ago

I think it may be a problem of my HTML client, could you help me with an example of HTML client, thank you very much for your help.

navigator.mediaDevices
    .getUserMedia({
        audio: true,
        video: true,
    })
    .then((cameraStream) => {
        const pc = new RTCPeerConnection({
            sdpSemantics: 'unified-plan',
        });

        cameraStream.getTracks().forEach(track => pc.addTrack(track, cameraStream));

        pc.createOffer()
            .then((offer) => pc.setLocalDescription(offer))
            .then(() =>
                fetch('http://xxx.xxx.xxx.xxx:8090/webrtc/offer', {
                    method: 'POST',
                    headers: { 'Content-Type': 'application/json' },
                    body: JSON.stringify({
                        "ingestionAddress":"xxxxx",
                        "streamKey": "xxxxxxxxx",
                        "offer": JSON.stringify(pc.localDescription)
                    })
                })
            )
            .then((res) => {
                if (!res.ok) throw new Error(`${res.status} ${res.statusText}`);
                return res.json();
            })
            .then((answer) => pc.setRemoteDescription(answer))
            .catch((err) => console.error(err));
grantfayvor commented 3 years ago

Hey @remymatheus, try creating a peer connection with the google stun server like

new RTCPeerConnection({ iceServers: [ { urls: 'stun:stun.l.google.com:19302' } ] });

Also, if both clients (Go and JavaScript) are on separate machines, you would want to either trickle ice or wait until ice gathering is complete before sending the remoteDescription

Momenul-TCS commented 3 years ago

Hello @remymatheus I am facing the same error in the server. Did you manage to solve that?