lu-zero / bmdtools

Basic capture and play programs for Blackmagic Design Decklink
Boost Software License 1.0
198 stars 74 forks source link

Continue after stream interruption #62

Open glennolsen opened 9 years ago

glennolsen commented 9 years ago

Using avconv to pull an RTMP stream off of the rtmp Nginx module and sent it to bmdplay for output on a Blackmagic SDI card. If the RTMP stream is interrupted at all avconv will display non monotnic DTS errors (makes sense) and eventually settles down and is happy again, but it appears that bmdplay stop receiving from the pipe and avconv starts to buffer. I am starting to look into code, but is bmdplay capable of handling stream interruptions gracefully? Is there an option flag I am missing?

avconv -r 30 -max_delay 1000 -probesize 500000 -analyzeduration 3000000 -fflags nobuffer -i rtmp://localhost:1935/AV2015Local/stream1 -f nut -strict experimental -c:v copy -c:a pcm_s16le - | /home/vidcontrol/Builds/'Blackmagic DeckLink SDK 10.4.1'/Linux/Samples/bmdtools-master/bmdplay -m 13 -C 0 -f pipe:0

Glenn

--- Want to back this issue? **[Post a bounty on it!](https://www.bountysource.com/issues/24156690-continue-after-stream-interruption?utm_campaign=plugin&utm_content=tracker%2F256764&utm_medium=issues&utm_source=github)** We accept bounties via [Bountysource](https://www.bountysource.com/?utm_campaign=plugin&utm_content=tracker%2F256764&utm_medium=issues&utm_source=github).
lu-zero commented 9 years ago

bmdplay is really simple and I'm adding complexity as the need arises, I never had this problem though if no data is fed normally bmdplay would just quit (so you can put it on a simple loop).

felixdreinulldrei commented 9 years ago

Hi Glennolsen, maybe you should consider to instruct avconv to exit if errors occur and restart (simple while/do loop). -xerror option should handle this if I'm not wrong

mfnahmed commented 7 years ago

Hi lu-zero, Is this behavior still the same. I also got this issue, do we have a solution for this behavior. Thanks.

lu-zero commented 7 years ago

If the stream is interrupted the chain of programs should be terminated and then restarted.

Exactly how are you causing this condition? Could you make a sample file to reproduce the issue in a predictable way?

I have plans to rewrite some of the bmdplay to rely less on avconv (and not die because piping 4K content makes memcpying the buffers too wasteful), but I'm currently a bit busy with my paying job :).

ggnull35 commented 7 years ago

Hi,

This is not an issue of bmdplay. I use "another" project than avconv and I use librtmp with that. I modified librtmp to resume after net interrupts in meanwhile making sender side buffer and push the delayed packets. Using bmdplay with a suitable buffer works like a arq protocol.

lu-zero commented 7 years ago

You can provide the patches to Libav as well : P

ggnull35 commented 7 years ago

I released on the "other" project, they didnt like the coding :) Maybe I send you, you can review it. (BTW, it is really dirty coding - as I am capable of :D -, but does the job.)

mfnahmed commented 7 years ago

Thanks for quick response. It's an HLS stream that I make source to avconv and pipe to the bmdplay. when there is a fluctuation in the network bandwidth or some other reason the input video gets stuck. Then suddenly the video output from the bmdplay freezes. Normally the source quickly get recovers and the start steaming but what I can see a frozen frame from the The memory usage of bmdplay increases and at some point. Following message appears. "Queue size **** problems ahead" In the meantime the RAM usage of bmdplay increases until it reaches near 100% and it get killed automatically. The glitch of video source makes the bmdplay to hold two to three minutes to get resumed when I use a infinite loop to make it run again.