[FFmpeg-devel] TCP timeout for HTTP/HTTPS connections.

Tom Gaudasiński tomg at records.headdesk.com.au
Mon Nov 18 12:54:52 EET 2019


I understand your m3u8 patch, and have already enabled the relevant option.

      av_dict_set(&options, "m3u8_hold_counters", "0", 0);

I think it has indeed helped to get rid of one place where I block, but
there appear to be several., The stack that it's being blocked on now is
DNS-related. I would have assumed that the AVIOInterruptCB would have
worked for that too, but it hasn't.

Perhaps timeouts are the wrong approach? I really just need a way to
make ffmpeg's functions to immediately return so I can exit. Currently
my termination halts waiting for ffmpeg to return so I can join the thread.


On 18/11/19 9:21 pm, Steven Liu wrote:
>
>> 在 2019年11月18日,18:16,Steven Liu <lq at chinaffmpeg.org> 写道:
>>
>>
>>
>>> 在 2019年11月18日,17:58,Tom Gaudasiński <tomg at records.headdesk.com.au> 写道:
>>>
>> hls can hold to option after the patch:
>>
>> rw_timeout 
>>  -rw_timeout        <int64>      ED........ Timeout for IO operations (in microseconds) (from 0 to I64_MAX) (default 0)
>> This can be used when you downloading segment or m3u8 file, the http response too long time.
>>
> liuqideMBP:dash liuqi$ ./ffmpeg -http_multiple 0 -http_persistent 0 -y -rw_timeout 500000 -i "http://abcradiolivehls-lh.akamaihd.net/i/abcjazz_1@327288/index_32_a-p.m3u8?sd=10&rebase=on" -c copy a.ts
> ffmpeg version N-95731-ge94edd85c6 Copyright (c) 2000-2019 the FFmpeg developers
>   built with Apple LLVM version 10.0.0 (clang-1000.11.45.5)
>   configuration: --enable-fontconfig --enable-gpl --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libspeex --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-version3 --enable-nonfree --enable-videotoolbox --enable-libxml2 --samples=fate-suite/ --enable-libopencv
>   libavutil      56. 35.101 / 56. 35.101
>   libavcodec     58. 62.100 / 58. 62.100
>   libavformat    58. 35.100 / 58. 35.100
>   libavdevice    58.  9.100 / 58.  9.100
>   libavfilter     7. 66.100 /  7. 66.100
>   libswscale      5.  6.100 /  5.  6.100
>   libswresample   3.  6.100 /  3.  6.100
>   libpostproc    55.  6.100 / 55.  6.100
> [hls @ 0x7fd4fe801800] Skip ('#EXT-X-ALLOW-CACHE:YES')
> [hls @ 0x7fd4fe801800] Skip ('#EXT-X-VERSION:3')
> [hls @ 0x7fd4fe801800] Opening 'http://abcradiolivehls-lh.akamaihd.net/i/abcjazz_1@327288/segment157407238_32_a-p.ts?sd=10&rebase=on' for reading
> Input #0, hls, from 'http://abcradiolivehls-lh.akamaihd.net/i/abcjazz_1@327288/index_32_a-p.m3u8?sd=10&rebase=on':
>   Duration: N/A, start: 14578.026844, bitrate: N/A
>   Program 0
>     Metadata:
>       variant_bitrate : 0
>     Stream #0:0: Audio: aac (HE-AAC) ([15][0][0][0] / 0x000F), 32000 Hz, stereo, fltp
>     Metadata:
>       variant_bitrate : 0
>     Stream #0:1: Data: timed_id3 (ID3  / 0x20334449)
>     Metadata:
>       variant_bitrate : 0
> [mpegts @ 0x7fd4ff009c00] frame size not set
> Output #0, mpegts, to 'a.ts':
>   Metadata:
>     encoder         : Lavf58.35.100
>     Stream #0:0: Audio: aac (HE-AAC) ([15][0][0][0] / 0x000F), 32000 Hz, stereo, fltp
>     Metadata:
>       variant_bitrate : 0
> Stream mapping:
>   Stream #0:0 -> #0:0 (copy)
> Press [q] to stop, [?] for help
> [hls @ 0x7fd4fe801800] Opening 'http://abcradiolivehls-lh.akamaihd.net/i/abcjazz_1@327288/segment157407239_32_a-p.ts?sd=10&rebase=on' for reading
> [hls @ 0x7fd4fe801800] Opening 'http://abcradiolivehls-lh.akamaihd.net/i/abcjazz_1@327288/segment157407240_32_a-p.ts?sd=10&rebase=on' for reading
> [hls @ 0x7fd4fe801800] Failed to reload playlist 0ts/s speed=11.6x
> [hls @ 0x7fd4fe801800] Skip ('#EXT-X-ALLOW-CACHE:YES')
> [hls @ 0x7fd4fe801800] Skip ('#EXT-X-VERSION:3')
> [hls @ 0x7fd4fe801800] Opening 'http://abcradiolivehls-lh.akamaihd.net/i/abcjazz_1@327288/segment157407241_32_a-p.ts?sd=10&rebase=on' for reading
> http://abcradiolivehls-lh.akamaihd.net/i/abcjazz_1@327288/index_32_a-p.m3u8?sd=10&rebase=on: Operation timed out
> size=     164kB time=00:00:29.88 bitrate=  45.1kbits/s speed=2.63x
> video:0kB audio:117kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 40.635853%
> liuqideMBP:dash liuqi$
>
>
>
>>  -m3u8_hold_counters <int>        .D........ Maximum number of times requests when the m3u8 file not be refresh (from 0 to INT_MAX) (default 1000)
>> this can be used when you can success download m3u8 but the m3u8 always refresh without new segments.
>
> liuqideMBP:dash liuqi$ ./ffmpeg -m3u8_hold_counters 5 -i http://127.0.0.1/output.m3u8 -c copy a.m3u8
> ffmpeg version N-95731-ge94edd85c6 Copyright (c) 2000-2019 the FFmpeg developers
>   built with Apple LLVM version 10.0.0 (clang-1000.11.45.5)
>   configuration: --enable-fontconfig --enable-gpl --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libspeex --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-version3 --enable-nonfree --enable-videotoolbox --enable-libxml2 --samples=fate-suite/ --enable-libopencv
>   libavutil      56. 35.101 / 56. 35.101
>   libavcodec     58. 62.100 / 58. 62.100
>   libavformat    58. 35.100 / 58. 35.100
>   libavdevice    58.  9.100 / 58.  9.100
>   libavfilter     7. 66.100 /  7. 66.100
>   libswscale      5.  6.100 /  5.  6.100
>   libswresample   3.  6.100 /  3.  6.100
>   libpostproc    55.  6.100 / 55.  6.100
> [hls @ 0x7ff6ac001000] Skip ('#EXT-X-VERSION:3')
> [hls @ 0x7ff6ac001000] Opening 'http://127.0.0.1/output7.ts' for reading
> [hls @ 0x7ff6ac001000] Opening 'http://127.0.0.1/output8.ts' for reading
> [http @ 0x7ff6ac00e400] Opening 'http://127.0.0.1/output9.ts' for reading
> Input #0, hls, from 'http://127.0.0.1/output.m3u8':
>   Duration: N/A, start: 15.480000, bitrate: N/A
>   Program 0
>     Metadata:
>       variant_bitrate : 0
>     Stream #0:0: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p, 176x144 [SAR 1:1 DAR 11:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
>     Metadata:
>       variant_bitrate : 0
> Output #0, hls, to 'a.m3u8':
>   Metadata:
>     encoder         : Lavf58.35.100
>     Stream #0:0: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p, 176x144 [SAR 1:1 DAR 11:9], q=2-31, 25 fps, 25 tbr, 90k tbn, 25 tbc
>     Metadata:
>       variant_bitrate : 0
> Stream mapping:
>   Stream #0:0 -> #0:0 (copy)
> Press [q] to stop, [?] for help
> [hls @ 0x7ff6ac817a00] Opening 'a0.ts' for writing
> [hls @ 0x7ff6ac817a00] Opening 'a.m3u8.tmp' for writing
> [hls @ 0x7ff6ac817a00] Opening 'a1.ts' for writing
> [hls @ 0x7ff6ac817a00] Opening 'a.m3u8.tmp' for writing
> [hls @ 0x7ff6ac001000] Skip ('#EXT-X-VERSION:3')
> [http @ 0x7ff6ac82de00] Opening 'http://127.0.0.1/output.m3u8' for reading
> [hls @ 0x7ff6ac001000] Skip ('#EXT-X-VERSION:3')
> [http @ 0x7ff6ac82de00] Opening 'http://127.0.0.1/output.m3u8' for reading
> [hls @ 0x7ff6ac001000] Skip ('#EXT-X-VERSION:3')
> [http @ 0x7ff6ac82de00] Opening 'http://127.0.0.1/output.m3u8' for reading
> [hls @ 0x7ff6ac001000] Skip ('#EXT-X-VERSION:3')
> [http @ 0x7ff6ac82de00] Opening 'http://127.0.0.1/output.m3u8' for reading
> [hls @ 0x7ff6ac001000] Skip ('#EXT-X-VERSION:3')
> [hls @ 0x7ff6ac817a00] Opening 'a2.ts' for writing92 bitrate=N/A speed=0.959x
> [hls @ 0x7ff6ac817a00] Opening 'a.m3u8.tmp' for writing
> frame=  150 fps= 24 q=-1.0 Lsize=N/A time=00:00:05.92 bitrate=N/A speed=0.958x
> video:130kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
> liuqideMBP:dash liuqi$
>>
>>> So I have applied Steven's m3u8 patch, and have installed an
>>> AVIOInterruptCB, but I'm still getting blocked here:
>>>
>>>
>>>
>>> #0  0x00007ffff791d729 in __GI___poll (fds=fds at entry=0x7fffcf663118,
>>> nfds=nfds at entry=1, timeout=4999,
>>>    timeout at entry=<error reading variable: That operation is not
>>> available on integers of more than 8 bytes.>)
>>>    at ../sysdeps/unix/sysv/linux/poll.c:29
>>> #1  0x00007ffff47951ab in send_dg (ansp2_malloced=<optimised out>,
>>> resplen2=<optimised out>,
>>>    anssizp2=<optimised out>, ansp2=<optimised out>, anscp=<optimised
>>> out>, gotsomewhere=<synthetic pointer>,
>>>    v_circuit=<synthetic pointer>, ns=<optimised out>,
>>> terrno=0x7fffcf6630e8, anssizp=0x7fffcf663210,
>>>    ansp=0x7fffcf6630d8, buflen2=<optimised out>, buf2=<optimised out>,
>>> buflen=<optimised out>,
>>>    buf=<optimised out>, statp=<optimised out>) at res_send.c:1112
>>> #2  __res_context_send (ctx=ctx at entry=0x7fffc0050e00,
>>> buf=buf at entry=0x7fffcf663240 "̦\001",
>>>    buflen=buflen at entry=60, buf2=buf2 at entry=0x7fffcf66327c
>>> "\344\272\001", buflen2=buflen2 at entry=60,
>>>    ans=<optimised out>, ans at entry=0x7fffcf663e50 "̦\201\202",
>>> anssiz=<optimised out>, ansp=<optimised out>,
>>>    ansp2=<optimised out>, nansp2=<optimised out>, resplen2=<optimised
>>> out>, ansp2_malloced=<optimised out>)
>>>    at res_send.c:519
>>> #3  0x00007ffff47927a3 in __GI___res_context_query
>>> (ctx=ctx at entry=0x7fffc0050e00,
>>>    name=name at entry=0x7fffcf665070 "abcradiolivehls-lh.akamaihd.net",
>>> class=class at entry=1,
>>>    type=type at entry=439963904, answer=answer at entry=0x7fffcf663e50
>>> "̦\201\202", anslen=anslen at entry=2048,
>>>    answerp=0x7fffcf6646a0, answerp2=0x7fffcf6646a8,
>>> nanswerp2=0x7fffcf664690, resplen2=0x7fffcf664694,
>>>    answerp2_malloced=0x7fffcf664698) at res_query.c:216
>>> #4  0x00007ffff47933cc in __res_context_querydomain
>>> (answerp2_malloced=0x7fffcf664698, resplen2=0x7fffcf664694,
>>>    nanswerp2=0x7fffcf664690, answerp2=0x7fffcf6646a8,
>>> answerp=0x7fffcf6646a0, anslen=2048,
>>>    answer=0x7fffcf663e50 "̦\201\202", type=439963904, class=1, domain=0x0,
>>>    name=0x7fffcf665070 "abcradiolivehls-lh.akamaihd.net",
>>> ctx=0x7fffc0050e00) at res_query.c:601
>>> #5  __GI___res_context_search (ctx=ctx at entry=0x7fffc0050e00,
>>>    name=name at entry=0x7fffcf665070 "abcradiolivehls-lh.akamaihd.net",
>>> class=class at entry=1,
>>>    type=type at entry=439963904, answer=answer at entry=0x7fffcf663e50
>>> "̦\201\202", anslen=anslen at entry=2048,
>>>    answerp=<optimised out>, answerp2=<optimised out>,
>>> nanswerp2=<optimised out>, resplen2=<optimised out>,
>>>    answerp2_malloced=<optimised out>) at res_query.c:370
>>> #6  0x00007ffff007b07a in _nss_dns_gethostbyname4_r (
>>>    name=name at entry=0x7fffcf665070 "abcradiolivehls-lh.akamaihd.net",
>>> pat=pat at entry=0x7fffcf6647f8,
>>>    buffer=0x7fffcf664a80 "\377\002", buflen=1024,
>>> errnop=errnop at entry=0x7fffcf66e658,
>>>    herrnop=herrnop at entry=0x7fffcf66e6bc, ttlp=0x0) at
>>> nss_dns/dns-host.c:371
>>> #7  0x00007ffff79100b2 in gaih_inet (name=<optimised out>,
>>>    name at entry=0x7fffcf665070 "abcradiolivehls-lh.akamaihd.net",
>>> service=service at entry=0x7fffcf664a20,
>>>    req=req at entry=0x7fffcf664f30, pai=pai at entry=0x7fffcf664a08,
>>> naddrs=naddrs at entry=0x7fffcf664a04,
>>>    tmpbuf=tmpbuf at entry=0x7fffcf664a70) at
>>> ../sysdeps/posix/getaddrinfo.c:770
>>> #8  0x00007ffff79110a7 in __GI_getaddrinfo (name=<optimised out>,
>>> service=<optimised out>, hints=0x7fffcf664f30,
>>>    pai=0x7fffcf664f08) at ../sysdeps/posix/getaddrinfo.c:2265
>>> #9  0x00007ffff074b97f in tcp_open (h=0x7fffc05ba140,
>>>    uri=0x7fffc05ba1a0 "tcp://abcradiolivehls-lh.akamaihd.net:80",
>>> flags=3) at libavformat/tcp.c:151
>>> #10 0x00007ffff05a3a8e in ffurl_connect (uc=0x7fffc05ba140,
>>> options=0x7fffcf669458) at libavformat/avio.c:210
>>> #11 0x00007ffff05a4214 in ffurl_open_whitelist (puc=0x7fffc0be9088,
>>>    filename=0x7fffcf666db0 "tcp://abcradiolivehls-lh.akamaihd.net:80",
>>> flags=3, int_cb=0x7fffc05baeb0,
>>>    options=0x7fffcf669458, whitelist=0x7fffc05b32c0
>>> "http,https,tls,rtp,tcp,udp,crypto,httpproxy",
>>>    blacklist=0x0, parent=0x7fffc05bae80) at libavformat/avio.c:344
>>> #12 0x00007ffff0607397 in http_open_cnx_internal (h=0x7fffc05bae80,
>>> options=0x7fffcf669458)
>>>    at libavformat/http.c:236
>>> #13 0x00007ffff060749b in http_open_cnx (h=0x7fffc05bae80,
>>> options=0x7fffcf669458) at libavformat/http.c:263
>>> #14 0x00007ffff060842f in http_open (h=0x7fffc05bae80,
>>>    uri=0x7fffc05baee0
>>> "http://abcradiolivehls-lh.akamaihd.net/i/abcjazz_1@327288/index_32_a-p.m3u8?sd=10&rebase=on",
>>> flags=1, options=0x7fffcf669458) at libavformat/http.c:580
>>> #15 0x00007ffff05a3a64 in ffurl_connect (uc=0x7fffc05bae80,
>>> options=0x7fffcf669458) at libavformat/avio.c:206
>>> #16 0x00007ffff05a4214 in ffurl_open_whitelist (puc=0x7fffcf669360,
>>>    filename=0x7fffc0005700
>>> "http://abcradiolivehls-lh.akamaihd.net/i/abcjazz_1@327288/index_32_a-p.m3u8?sd=10&rebase=on",
>>> flags=1, int_cb=0x7fffc0001148, options=0x7fffcf669458,
>>>    whitelist=0x7fffc000d210
>>> "http,https,tls,rtp,tcp,udp,crypto,httpproxy", blacklist=0x0, parent=0x0)
>>>    at libavformat/avio.c:344
>>> #17 0x00007ffff05a87a3 in ffio_open_whitelist (s=0x7fffcf6693e0,
>>>    filename=0x7fffc0005700
>>> "http://abcradiolivehls-lh.akamaihd.net/i/abcjazz_1@327288/index_32_a-p.m3u8?sd=10&rebase=on",
>>> flags=1, int_cb=0x7fffc0001148, options=0x7fffcf669458,
>>>    whitelist=0x7fffc000d210
>>> "http,https,tls,rtp,tcp,udp,crypto,httpproxy", blacklist=0x0)
>>>    at libavformat/aviobuf.c:1200
>>> #18 0x00007ffff06db328 in io_open_default (s=0x7fffc0000c80,
>>> pb=0x7fffcf6693e0,
>>>    url=0x7fffc0005700
>>> "http://abcradiolivehls-lh.akamaihd.net/i/abcjazz_1@327288/index_32_a-p.m3u8?sd=10&rebase=on",
>>> flags=1, options=0x7fffcf669458) at libavformat/options.c:124
>>> #19 0x00007ffff05f602e in parse_playlist (c=0x7fffc0005200,
>>>    url=0x7fffc0005700
>>> "http://abcradiolivehls-lh.akamaihd.net/i/abcjazz_1@327288/index_32_a-p.m3u8?sd=10&rebase=on",
>>> pls=0x7fffc0005700, in=0x0) at libavformat/hls.c:740
>>> #20 0x00007ffff05f847d in read_data (opaque=0x7fffc0005700,
>>> buf=0x7fffc006e928 "", buf_size=32768)
>>>    at libavformat/hls.c:1417
>>> #21 0x00007ffff05a66d8 in read_packet_wrapper (s=0x7fffc0006700,
>>> buf=0x7fffc006e928 "", size=32768)
>>>    at libavformat/aviobuf.c:538
>>> #22 0x00007ffff05a697f in fill_buffer (s=0x7fffc0006700) at
>>> libavformat/aviobuf.c:587
>>> #23 0x00007ffff05a5f45 in avio_feof (s=0x7fffc0006700) at
>>> libavformat/aviobuf.c:367
>>> #24 0x00007ffff05fa878 in hls_read_packet (s=0x7fffc0000c80,
>>> pkt=0x7fffc0015a80) at libavformat/hls.c:2107
>>> #25 0x00007ffff075ac84 in ff_read_packet (s=0x7fffc0000c80,
>>> pkt=0x7fffc0015a80) at libavformat/utils.c:859
>>> #26 0x00007ffff075dc49 in read_frame_internal (s=0x7fffc0000c80,
>>> pkt=0x7fffc0015a80) at libavformat/utils.c:1586
>>> #27 0x00007ffff075ea61 in av_read_frame (s=0x7fffc0000c80,
>>> pkt=0x7fffc0015a80) at libavformat/utils.c:1788
>>>
>>>
>>>
>>> Is there a way for AVIOInterruptCB to also control the timeout of
>>> tcp_open()?
>>>
>>>
>>>
>>> On 18/11/19 8:44 pm, Tom Gaudasiński wrote:
>>>> Okay, I will try it. Thank you.
>>>>
>>>> On 18/11/19 8:43 pm, Steven Liu wrote:
>>>>>> 在 2019年11月18日,17:32,Tom Gaudasiński <tomg at records.headdesk.com.au> 写道:
>>>>>>
>>>>>> How do I append “#EXT-X-ENDLIST” to the end of the m3u8 using the API?
>>>>>> The URL I get ffmpeg to open is the m3u8 file, so I somehow need to do
>>>>>> it in memory, I presume?
>>>>>>
>>>>> Hello Tom,
>>>>>
>>>>> 	Can you try this patch please:
>>>>> 	https://patchwork.ffmpeg.org/patch/16316/
>>>>>> On 18/11/19 8:00 pm, Steven Liu wrote:
>>>>>>>> 在 2019年11月18日,16:44,Tom Gaudasiński <tomg at records.headdesk.com.au> 写道:
>>>>>>>>
>>>>>>>> That would probably work in the one case where it's looking at the next
>>>>>>>> entry in the list. It's actually blocking on a read, so I need some way
>>>>>>>> to interrupt it. I will try AVIOInterruptCB and see how I go.
>>>>>>> AVIOInterruptCB maybe ok if that is blocking. But is dose not useful if it always refresh m3u8.
>>>>>>>> On 18/11/19 7:36 pm, Steven Liu wrote:
>>>>>>>>>> 在 2019年11月18日,16:11,Tom Gaudasiński <tomg at records.headdesk.com.au> 写道:
>>>>>>>>>>
>>>>>>>>>> I essentially have a thread that I need to have exit immediately.  I
>>>>>>>>>> thought tweaking timeouts would be one way to get this done, but I'm
>>>>>>>>>> starting to think that's a bad approach.
>>>>>>>>>>
>>>>>>>>>> So, let me, maybe, rephrase the question: Is there a way I can tell
>>>>>>>>>> ffmpeg to terminate? Like, closing its sockets, or something like that?
>>>>>>>>>> This is all from another thread.
>>>>>>>>> Just append an “#EXT-X-ENDLIST” into the m3u8 list is ok.
>>>>>>>>>
>>>>>>>>>> On 18/11/19 7:06 pm, Steven Liu wrote:
>>>>>>>>>>>> 在 2019年11月18日,15:37,Tom Gaudasiński <tomg at records.headdesk.com.au> 写道:
>>>>>>>>>>>>
>>>>>>>>>>>> That seems to change the call-stack a bit, but it still gets stuck on
>>>>>>>>>>>> something in hls.c.
>>>>>>>>>>>>
>>>>>>>>>>>> I'm looking into what it is. I've also tried connect_timeout.
>>>>>>>>>>>>
>>>>>>>>>>>> I really just need to terminate the av_read_frame call, so that it
>>>>>>>>>>>> returns immediately when I need it to, but av_read_frame appears to
>>>>>>>>>>>> reconnect internally.
>>>>>>>>>>> Ah, maybe i get your point, do you mean you don’t like the hls always retry 
>>>>>>>>>>> get the m3u8 list when the last segment don’t update living mode?
>>>>>>>>>>>
>>>>>>>>>>>> On 18/11/19 6:02 pm, Steven Liu wrote:
>>>>>>>>>>>>>> 在 2019年11月18日,14:56,Tom Gaudasiński <tomg at records.headdesk.com.au> 写道:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I'm trying to set a read timeout for a http/https stream through the
>>>>>>>>>>>>>> API. Currently I'm passing...
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> av_dict_set(&options, "timeout", "100000", 0);
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> ... to avformat_open_input().
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> This appears to not work once the connection has been established. The
>>>>>>>>>>>>>> protocol call-stack appears to be
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> hls.c -> http.c -> avio.c -> tcp.c -> network.c
>>>>>>>>>>>>> What about use rw_timeout ?
>>>>>>>>>>>>>> The issue, I think, is that tcp.c only gets it's timeout from a
>>>>>>>>>>>>>> ?key=val&key=val  string at the end of the URL supplied to tcp.c, but
>>>>>>>>>>>>>> http.c or avio.c don't supply this. In fact, when I see what was passed
>>>>>>>>>>>>>> down, it's just "tcp://hostname.tld:80".
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Am I missing something? Is there a way to get ffmpeg to set tcp-timeout
>>>>>>>>>>>>>> from the very top-level API calls? I can't see it.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thank you.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> --Tom G.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>> ffmpeg-devel mailing list
>>>>>>>>>>>>>> ffmpeg-devel at ffmpeg.org
>>>>>>>>>>>>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> To unsubscribe, visit link above, or email
>>>>>>>>>>>>>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>>>>>>>>>>>>> Thanks
>>>>>>>>>>>>> Steven
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>> ffmpeg-devel mailing list
>>>>>>>>>>>>> ffmpeg-devel at ffmpeg.org
>>>>>>>>>>>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>>>>>>>>>>
>>>>>>>>>>>>> To unsubscribe, visit link above, or email
>>>>>>>>>>>>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>> ffmpeg-devel mailing list
>>>>>>>>>>>> ffmpeg-devel at ffmpeg.org
>>>>>>>>>>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>>>>>>>>>
>>>>>>>>>>>> To unsubscribe, visit link above, or email
>>>>>>>>>>>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>>>>>>>>>>> Thanks
>>>>>>>>>>> Steven
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> ffmpeg-devel mailing list
>>>>>>>>>>> ffmpeg-devel at ffmpeg.org
>>>>>>>>>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>>>>>>>>
>>>>>>>>>>> To unsubscribe, visit link above, or email
>>>>>>>>>>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>>>>>>>>>> _______________________________________________
>>>>>>>>>> ffmpeg-devel mailing list
>>>>>>>>>> ffmpeg-devel at ffmpeg.org
>>>>>>>>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>>>>>>>
>>>>>>>>>> To unsubscribe, visit link above, or email
>>>>>>>>>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>>>>>>>>> Thanks
>>>>>>>>> Steven
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> ffmpeg-devel mailing list
>>>>>>>>> ffmpeg-devel at ffmpeg.org
>>>>>>>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>>>>>>
>>>>>>>>> To unsubscribe, visit link above, or email
>>>>>>>>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>>>>>>>> _______________________________________________
>>>>>>>> ffmpeg-devel mailing list
>>>>>>>> ffmpeg-devel at ffmpeg.org
>>>>>>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>>>>>
>>>>>>>> To unsubscribe, visit link above, or email
>>>>>>>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>>>>>>> Thanks
>>>>>>> Steven
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> ffmpeg-devel mailing list
>>>>>>> ffmpeg-devel at ffmpeg.org
>>>>>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>>>>
>>>>>>> To unsubscribe, visit link above, or email
>>>>>>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>>>>>> _______________________________________________
>>>>>> ffmpeg-devel mailing list
>>>>>> ffmpeg-devel at ffmpeg.org
>>>>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>>>
>>>>>> To unsubscribe, visit link above, or email
>>>>>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>>>>> Thanks
>>>>> Steven
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> ffmpeg-devel mailing list
>>>>> ffmpeg-devel at ffmpeg.org
>>>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>>
>>>>> To unsubscribe, visit link above, or email
>>>>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>>>> _______________________________________________
>>>> ffmpeg-devel mailing list
>>>> ffmpeg-devel at ffmpeg.org
>>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>
>>>> To unsubscribe, visit link above, or email
>>>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>>>
>>> _______________________________________________
>>> ffmpeg-devel mailing list
>>> ffmpeg-devel at ffmpeg.org
>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>
>>> To unsubscribe, visit link above, or email
>>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>> Thanks
>> Steven
>>
>>
>>
>>
>>
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel at ffmpeg.org
>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>
>> To unsubscribe, visit link above, or email
>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
> Thanks
> Steven
>
>
>
>
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".





More information about the ffmpeg-devel mailing list