Skip to content
Snippets Groups Projects
  • Jim's avatar
    02a07ea0
    Add preliminary streaming code for testing · 02a07ea0
    Jim authored
     - Add some temporary streaming code using FFmpeg.  FFmpeg itself is not
       very ideal for streaming; lack of direct control of the sockets and
       no framedrop handling means that FFmpeg is definitely not something
       you want to use without wrapper code.  I'd prefer writing my own
       network framework in this particular case just because you give away
       so much control of the network interface.  Wasted an entire day
       trying to go through FFmpeg issues.
    
       There's just no way FFmpeg should be used for real streaming (at
       least without being patched or submitting some sort of patch, but I'm
       sort of feeling "meh" on that idea)
    
       I had to end up writing multiple threads just to handle both
       connecting and writing, because av_interleaved_write_frame blocks
       every call, stalling the main encoder thread, and thus also stalling
       draw signals.
    
     - Add some temporary user interface for streaming settings.  This is
       just temporary for the time being.  It's in the outputs section of
       the basic-mode settings
    
     - Make it so that dynamic arrays do not free all their data when the
       size just happens to be reduced to 0.  This prevents constant
       reallocation when an array keeps going from 1 item to 0 items.  Also,
       it was bad to become dependent upon that functionality.  You must now
       always explicitly call "free" on it to ensure the data is free, and
       that's how it should be.  Implicit functionality can lead to
       confusion and maintainability issues.
    02a07ea0
    History
    Add preliminary streaming code for testing
    Jim authored
     - Add some temporary streaming code using FFmpeg.  FFmpeg itself is not
       very ideal for streaming; lack of direct control of the sockets and
       no framedrop handling means that FFmpeg is definitely not something
       you want to use without wrapper code.  I'd prefer writing my own
       network framework in this particular case just because you give away
       so much control of the network interface.  Wasted an entire day
       trying to go through FFmpeg issues.
    
       There's just no way FFmpeg should be used for real streaming (at
       least without being patched or submitting some sort of patch, but I'm
       sort of feeling "meh" on that idea)
    
       I had to end up writing multiple threads just to handle both
       connecting and writing, because av_interleaved_write_frame blocks
       every call, stalling the main encoder thread, and thus also stalling
       draw signals.
    
     - Add some temporary user interface for streaming settings.  This is
       just temporary for the time being.  It's in the outputs section of
       the basic-mode settings
    
     - Make it so that dynamic arrays do not free all their data when the
       size just happens to be reduced to 0.  This prevents constant
       reallocation when an array keeps going from 1 item to 0 items.  Also,
       it was bad to become dependent upon that functionality.  You must now
       always explicitly call "free" on it to ensure the data is free, and
       that's how it should be.  Implicit functionality can lead to
       confusion and maintainability issues.
obs.c 20.97 KiB