|
|
@@ -629,20 +629,25 @@ static inline int open_output_file(struct ffmpeg_mux *ffm)
|
|
|
#define TCP_PROTO "tcp"
|
|
|
#define HTTP_PROTO "http"
|
|
|
|
|
|
+static bool ffmpeg_mux_is_network(struct ffmpeg_mux *ffm)
|
|
|
+{
|
|
|
+ return !strncmp(ffm->params.file, SRT_PROTO, sizeof(SRT_PROTO) - 1) ||
|
|
|
+ !strncmp(ffm->params.file, UDP_PROTO, sizeof(UDP_PROTO) - 1) ||
|
|
|
+ !strncmp(ffm->params.file, TCP_PROTO, sizeof(TCP_PROTO) - 1) ||
|
|
|
+ !strncmp(ffm->params.file, HTTP_PROTO, sizeof(HTTP_PROTO) - 1);
|
|
|
+}
|
|
|
+
|
|
|
static int ffmpeg_mux_init_context(struct ffmpeg_mux *ffm)
|
|
|
{
|
|
|
AVOutputFormat *output_format;
|
|
|
int ret;
|
|
|
- bool is_network = false;
|
|
|
bool is_http = false;
|
|
|
is_http = (strncmp(ffm->params.file, HTTP_PROTO,
|
|
|
sizeof(HTTP_PROTO) - 1) == 0);
|
|
|
|
|
|
- if (strncmp(ffm->params.file, SRT_PROTO, sizeof(SRT_PROTO) - 1) == 0 ||
|
|
|
- strncmp(ffm->params.file, UDP_PROTO, sizeof(UDP_PROTO) - 1) == 0 ||
|
|
|
- strncmp(ffm->params.file, TCP_PROTO, sizeof(TCP_PROTO) - 1) == 0 ||
|
|
|
- is_http) {
|
|
|
- is_network = true;
|
|
|
+ bool is_network = ffmpeg_mux_is_network(ffm);
|
|
|
+
|
|
|
+ if (is_network) {
|
|
|
avformat_network_init();
|
|
|
}
|
|
|
|
|
|
@@ -847,11 +852,15 @@ int main(int argc, char *argv[])
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+ bool is_network = ffmpeg_mux_is_network(&ffm);
|
|
|
+
|
|
|
while (!fail && safe_read(&info, sizeof(info)) == sizeof(info)) {
|
|
|
resize_buf_resize(&rb, info.size);
|
|
|
|
|
|
if (safe_read(rb.buf, info.size) == info.size) {
|
|
|
- ffmpeg_mux_packet(&ffm, rb.buf, &info);
|
|
|
+ bool packet_fail =
|
|
|
+ ffmpeg_mux_packet(&ffm, rb.buf, &info);
|
|
|
+ fail = is_network && packet_fail;
|
|
|
} else {
|
|
|
fail = true;
|
|
|
}
|