[HN Gopher] FFmpeg to WebRTC
       ___________________________________________________________________
        
       FFmpeg to WebRTC
        
       Author : ashellunts
       Score  : 195 points
       Date   : 2021-09-22 09:22 UTC (13 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | j1elo wrote:
       | To the author: if you really want to be permissive about what
       | others can do with your software, a MIT, BSD, or Apache 2 license
       | (which is more complete in that it even includes a patent grant)
       | seem to be more widely recognized and well tested than the
       | Unlicense. Unless you did choose that license for some solid
       | reasons, I'd suggest to consider switching to one of the other
       | better regarded licences.
       | 
       | * https://softwareengineering.stackexchange.com/questions/1471...
       | 
       | * https://news.ycombinator.com/item?id=3610208
        
       | shireboy wrote:
       | I was just looking for something to do this, but couldn't find
       | much. I need to serve up about 1000 cameras to both hls (for
       | public) and webrtc (for low latency/ptz admin use). Today we do
       | it with paid packages, but I was exploring just using ffmpeg +
       | nginx. Hls is easy enough, but since webrtc is not http, needs
       | its own piece. Anyone have ideas on this? I'm familiar with Wowza
       | and Ant. Any other open source utilities that do rtsp to both
       | hls/webrtc?
        
         | thebruce87m wrote:
         | Would you mind sharing the paid packages you use?
        
       | vanillax wrote:
       | As someone completely new to go, how do I run this? I have go
       | installed but I cant seem to get any of the sample commands to
       | work. I pulled the repo, cd'd into directory and ran the GO
       | sample command that was provided in the source, but the terminal
       | just hangs and blinks with no output.
        
       | j1elo wrote:
       | My all time question about FFmpeg is what are all those timestamp
       | correction flags and synchronization options for:
       | 
       | * -fflags +genpts, +igndts, +ignidx
       | 
       | * -vsync
       | 
       | * -copyts
       | 
       | * -use_wallclock_as_timestamps 1
       | 
       | * And more that you find even when you thought you had seen all
       | flags that might be related.
       | 
       | FFmpeg docs are a strange beast, they cover a lot of topics, but
       | are extremely shallow in most of them, so the overall quality
       | ends up being pretty poor. I mean it's like the kind of frowned
       | upon code comments such as "ignidx ignores the index; genpts
       | generates PTS". No surprises there... but no real explanation,
       | either.
       | 
       | What I'd love is for a real, technical explanation of what are
       | the consequences of each flag, and more importantly, the kind of
       | scenarios where they would make a desirable difference.
       | 
       | Especially for the case of recording live video that comes from
       | an unreliable connection (RTP through UDP) _and storing it as-is
       | (no transcoding whatsoever)_ : what is the best, or recommended
       | set of flags that FFmpeg authors would recommend? Given that
       | packets can get lost, or timestamps can get garbled, UDP packets
       | reordered in the network, or any combination of funny stuff.
       | 
       | For now I've sort of decided on using genpts+igndts and
       | use_wallclock_as_timestamps, but all comes from intuition and
       | simple tests, and not from actual evidence and guided by
       | technical documentation of each flag.
        
       | whoisjohnkid wrote:
       | Nice stuff; I did something similar with ffmpeg and pion.
       | 
       | It was for audio and it was webrtc to ffmpeg. I was streaming a
       | group chat directly to s3.
       | 
       | It mostly worked, but the only problem I ran into was syncing
       | issues if a user had a spotty connection. The solution seemed to
       | involve using rtmp to synchronize but I didn't have a chance to
       | go down that rabbit hole.
        
       | at0mic22 wrote:
       | Sending one frame per message is quite expensive, I'd do some
       | buffer aggregation instead
        
       | defied wrote:
       | Would using gstreamer instead of ffmpeg offer better or worse
       | performance? (Less CPU usage on the sender side?) If anyone has
       | experience with this setup, I'd love to know.
        
       | ChrisMarshallNY wrote:
       | I did something similar for Mac, a while back[0]. I never really
       | developed it much farther, because of the latency issues. Since
       | it was for surveillance cameras, that was a showstopper.
       | 
       | [0] https://github.com/RiftValleySoftware/RVS_MediaServer
        
         | metanonsense wrote:
         | I think we evaluated something like this (ffmpeg to rtc with
         | kurento) to broadcast the screen of mobile devices to a web
         | browser. If I remember correctly, with the correct ffmpeg
         | settings, latency became more than acceptable.
        
           | ChrisMarshallNY wrote:
           | I believe that. I'm sure that I could have greatly reduced
           | the latency, but tuning ffmpeg is not for the faint of heart,
           | and my heart wasn't really into it.
           | 
           | Anyway, HLS has latency, just by definition. The "H" stands
           | for "HTTP" (a synchronous protocol, based on TCP). RT[S]P
           | uses UDP or RDT, and is isochronous.
        
             | ec109685 wrote:
             | HLS has gotten better in this regard: https://developer.app
             | le.com/documentation/http_live_streamin...
             | 
             | This provides capability for much lower latency, including
             | effective push by blocking for playlist updates.
        
       | mg wrote:
       | Since there are probably some people experienced with ffmpeg
       | here, is it possible to to image zooms with ffmpg that go deeper
       | then zoom factor 10?
       | 
       | I can zoom up to factor 10 like this:
       | 
       | ffmpeg -i someimage.jpg -vf "zoompan=z='10-on/100':d=1000:x='iw/2
       | -(iw/zoom/2)':y='ih/2-(ih/zoom/2)':s=1920x1437" zoom.mp4
       | 
       | But everything above a zoom of 10 seems to fail. Is there a hard
       | limit in the code for some reason? Some way to overcome this?
       | 
       | Or is there another nice linux or online tool to do zooms into
       | images?
        
         | AbsoluteDestiny wrote:
         | You could just crop then scale which should give you a lot more
         | control.
        
       | _Gyan_ wrote:
       | For `-f h264`, `-bsf:v h264_mp4toannexb` is not needed. It will
       | be automatically inserted as needed, with ffmpeg 4.0 or later.
       | 
       | For latency, specify a short GOP size, e.g. `-g 50`
        
         | ashellunts wrote:
         | Thank you, will try.
        
       | milankragujevic wrote:
       | I personally use this project to proxy IP camera RTSP stream via
       | Web Sockets as fragmented MP4 -
       | https://github.com/deepch/RTSPtoWSMP4f
       | 
       | I'm not affiliated with the project, it's just really performant
       | and reliable.
        
       | ryanar wrote:
       | Note that there are a lot of tunings that you may need depending
       | on what your latency tolerance and picture quality tolerance is.
       | I would recommend following FFmpeg's streaming guide [0].
       | 
       | If you are trying to stream desktop, camera, and microphone to
       | the browser, I would recommend pion's mediadevices package [1].
       | 
       | [0] - https://trac.ffmpeg.org/wiki/StreamingGuide
       | 
       | [1] - https://github.com/pion/mediadevices
        
         | anotherjesse wrote:
         | Thanks!
         | 
         | I've been wanting to build a hackday project that takes images
         | captured from our satellites and builds a video stream. (we
         | gets hundreds of new shots from space every minute, for fun
         | create a screensaver-like streaming video feed of interesting
         | pictures)
         | 
         | perhaps I can build it with either ffmpeg or pion (using
         | pkg/driver/screen as a model to create a virtual canvas to draw
         | on)
        
       | yboris wrote:
       | [help request]
       | 
       | I created a commercial product _Video Hub App_ and have been
       | trying for a year to get streaming a video from a PC to an iPhone
       | working (through a PWA, not a dedicated iOS app) and have had 0
       | success. I could get the video stream to play on a separate
       | laptop through Chrome, but iOS Safari kicks my ass.
       | 
       | Does anyone have suggestions / ideas?
       | 
       | https://github.com/whyboris/Video-Hub-App
       | 
       | https://github.com/whyboris/Video-Hub-App-remote
        
         | at0mic22 wrote:
         | Easy thing: iOs on iPhone does not support MediaFileExtensions,
         | so you can't use <video> tag with dynamic source.
         | 
         | You can however go the way described in the post: instead of
         | requesting data though the data channel, you can initiate
         | video/audio channels and make your streaming work pretty much
         | like google hangouts, having your streamer as a participant.
         | 
         | It is not the recommended way though. But no other way for iOs
         | anyways.
        
         | j1elo wrote:
         | What's this? You have a server component in the PC, with access
         | to local videos, then you want to play those videos back
         | remotely on the iPhone?
        
       | est wrote:
       | Offtopic, are there any streaming gateway to automatically insert
       | CC subtitles into the video container on the fly?
        
       | throwawaybchr wrote:
       | What are some use-cases for this?
        
       | Sean-Der wrote:
       | Great work! This makes WebRTC much more accessible, it not being
       | available in ffmpeg makes people default to worse alternatives.
        
         | smokenadmirrors wrote:
         | hi, I dont intend to hijack this thread and I dont know if this
         | is considered [OT].
         | 
         | I came across your post[0] about KVS from a while ago. Thank
         | you for your work on pion and KVS.
         | 
         | A quick question on the KVS, C implementation. Is this in
         | anyway tied to be used with AWS Kinesis? Can it be used with
         | Wowza for instance?
         | 
         | [0] https://news.ycombinator.com/item?id=21951692
        
           | Sean-Der wrote:
           | Yes it could! It is vendor agnostic, just provides a WebRTC
           | API that can be used anywhere.
        
             | smokenadmirrors wrote:
             | Awesome! Thank you.
        
       | smokenadmirrors wrote:
       | This is what I got for
       | 
       | go run . -rtbufsize 100M -f dshow -i video="Integrated Webcam"
       | -pix_fmt yuv420p -c:v libx264 -bsf:v h264_mp4toannexb -b:v 2M
       | -max_delay 0 -bf 0 - < SDP
       | 
       | Connection State has changed failed
       | 
       | Peer Connection State has changed: failed
       | 
       | Peer Connection has gone to failed exiting
        
         | ashellunts wrote:
         | When pasting SDP back to browser, make sure text box is empty.
         | It has an annoying space there that can mess things up.
        
       | wiradikusuma wrote:
       | Since we're on this topic, I want to ask a question:
       | 
       | How do I play video files stored in my VPS to Chromecast?
       | 
       | I want my mom to watch a video, from her TV, but I can't upload
       | it to YouTube due to copyrighted content (yes, even if you set
       | unlisted, YouTube will block it).
        
         | [deleted]
        
         | notyourday wrote:
         | catt (Cast All The Things!) is your friend.
         | 
         | https://github.com/skorokithakis/catt
         | 
         | You might need a VPN as whatever is running catt must be able
         | to connect to your chromecast and chromecast must be able to
         | pull from whatever is running catt.
         | 
         | We watch all the movies this way - just cast an mp4 file. Works
         | great on a local network.
        
         | y4mi wrote:
         | Plex and jellyfin are options if its a video that they might
         | want to watch repeatedly at later times.
         | 
         | Both let you stream their videos to Chromecast last I checked.
         | 
         | Plex also has support for pictures which might be interesting
         | in some related cases
        
       | nerdbaggy wrote:
       | Hopefully WHIP takes off. It's a standard protocol that would
       | easily allow things to interface with WebRTC.
       | 
       | https://www.meetecho.com/blog/whip-janus/
       | 
       | https://millicast.medium.com/whip-the-magic-bullet-for-webrt...
        
       ___________________________________________________________________
       (page generated 2021-09-22 23:01 UTC)