DVPiper allows recording, displaying, and manipulation of transport streams from digital capture devices. Currently DVPiper supports ATSC, DVB-C, DVB-S, and DVB-T.
In particular it allows simultaneous multiple recording of any channel on the same frequency multiplex with one device. Through the same principle, any channel can also be displayed and manipulated using any application that reads from stdin, for example, saving the stream as MPEG-PS using ffmpeg, mencoder, or VLC. DVPiper also has built-in UDP streaming for direct streaming to a network/LAN.
Before you can use DVPiper you will need to register the Streamer Directshow filter first by double-clicking on register.bat. The Streamer Directshow filter was created for DVPiper and receives data from a BDA Directshow device.
For recording and previewing channels with DVPiper using a web interface see here
Download DVPiper version 1.33 here
|
You can use the -buffer option to suggest the memory buffer allocation. If data is streamed to an external application that does not process at a constant rate (but on average still faster than real-time) then modifying this value according to the peaks and troughs of the external program would ensure there is no time-gap in the recording. Higher value would also help if your hard drive (usually the bottleneck) experiences intermittent heavy usage. If a recording is processing too slowly resulting in buffer overrun there will be a time gap message in DVPiper.
On the other hand, if you are streaming or watching live broadcast and want to get to as close to real-time as possible, then you would want a small value for this. Unfortunately some media players do not handle time-gaps well. E.g. the VLC --ts-out command seems to parse the first few megabytes of the stream to determine the codec parameters, so if there is any time-gap during the parsing the determined parameters may be wrong. The easiest way to fix this would be to restart it. It should then start faster due to Windows caching.
Usage: DVPiper [options]
Options:
-fast Faster ready time, but may not be as reliable
for some devices
-tuning [value] Tuning method: 1, 2. Choose one that works
best with your device and broadcast
1 is the default tuning method,
2 is a faster tuning method
-listdevice List all available devices
-listdevicexml List all available devices in XML format
-devicenum [value] Use a specific device. The first device is 1
-devicename [value] Use a specific device friendly name, or
-devicename2 [val] Use a specific device display name
Partial match is accepted
-type [value] Device type: ATSC, DVB-C, DVB-S, DVB-T
-recname [value] Use a specific receiver component friendly name, or
-recname2 [value] Use a specific receiver component display name
Partial match is accepted
Use -recname or -recname2 to manually specify the
components to connect to the device
Use repeatedly to specify multiple components
-frequency [value] Carrier frequency in kHz. E.g. 571500
-modulation [value] Modulation: 16QAM, 32QAM, 80QAM, 96QAM, 112QAM,
128QAM, 160QAM, 192QAM, 224QAM, 256QAM, 320QAM,
384QAM, 448QAM, 512QAM, 640QAM, 768QAM, 896QAM,
1024QAM, QPSK, BPSK, OQPSK, 8VSB, 16VSB, 8PSK,
16APSK, 32APSK, NBC_QPSK, NBC_8PSK, DIRECTV
For DVB-S2 try 8VSB. Also try the other modulations
Note: this may not need to be set
-symbolrate [value] Symbol rate in kbauds. E.g. 27500
-fec [value] FEC: 1/2, 2/3, 3/4, 3/5, 4/5, 5/6, 5/11, 7/8,
1/4, 1/3, 2/5, 6/7, 8/9, 9/10
Note: this usually does not need to be set
-phychannel [value] ATSC physical channel number
Note: use the actual frequency instead with -frequency
-bandwidth [value] DVB-T bandwidth in MHz. E.g. 7
-polar [value] DVB-S polarization: V, H, L, R
-lowosc [value] DVB-S LNB low oscillator frequency in kHz
-highosc [value] DVB-S LNB high oscillator frequency in kHz
-lnbswitch [value] DVB-S LNB switch frequency in kHz
-longitude [value] DVB-S satellite longitude in degrees. E.g. 105.5
-dirlongitude [val] DVB-S satellite longitude direction: WEST, EAST
-azimuth [value] DVB-S azimuth in degrees
-elevation [value] DVB-S elevation in degrees
-inputrange [value] DVB-S input range as string for DiSEqC, etc
-diseqc [value] DVB-S DiSEqC command in hex. E.g. -diseqc 2a03facc
Try -inputrange before using -diseqc
-pilot [value] DVB-S2 pilot: ON, OFF
Note: this usually does not need to be set
-roll-off [value] DVB-S2 roll-off: 0.2, 0.25, 0.35
Note: this usually does not need to be set
-emptyexit Exit when there is no more active recording
-errorexit DVPiper will apply more stringent error checks
and exits on failure of these checks
-minclean [value] DVPiper will check clean data percentage and exits
when it falls below the stated value. E.g. 0.05
-minflow [value] DVPiper will check device data flow (in byte) and exits
when it falls below the stated value. E.g. 1000000
-checktimeout [val] Time-out period for data and flow checks in millisecond
-noflowcheck Disable flow checks
-forceexit Force exit method. Use if you have problem exiting
-log [filename] Save log messages to a file
-priority [value] Set priority of DVPiper
Possible values are (low,below,normal,above,high)
Default value is high
-childprio [value] Set priority of child processes
Possible values are (low,below,normal,above,high)
Default value is above
-buffer [value] Suggestion on memory buffer allocation in bytes
Generally higher value results in higher memory usage
Default is automatic
-mtu [value] MTU size for UDP streaming. Default is approx. 1500
-ttl [value] TTL for UDP streaming.
-command [command] Initial commands to execute upon starting
Type help within DVPiper for available commands
Enclose command within quotes "..."
Use two quotes "" for quote within the enclosure
Use -command repeatedly for multiple commands
-help Show this help message
-helpcommand Show commands available from within DVPiper
From within DVPiper the following commands are available (or use the option "-command [command]" as shown above to use from the command line):
Available commands:
stat Show statistics
getrate Show current data flow in bytes per second from device
signal Show signal strength, quality, and frequency locked status
diseqc(input) DiSEqC command in hex. E.g. diseqc(2a03fa)
Try channel(inputrange(...)) before using diseqc(...)
fqbw(fr,bw) DVB-T change frequency and bandwidth (bandwidth optional)
channel(...) Change channel.
E.g. channel(frequency(4000000),polar(H),diseqc(2a03facc))
listprogram Scan stream and list all programs found
listprogramxml Scan stream and list all programs found in XML format
listprogram(id) Scan stream for a certain Program ID and show details
count Show number of active recordings
list List details of all active recordings
list(RID) Show details of a particular recording
stop Stop all recordings
stop(RID) Stop a particular recording
exit Exit DVPiper
run(...) Run an external program
E.g. run('"b1.exe" -op')
optional arguments:
For priority possible values are (low,below,normal,above,high)
Default is inherited from -priority
To allow user interaction with the launched program when
DVPiper is installed as a service or as part of a service
use the keyword interact
E.g. run('"b1.exe"',high) or run('"b1.exe"',interact)
or run('"b1.exe"',high,interact)
The run command can also be used inside send(...) - see below
record(...) Record transport stream command
E.g. record(rid(123),progid(135),send('a1.ts',prog('"b1.exe" -op')))
Required arguments:
rid(...) Recording ID
This is to identify the recording
send(...) Where to send the stream
Ordinarily the transport stream will be saved to a file
In the example above the filename is a1.ts
prog(...) indicates send stream to stdin of a program
prog(...) command has the same syntax as run(...) - see above
In the example above "b1.exe -op" is executed
udp(hostname,port,mtu(.),ttl(.)) UDP streaming
mtu(.) and ttl(.) are optional
namedec(...) indicates save stream to a file, but the filename
is encoded in UTF-8 URL form (use for non-English filename)
E.g. "%28cat%20and%20dog%29" for "(cat and dog)"
Enclose each argument within quotes '...'
Use two quotes '' for quote within the enclosure
Keywords within the argument:
$pmt replace with the PMT PID
$ttxsub replace with the teletext PID
$ttxpagesub replace with the teletext subtitle page
If a keyword exists but value cannot be found file
will not be executed
If send(...) contains more than one argument,
DVPiper will close all if one fails
Optional arguments:
progid(...) Record all PIDs for a Program ID e.g. progid(135)
To record only the video, audio, and subtitles use
the keyword vas e.g. progid(135,vas)
To exclude or include more PIDs use exclude(...) or include(...)
E.g. progid(135,exclude(5,78),include(33,99))
pid(...) Record only given PIDs e.g. pid(1,2,5)
buildpat(ProgID,PMT_PID) When recording with progid() or pid(),
this option rebuilds PAT to contain only the specified
Program ID and corresponding PMT PID.
This is necessary for some media players.
When used with progid(), ProgID and PMT_PID can be omitted
patchpmt(PMT_PID,pt(PID1,Type1),pt(PID2,Type2),...)
When recording with progid() or pid(),
this option sets the Type of each PID in the PMT
When used with progid(), PMT_PID can be omitted
E.g. patchpmt(9,pt(7,1)) sets PID 7 to type 1 in PMT 9
This can be used for unknown video or audio
buffer(...) Buffer size suggestion e.g. buffer(8000000)
priority(...) Priority of recording
Possible values are (low,below,normal,above,high)
Default is inherited from -childprio
Examples:
In each of the following examples, the first line shows the command from within DVPiper.
The second line shows how the command should be modified for use with the -command option. This is necessary as Windows treats spaces and " as special characters.
To save program ID 135 as a TS to C:\Temp\a1.ts:
record(rid(1237),progid(135),send('C:\Temp\a1.ts'))
-command "record(rid(1237),progid(135),send('C:\Temp\a1.ts'))"
If there are no spaces in the command (like in this case), then it is not necessary to enclose the command within "..."
To save only the video, audio, and subtitles of program ID 135 as a TS to C:\Temp\a1.ts:
record(rid(1237),progid(135,vas),send('C:\Temp\a1.ts'))
-command "record(rid(1237),progid(135,vas),send('C:\Temp\a1.ts'))"
To save as a TS to C:\Temp\a1.ts, and rebuild the PAT to contain only Program ID 135 (this is necessary for some media players)
record(rid(1237),progid(135),buildpat,send('C:\Temp\a1.ts'))
-command "record(rid(1237),progid(135),buildpat,send('C:\Temp\a1.ts'))"
To save PID {5, 7, 8} as a TS to C:\Temp\a1.ts, and rebuild the PAT to contain only Program ID 55 with PMT PID 8:
record(rid(1237),pid(5,7,8),buildpat(55,8),send('C:\Temp\a1.ts'))
-command "record(rid(1237),pid(5,7,8),buildpat(55,8),send('C:\Temp\a1.ts'))"
To save PID {5, 7, 8} as a TS to C:\Temp\a1.ts, and change PMT 8 so that PID 5 has type 1, and PID 7 has type 3:
record(rid(1237),pid(5,7,8),patchpmt(8,pt(5,1),pt(7,3)),send('C:\Temp\a1.ts'))
-command "record(rid(1237),pid(5,7,8),patchpmt(8,pt(5,1),pt(7,3)),send('C:\Temp\a1.ts'))"
To UDP stream to localhost, port 1234:
record(rid(1237),progid(135),buildpat,send(udp(localhost,1234)))
-command "record(rid(1237),progid(135),buildpat,send(udp(localhost,1234)))"
For UDP streaming, MTU and TTL can also be specified (optional):
record(rid(1237),progid(135),buildpat,send(udp(destination,1234,mtu(3000),ttl(2))))
-command "record(rid(1237),progid(135),buildpat,send(udp(destination,1234,mtu(3000),ttl(2))))"
For streaming using VLC, use a command like the following (note that VLC 0.8.6i was used; other versions may use a different syntax):
record(rid(123),progid(135),buildpat,send(prog('"C:\Program Files\VideoLAN\VLC\vlc.exe" -I rc --rc-quiet file://- --sout #standard{access=http,mux=ts,dst=:1234} vlc://quit')))
-command "record(rid(123),progid(135),buildpat,send(prog('""C:\Program Files\VideoLAN\VLC\vlc.exe"" -I rc --rc-quiet file://- --sout #standard{access=http,mux=ts,dst=:1234} vlc://quit')))"
To save as an MPEG-PS using ffmpeg (note that ffmpeg rev 10475 was used):
record(rid(1238),progid(135),buildpat,send(prog('"C:\ffmpeg\ffmpeg.exe" -i - -vcodec copy -acodec copy -f dvd -y "C:\Temp\a1.mpg"')))
-command "record(rid(1238),progid(135),buildpat,send(prog('""C:\ffmpeg\ffmpeg.exe"" -i - -vcodec copy -acodec copy -f dvd -y ""C:\Temp\a1.mpg""')))"
To save as an MPEG-PS using VLC (note that VLC 0.8.6i was used; other versions may use a different syntax):
record(rid(1238),progid(135),buildpat,send(prog('"C:\Program Files\VideoLAN\VLC\vlc.exe" -I rc --rc-quiet file://- --sout #standard{access=file,mux=ps,dst="C:\Temp\a2.mpg"} vlc://quit')))
-command "record(rid(1238),progid(135),buildpat,send(prog('""C:\Program Files\VideoLAN\VLC\vlc.exe"" -I rc --rc-quiet file://- --sout #standard{access=file,mux=ps,dst=""C:\Temp\a2.mpg""} vlc://quit')))"
To save as an MPEG-PS using mencoder (note that mencoder rev 29355 was used):
record(rid(1238),progid(135),buildpat,send(prog('"C:\mplayer\mencoder.exe" file://- -ovc copy -oac copy -of mpeg -o "C:\Temp\a3.mpg"')))
-command "record(rid(1238),progid(135),buildpat,send(prog('""C:\mplayer\mencoder.exe"" file://- -ovc copy -oac copy -of mpeg -o ""C:\Temp\a3.mpg""')))"
|
|