Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Known limitations & Useful commands #46

Closed
Wkkkkk opened this issue Aug 18, 2023 · 4 comments
Closed

Known limitations & Useful commands #46

Wkkkkk opened this issue Aug 18, 2023 · 4 comments
Assignees
Labels
documentation Improvements or additions to documentation

Comments

@Wkkkkk
Copy link
Contributor

Wkkkkk commented Aug 18, 2023

Welcome to this page. We hope this guide enhances your understanding of our streaming program and assists you in resolving any potential issues you might encounter.

@Wkkkkk Wkkkkk added the documentation Improvements or additions to documentation label Aug 18, 2023
@Wkkkkk Wkkkkk self-assigned this Aug 18, 2023
@Wkkkkk
Copy link
Contributor Author

Wkkkkk commented Aug 21, 2023

Known Issues and Solutions

While using the program, you might encounter some issues. We have documented these problems and their corresponding solutions below:

  1. Ubuntu - Chrome WebRTC Negotiation Issue:
  • Problem: On Ubuntu, playing content using Chrome might lead to a WebRTC negotiation failure, displaying the message "Error resolving 'xxx.local': Name or service not known." This occurs because Chrome mandates the use of anonymized addresses (mDNS hostnames) instead of local IP addresses for WebRTC servers. This measure prevents IP leakage to internet-facing web browsers.

  • Solution: To address mDNS-related issues, consider disabling mDNS in Chrome. To do this, follow these steps:

    1. Open your Chrome browser.
    2. In the address bar, enter chrome://flags and hit Enter.
    3. Search for the setting "mDNS."
    4. Confirm that the setting is marked as "Disabled."
    5. Relaunch Chrome.
  1. MacOS - Safari WebRTC Negotiation Issue:
  • Problem: When utilizing Safari on MacOS, you might encounter a WebRTC negotiation failure with the message "Failed to set remote video description send parameters for m-section with mid='video0'." This issue pertains to video codecs and profiles supported by Safari, which has a limited range of codecs it can handle.
  • Solution: For further insights into this issue, refer to this documentation that provides detailed information about video codecs and profiles supported by browsers.
  1. Running in Docker on MacOS:
  • Problem: Running the program from a Docker container needs the host-network mode, which is unsupported on Mac systems.
  • Solution: For quick testing, we recommend running the program on an Ubuntu system. Mac users can follow our provided build instructions and employ Chrome for playback. Ubuntu users have the flexibility to build from source or use Docker for testing.
  1. Pending WHIP Offer Generation:
  • Issue: At times, the generation of WHIP offers may fail to occur as expected. Viewers would see an error "Pipeline connection failed: No SDP offer from WHIP sink". We are actively working to resolve this issue.
  1. Resource Deallocation on Viewer Reload:
  • Problem: Our WebRTC player assumes that viewers will stop playing streams by clicking the stop button before leaving. The allocated resources are released via a DELETE request upon stream completion. However, if a viewer accidentally or intentionally reloads the page without stopping the stream, resources might not be deallocated until the SRT client disconnects (The entire pipeline re-runs upon receiving an end-of-stream (EOS) message).
  • Solution: Ensure that viewers follow the intended workflow of stopping the stream using the provided controls before reloading or leaving the page.
  1. Chrome WebRTC Connection Retry:
  • Problem: Chrome will automatically retry a broken WebRTC connection, which could lead to complications when the SRT client (caller) disconnects and then reconnects.
  • Solution: To mitigate potential issues, it's recommended to reload the page when the SRT input stream is changed.

@Wkkkkk
Copy link
Contributor Author

Wkkkkk commented Aug 21, 2023

Useful Commands

  1. To generate a testing SRT stream on port 1234 with:
  • FFMpeg
ffmpeg -f lavfi -re -i testsrc=size=1280x720:rate=30 -f lavfi -re \
       -i sine=frequency=1000:sample_rate=44100 -pix_fmt yuv420p \
       -c:v libx264 -b:v 1000k -g 30 -keyint_min 120 -profile:v baseline -preset veryfast \
       -c:a aac -f mpegts "srt://127.0.0.1:1234?mode=caller&pkt_size=1316"
  • GStreamer
gst-launch-1.0 -v \
    videotestsrc ! clockoverlay ! video/x-raw, height=360, width=640 ! videoconvert ! x264enc tune=zerolatency ! video/x-h264, profile=constrained-baseline ! mux. \
    audiotestsrc ! audio/x-raw, format=S16LE, channels=2, rate=44100 ! audioconvert ! voaacenc ! aacparse ! mux. \
    mpegtsmux name=mux ! queue ! srtsink uri="srt://127.0.0.1:1234?mode=caller" wait-for-connection=false
  • Our docker image (running in listener mode)
docker run --rm -p 1234:1234/udp eyevinntechnology/testsrc
  • Note that when SRT stream is in caller mode, the player (listener) needs to run first.
  1. To play out an SRT stream on port 1234
  • FFPlay
ffplay "srt://127.0.0.1:1234?mode=listener"  
  • GStreamer
gst-launch-1.0 playbin uri="srt://127.0.0.1:1234?mode=listener"
  • VLC
  1. File -> Open Network
  2. Type in URL: srt://127.0.0.1:1234?mode=listener
  • To run as caller, change mode from listener to caller

@Wkkkkk Wkkkkk changed the title Known limitations Suggestions & Known limitations Aug 21, 2023
@birme
Copy link
Contributor

birme commented Aug 21, 2023

Should all this info perhaps end up in a markdown or the readme.md in the project rather than a GitHub issue?

@Wkkkkk Wkkkkk pinned this issue Aug 21, 2023
@Wkkkkk Wkkkkk changed the title Suggestions & Known limitations Known limitations & Useful commands Aug 21, 2023
@Wkkkkk
Copy link
Contributor Author

Wkkkkk commented Aug 23, 2023

Supported Codecs Across Platforms/Broswers

Platform Broswer Codecs (profile-level-id) Supported
Ubuntu Chrome AVC Constrained Baseline Level 3.1 (42e01f) X
Ubuntu Chrome AVC Baseline Level 3.1 (42001f) X
Ubuntu Chrome AVC Main Level 3.1 (4d001f) X
Ubuntu Chrome AVC High Level 3.1 (64001f)
Ubuntu Chrome AVC High 4:4:4 Predictive Level 3.1 (f4001f) X
Ubuntu Chrome AVC Constrained High Level 3.1 (640c1f)
MacOS Chrome AVC Constrained Baseline Level 3.1 (42e01f) X
MacOS Chrome AVC Baseline Level 3.1 (42001f) X
MacOS Chrome AVC Main Level 3.1 (4d001f) X
MacOS Chrome AVC High Level 3.1 (64001f) X
MacOS Chrome AVC High 4:4:4 Predictive Level 3.1 (f4001f) X
MacOS Chrome AVC Constrained High Level 3.1 (640c1f)
MacOS Safari AVC Constrained Baseline Level 3.1 (42e01f) X
MacOS Safari AVC Baseline Level 3.1 (42001f)
MacOS Safari AVC Main Level 3.1 (4d001f)
MacOS Safari AVC High Level 3.1 (64001f)
MacOS Safari AVC High 4:4:4 Predictive Level 3.1 (f4001f)
MacOS Safari AVC Constrained High Level 3.1 (640c1f) X

@Wkkkkk Wkkkkk closed this as completed Aug 23, 2023
@Wkkkkk Wkkkkk unpinned this issue Aug 23, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation
Projects
None yet
Development

No branches or pull requests

2 participants