Bläddra i källkod

obs-outputs: Add support for reading RTMP packets

Instead of ignoring RTMP packets, allow the ability to read incoming
RTMP packets
jp9000 4 år sedan
förälder
incheckning
6a72cd64e7
1 ändrade filer med 13 tillägg och 28 borttagningar
  1. 13 28
      plugins/obs-outputs/rtmp-stream.c

+ 13 - 28
plugins/obs-outputs/rtmp-stream.c

@@ -249,40 +249,25 @@ static inline bool get_next_packet(struct rtmp_stream *stream,
 	return new_packet;
 }
 
-static bool discard_recv_data(struct rtmp_stream *stream, size_t size)
+static bool process_recv_data(struct rtmp_stream *stream, size_t size)
 {
 	RTMP *rtmp = &stream->rtmp;
-	uint8_t buf[512];
-#ifdef _WIN32
-	int ret;
-#else
-	ssize_t ret;
-#endif
-
-	do {
-		size_t bytes = size > 512 ? 512 : size;
-		size -= bytes;
+	RTMPPacket packet = {0};
 
+	if (!RTMP_ReadPacket(rtmp, &packet)) {
 #ifdef _WIN32
-		ret = recv(rtmp->m_sb.sb_socket, buf, (int)bytes, 0);
+		int error = WSAGetLastError();
 #else
-		ret = recv(rtmp->m_sb.sb_socket, buf, bytes, 0);
+		int error = errno;
 #endif
+		do_log(LOG_ERROR, "RTMP_ReadPacket error: %d", error);
+		return false;
+	}
 
-		if (ret <= 0) {
-#ifdef _WIN32
-			int error = WSAGetLastError();
-#else
-			int error = errno;
-#endif
-			if (ret < 0) {
-				do_log(LOG_ERROR, "recv error: %d (%d bytes)",
-				       error, (int)size);
-			}
-			return false;
-		}
-	} while (size > 0);
-
+	if (packet.m_body) {
+		/* do processing here */
+		RTMPPacket_Free(&packet);
+	}
 	return true;
 }
 
@@ -418,7 +403,7 @@ static int send_packet(struct rtmp_stream *stream,
 #endif
 
 		if (ret >= 0 && recv_size > 0) {
-			if (!discard_recv_data(stream, (size_t)recv_size))
+			if (!process_recv_data(stream, (size_t)recv_size))
 				return -1;
 		}
 	}