diff --git a/src/media/audio/audio_rtp_session.cpp b/src/media/audio/audio_rtp_session.cpp
index 8ba818ac9dbfb288131bee19b10576260d4c81cd..dd5b8bcc76f3b3b6175d87897b7b195ebd128d05 100644
--- a/src/media/audio/audio_rtp_session.cpp
+++ b/src/media/audio/audio_rtp_session.cpp
@@ -17,6 +17,9 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA.
  */
+
+#include "libav_deps.h" // MUST BE INCLUDED FIRST
+
 #include "audio_rtp_session.h"
 
 #include "logger.h"
@@ -340,7 +343,12 @@ AudioReceiveThread::readFunction(void* opaque, uint8_t* buf, int buf_size)
 {
     std::istream& is = static_cast<AudioReceiveThread*>(opaque)->stream_;
     is.read(reinterpret_cast<char*>(buf), buf_size);
-    return is.gcount();
+
+    auto count = is.gcount();
+    if (count != 0)
+        return count;
+    else
+        return AVERROR_EOF;
 }
 
 // This callback is used by libav internally to break out of blocking calls
diff --git a/src/media/socket_pair.cpp b/src/media/socket_pair.cpp
index e710e47085d4e4a6aeb43196c3046b8b100fd738..08263164e79bb47d0dde2e355f5cae30acbf8cfc 100644
--- a/src/media/socket_pair.cpp
+++ b/src/media/socket_pair.cpp
@@ -429,7 +429,10 @@ SocketPair::readCallback(uint8_t* buf, int buf_size)
             RING_WARN("decrypt error %d", err);
     }
 
-    return len;
+    if (len != 0)
+        return len;
+    else
+        return AVERROR_EOF;
 }
 
 int
diff --git a/src/media/video/video_receive_thread.cpp b/src/media/video/video_receive_thread.cpp
index 7315589bbf4263d945caf5775ed6ec9464020b49..b6ce1cf908c1144c165371452d72b588bdeeb6e3 100644
--- a/src/media/video/video_receive_thread.cpp
+++ b/src/media/video/video_receive_thread.cpp
@@ -151,7 +151,12 @@ int VideoReceiveThread::readFunction(void *opaque, uint8_t *buf, int buf_size)
 {
     std::istream &is = static_cast<VideoReceiveThread*>(opaque)->stream_;
     is.read(reinterpret_cast<char*>(buf), buf_size);
-    return is.gcount();
+
+    auto count = is.gcount();
+    if (count != 0)
+        return count;
+    else
+        return AVERROR_EOF;
 }
 
 void VideoReceiveThread::addIOContext(SocketPair& socketPair)