Commit Graph

181 Commits

Author SHA1 Message Date
Frank Schmirler
b33d2631df Fixed problems related to VTP filter streaming like ringbuffer overflows,
stuttering or aborting video stream (refs #2045)

Toerless Eckert wrote:

This patch tries to resolve problems in streamdev-client that
can occur when enabling "StreamFilters". Enabling this option
is necessary to receive certain programs with dynamic PIDs such as
some german "regional" broadcast (eg: NDR).

Problem:

Without this fix, the following behavior was observed on a Raspberry
PI running streamdev-0.6.1-git with VDR-2.6.1:

- Buffer overflows of filter data
- Stop/go video on channels
- Total stopping of video

More logs in:

http://www.vdr-portal.de/board16-video-disk-recorder/board55-vdr-plugins/125237-
streamdev-client-filter-daten-streamen-ndr-raspberry-haengt/

Analysis:

VDR expect section data from filters separately from the
main program stream. Historically, it received each filter data
via a separate file descriptor from the DVB card. In the streamdev-client
module, a socketpair is used to feed filter data to the main VDR code.
During certain operations in VDR, such as startup or channel change
(depending also on the speed of initialization of the video output driver),
VDR does not consume the filter data as fast as it is provided by
streamdev-client, resulting in overflow of the default socket buffers
used by streamdev-client.

To add to the problem of overflowing the socketpair buffers, the
streamdev-client code sends several times a second short packets into
the socketpair to determine if the receiving side (VDR) has closed
the socketpair (IsClosed(), CarbageCollect()). This further clogs
up the socketpair() buffer.

The raspberry PI socketpair buffering behavior seems to be the same
as that of other 3.x linux systems, the socket buffer size is by
default 163840, and it can be increased via sysctl net.core.wmem_max.
During startup, it can take up to 10 seconds before VDR will consume
filter data, so the socketpair buffer can fill up with 10 seconds worth
of data.

Solution

1. IsClosed()/CarbageCollect() where removed from client/filter.c
and replaced by explicitly tracking when VDR closes a filter socket.
This alone seems to already resolve the problem of hanging or stop&go
video and seems to be sufficient to receive dynamic-PID channels reliably.

2. filter.c was enhanced to request a larger socket buffer size
if config option FilterSockBufSize is set.

3. If supported (if streamdev-client runs on linux), the socketpair
queue is "flushed" to reduce the amount of "random" packet drop messages
and to rather drop sequential messages.
2015-01-24 00:19:04 +01:00
Frank Schmirler
657c8bc49c Added Polish translation (closes #2038) 2014-12-23 12:40:13 +01:00
Frank Schmirler
5f5fb7953e Converted suspend.dat into proper PES format (closes #2034) 2014-12-22 21:56:41 +01:00
Frank Schmirler
7b17f7725c Implemented GetCurrentlyTunedTransponder() on client (closes #2010) 2014-11-20 14:21:44 +01:00
Frank Schmirler
1ee2049c4d Added service call returning the number of clients (closes #1967) 2014-11-07 23:51:13 +01:00
Frank Schmirler
99b223c55f Added SVDRP commands to list and disconnect clients (closes #1860) 2014-11-07 23:01:08 +01:00
Frank Schmirler
7df7185e1a fixed recplayer issues with large TS files (>4GB) 2014-10-24 12:29:49 +02:00
Frank Schmirler
dd556ee7fd Don't abort externremux when internal read buffer is empty 2014-09-19 15:23:14 +02:00
Frank Schmirler
e83c9d92aa Implemented remuxing of recordings (closes #1892) 2014-09-07 02:48:07 +02:00
Frank Schmirler
e8629b5ec6 Make ChannelChange retune only if CA IDs changed (closes #1767) 2014-08-31 00:20:35 +02:00
Frank Schmirler
703dffa0cb Updated HISTORY 2014-08-09 23:07:51 +02:00
Frank Schmirler
2cdf160648 Configurable buffer for live TV 2014-05-18 15:24:24 +02:00
Frank Schmirler
40704cdcbc Release 0.6.1 2013-11-28 20:59:04 +01:00
Frank Schmirler
5fcd6eca69 Updated Slovak translation (closes #1626) 2013-11-25 12:44:22 +01:00
Frank Schmirler
a4a774c6ce Updated Finnish translation (thanks to Rolf Ahrenberg) 2013-11-25 12:40:30 +01:00
Frank Schmirler
c18f7d47e7 Disabled PS remuxer which is said to produce anything but PS 2013-11-17 11:20:42 +01:00
Frank Schmirler
1439b016b3 The patches intcamdevices and ignore_missing_cam are no longer required
on VDR >= 1.7.30. The localchannelprovide patch became obsolete with VDR
1.7.21.
2013-11-17 10:52:12 +01:00
Frank Schmirler
f194ca2074 Added option to suspend live TV when the server starts (closes #1296) 2013-11-02 16:58:17 +01:00
Frank Schmirler
1d4a7e06b4 Set device occupied when streamdev switches away LiveTV on the server, to
reduce the risk that the VDR main loop immediately switches back, resulting
in a black screen on the client (reported by hummel99)
2013-11-01 15:33:19 +01:00
Frank Schmirler
458a21a62a Fixed channel switch issues with priority > 0 2013-10-30 21:18:56 +01:00
Frank Schmirler
69b654d539 Removed noisy debug messages 2013-10-21 22:21:12 +02:00
Frank Schmirler
5e5070edc0 Fixed HTTP menu destruction 2013-10-20 17:40:22 +02:00
Frank Schmirler
dfc8339c9e API change of VDR 2.1.2 2013-10-20 00:10:39 +02:00
Frank Schmirler
a9c2adb565 Fixed priority handling, messed up when adding multi-device support 2013-10-19 01:22:45 +02:00
Frank Schmirler
8c5859ed4a Added HTTP "Server" header 2013-10-02 00:03:39 +02:00
Frank Schmirler
e1ba17ca21 Ignore dummy file extensions (.ts, .vob, .vdr) when parsing HTTP URIs 2013-10-01 23:52:03 +02:00
Frank Schmirler
c92de13d06 Select start position for replaying a recording by parameter pos=
Based on offset_5.diff from hivdr@vdrportal with the following modifications:
- indenting
- replaced isyslog with Dprintf
- left out HTTP header "Server:" for the moment
2013-09-27 17:33:18 +02:00
Frank Schmirler
d7652d89ca Start cSuspendCtl hidden or it will prevent idle shutdown.
As long as a cControl is not hidden, cControl::Control() will return a value
and LastInteract is updated in the VDR main loop.
2013-07-16 13:12:20 +02:00
Frank Schmirler
b25e53c867 Fixed recordings menu inode numbers: ino_t is a long long on some systems 2013-07-16 13:07:58 +02:00
Frank Schmirler
329129d9c1 Updated Slovak translation (closes #1293) 2013-03-19 12:08:01 +01:00
Frank Schmirler
08198729ac Adapted Makefiles to VDR 1.7.36+ (thanks to macmenot). Old makefiles have
been renamed to Makefile-1.7.33 (fixes #1199)
2013-02-27 13:11:23 +01:00
Frank Schmirler
10db11acd9 API changes of VDR 1.7.38 (thanks to mal@vdr-developer) 2013-02-18 12:43:02 +01:00
Frank Schmirler
f58086a83a Added simple recordings menu in HTTP server 2013-02-03 12:40:46 +01:00
Frank Schmirler
d3dd72072c Restructured menuHTTP classes 2013-02-03 11:02:25 +01:00
Frank Schmirler
9bbb74b7fd Added RSS format for HTTP menus 2013-02-02 23:28:55 +01:00
Frank Schmirler
176df8341d Recordings can now also be selected by struct stat "st_dev:st_ino.rec" 2013-02-02 22:34:47 +01:00
Frank Schmirler
525edc1ccf Implemented multi-device support for streamdev client (closes #1207) 2013-01-29 00:02:17 +01:00
Frank Schmirler
9135cde712 Basic support for HTTP streaming of recordings 2012-12-16 13:29:15 +01:00
Frank Schmirler
1866716471 Close writer when streamer is finished 2012-12-16 13:21:19 +01:00
Frank Schmirler
50d249c62e Don't abort VTP connection if filter stream is broken 2012-12-16 13:12:42 +01:00
Frank Schmirler
f5da0ea1fc Restructured cStreamdevStreamer: Moved inbound buffer into actual subclass. 2012-12-16 12:40:44 +01:00
Frank Schmirler
0677f48329 In cStreamdevStreamer dropped Activate(bool) and moved its code into Start() 2012-12-04 17:21:36 +01:00
Frank Schmirler
83e9f3250f Moved cStreamdevFilterStreamer to livefilter.[hc] 2012-11-24 23:35:10 +01:00
Frank Schmirler
c267b585fd - Return HTTP/1.1 compliant response headers plus some always useful headers
- Return HTTP URL parameters ending with ".dlna.org" as response headers
- Store HTTP URL parameters in a map
2012-11-16 02:00:09 +01:00
Frank Schmirler
be9da74958 Support HTTP HEAD requests with external remuxer 2012-11-02 09:09:15 +01:00
Frank Schmirler
e7bcc9349c Fixed always using priority 0 for HTTP HEAD requests 2012-11-02 09:07:19 +01:00
Frank Schmirler
b614fa0ec3 Start writer right after creating it 2012-11-02 09:02:22 +01:00
Frank Schmirler
84db6323a6 Corrected typos (thanks to Ville Skyttä) 2012-06-28 17:17:59 +02:00
Frank Schmirler
281105f0c7 Fixed compiler error in client/device.c with VDR < 1.7.22 (reported by Uwe@vdrportal) 2012-06-22 08:54:47 +02:00
Frank Schmirler
80e40d4260 Updated Italian translation (thanks to Diego Pierotto) 2012-06-13 08:55:33 +02:00