summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/tests/AVStreams/mpeg/vcr.1
blob: 24e9688f674094e59d071096c96b003c259c08b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
.\" Copyright (c) 1995 Oregon Graduate Institute
.TH vcr 1 "November 1995" "MPEG video audio player"

.SH NAME
.B vcr vcrs
\- Distributed, real-time synchronized video audio player, version 2.0
.SH SYNOPSIS

.B vcrs
[
.B \-rt
] [
.B \-rm
] [
.B \-s\fIsession_limit\fP
] [
.B \-help
]

.B vcr
[
.B\-rt
] [
.B \-shmem
] [
.B \-rmsem
]
.ti +5n
[
.BR \-dither " ordered\||\|ordered2\||\|fs4\||\|fs2\||\|fs2fast\||\|hybrid\||\|
.if n .ti +5n
          hybrid2\||\|2x2\||\|gray\||\|color\||\|mono\||\|threshold
]
.if n .ti +5n
[
.I X-window options
]
.if n .ti +5n
[
.BR \-v " \fI[hostname:]video-filename\fP"
]
.if n .ti +5n
[
.BR \-a " \fI[hostname:]audio-filename\fP"
]
.if n .ti +5n
[
.BR \-p " \fImovie-file-name\fP"
]
.if n .ti +5n
[
.BR \-l " \fImovie-list-file-name\fP"
]
.if n .ti +5n
[
.BR \-quiet
]
.if n .ti +5n
[
.BR \-help
]
.SH DESCRIPTION

The player plays \fBMPEG\-1\fP video and \fB8\-bit mu\-law (Sun
Sparc)\fP audio. It supports
following \fBfour types\fP of playback:
.TP
\ \ \ \(bu
Plays both video and audio synchronously, in real-time mode. Video
frames, or even audio samples are dropped if needed.
.TP
\ \ \ \(bu
Plays video only, in real-time mode. Video frames are dropped if
needed.
.TP
\ \ \ \(bu
Plays video only, in best-effort mode, video frames are played as fast
as possible.
.TP
\ \ \ \(bu
Plays audio only, in real time mode.
.PP

When video/audio is played in \fBreal-time\fP mode, play speed (defined in
terms of frames-per-second (fps) for video and samples-per-second (sps)
for audio) can be specified through a speed scale. If audio is played at a
speed other than the recording (normal) speed, samples are interpolated.

When video is played in \fBbest-effort\fP mode, the player tries its
best to play video frame by frame, and not to drop frames.  This mode
is not supported very well. Now and then some frames may be
dropped. Audio is disabled in this mode.

As well as various types of playback, the player also supports other
common VCR functions such as fast forward, rewind, step
(forward), random positioning, etc..

The player is of \fBdistributed architecture\fP, with servers and
clients communicating across Internet. A \fBserver\fP resides on a
host, and services coming audio/video retrieval requests from clients.
A \fBclient\fP receives instructions from the user, makes connection
to servers, buffers incoming streams, decodes video frames,
interpolates audio samples, and outputs audio and video to
corresponding devices in a timely manner. A client can connect to
different servers for audio and video streams, and still plays them
synchronously.


.SH SERVER

To start the server, type:

.B vcrs
[
.B \-rt
] [
.B \-rm
] [
.B \-s\fIsession_limit\fP
] [
.B \-help
]

One host can have a SINGLE server running, which responds to
connection requests from all clients to that host. Subsequent
invocation is terminated with an error message.

\fBOptions\fP

.IP "\fB-rt\fP"
On \fBhpux\fP, \fBsparc-sunos5.3\fP and \fBi86pc-solaris2.4\fP, if you
have real-time execution privilege, you can start the server with
the option \fB\-rt\fP to get better service.

.IP "\fB-rm\fP"
With option \fB\-rm\fP, the server will try to remove socket names
left by previous crashed invocations before initialization.

.IP "\fB-s\fIsession_limit\fP"

With the option of \fB\-s\fP followed by a positive integer, e.g.
\fB-s2\fP, \fB-s4\fP or \fB-s10\fP, the number of sessions
serviced by the server at any time will be limited to be no more than
the given number. Both audio and video sessions are counted. The
default session number limit is \fB4\fI.

.IP "\fB-help\fP"
This option tells the server to print all available options and then
quit.

.PP

In a video session, the server tries to find a
corresponding \fB.Info\fP file describing the structure of the MPEG
file of the session. If this fails, the server scans the MPEG file for
structure information and tries to create the \fB.Info\fP file. For
big MPEG files, this scanning process may take quite a few minutes
(some times even tens of minutes). If the \fB.Info\fP file is found,
the server simply reads structure information from it.

.SH CLIENT

The client program is available on \fBsun4\fP, \fBhpux\fP and
\fBi86pc-solaris2.4\fP.  It needs a \fBMotif\fP environment, and
outputs audio to the default \fBAudioFile\fP server. If the client
fails to connect to the default AudioFile server, then the audio is
disabled.

To start the client, type:

.B vcr
[
.B\-rt
] [
.B \-shmem
] [
.B \-rmsem
]
.ti +5n
[
.BR \-dither " ordered\||\|ordered2\||\|fs4\||\|fs2\||\|fs2fast\||\|hybrid\||\|
.if n .ti +5n
          hybrid2\||\|2x2\||\|gray\||\|color\||\|mono\||\|threshold
]
.if n .ti +5n
[
.I X-window options
]
.if n .ti +5n
[
.BR \-v " \fI[hostname:]video-filename\fP"
]
.if n .ti +5n
[
.BR \-a " \fI[hostname:]audio-filename\fP"
]
.if n .ti +5n
[
.BR \-p " \fImovie-file-name\fP"
]
.if n .ti +5n
[
.BR \-l " \fImovie-list-file-name\fP"
]
.if n .ti +5n
[
.BR \-quiet
]
.if n .ti +5n
[
.BR \-help
]

\fBOptions\fP

.IP \fB-rt\fP
On \fBhpux\fP, and \fBi86pc-solaris2.4\fP, if you have real-time
execution privilege, with this option you may get better service.
.IP \fB-shmem\fP
With this option, the client tries to output video frames to the
X-server via shared memory instead of sockets.
.IP \fB-rmsem\fP
With this option, prior to initialization, the client tries to remove
\fBall\fP existing semaphore and shared memory ids you have access to.
\fBBe careful\fP, with this option, you also face the danger of
removing semaphores or shared memory ids being used by other programs,
as well as all the ones created by failed invocation of the player.  See
\fBSemaphore ids and shared memory ids used up\fP in \fBKNOWN PROBLEMS\fP
section.
.IP "\fB-dither\fP ordered|ordered2|fs4|fs2|fs2fast|hybrid|"
   hybrid2|2x2|gray|color|mono|threshold

This option specifies the type of dithering performed on video frames
in order to be displayed on an X-window. The default is
\fIordered\fP. \fIcolor\fP only works with full color (24-bit)
displays. All others work with 8-bit color displays. \fImono\fP and
\fIthreshold\fP also work with mono displays.  Different types of
dithering have different computational complexity and offer different
image quality.
.IP "\fIX-window options\fP"
All standard X-window Toolkit command line options are accepted
(see \fBX\fP(1)).
.IP "\fB-v\fP \fI[hostname:]video-filename\fP"
The very first program for the player can be specified in command line
with \fB-v\fP and/or \fB-a\fP options, for video and/or audio streams
respectively.

This option specifies a video stream. If the \fIhostname\fP part is
given, the client tries to connect to a running server on the given
host, and plays the given file. If the hostname part is missing, the
client assumes there is a running server on the local host or tries to
fork one.  and tries to connect to it.

.IP "\fB-a\fP \fI[hostname:]audio-filename\fP"
This option specifies an audio stream of the very first program.
Only file names with suffix \fB.au\fP are accepted as audio files.
.IP "\fB-p\fP \fImovie-file-name\fP"
This option specifies a file specifying a movie to be played upon
client startup. A movies file contains \fBfive lines\fP lines: title,
video host name, video file path, audio host name, and audio file path.
.IP "\fB-l\fP \fImovie-list-file-name\fP"
This option specifies a movie list file to replace the default movie
list file \fI$(HOME)/.vcr/vcrPrograms\fP. A movie list file contains a
banner line, followed by a list of movies.
.IP "\fB-quiet\fP"
This option tells the client not to print any text message. This is
useful when the player is invoked from within a web browser.
.IP "\fB-help\fP"
This option tells the client to print all available options and quit.

.PP

\fBOperations\fP

There are \fBtwelve buttons\fP and \fBfour scales\fP defined in the top-level window.
Buttons from left to right are:
.PP
.IP \fIExit\fP
Exits the client right away.
.IP \fIInfo\fP
Pops up a window containing information about the player.
.IP \fIPara\fP
Pops up a window with a list of parameters. Parameter values
can be viewed and modified through this window.
.IP \fIProg\fP
Pops up a window with a list of programs.  You
can select a program from this list to play.
.IP \fIFile\fP
This is an alternative way to select programs. pressing this button
pops up a standard Motif file selection window. You can select
audio/video file on local host to play. The client assumes a running
server on local host, or tries to fork one.

File names with suffix \fB.au\fP are accepted as audio, and file
names with suffices \fB.mpg\fP, or \fB.mpeg\fP (some or all letters in
the suffices can be upper-case ones) as MPEG video. Other types of
file names are rejected.

Selection of a new program causes the current program to be discarded.
.IP \fILoop\fP
A toggle button. When pressed, the current program is played
repeatedly until stopped explicitly by the user, otherwise, playback stops when
program end is hit. This button has no effect on rewind and fast
forward.
.IP \fINorm\fP
Restores play speed to the normal (recording) speed.
.IP \fIRewind\fP
For video programs. Plays backward from the current position at a
speed given by the parameter \fI(Rewind frames-per-second)\fP.  Only first
frames of MPEG picture groups (I-frames) are played. Audio is
disabled.
.IP \fIStop\fP
Stops active playback, fast forward or rewind.
.IP \fIFast-Forward\fP
For video programs. Plays forward from the current position at a speed
given by the parameter \fI(FF frames-per-second)\fP.  Only first frames of MPEG
picture groups (I-frames) are played. Audio is disabled.
.IP \fIPlay\fP
Plays the program from the current position in one of the two modes,
depending on if video is involved and the value of an parameter \fI(Real
time(audio on)(tag))\fP:
.RS
.IP -
Best-effort mode, if the parameter is off (0), and video is involved.
.IP -
Real-time mode, otherwise.
.RE
.IP \fIStep\fP
Steps forward for one frame from the current position.
.PP
Clicking on buttons \fIRewind\fP, \fIFast-Forward\fP, \fIPlay\fP and
\fIStep\fP and dragging the \fIPlay-Speed\fP scale all stop current
active rewind, fast forward, or play.

.B "Four scales \fP from left to right are:"

.IP \fIBalance\fP
Currently not functional, because only mono audio is
supported.
.IP \fIVolume\fP
Audio volume.
.IP \fIPlay-Speed\fP
Specifies play speed for real-time mode playback. This scale is not
completely linear, with a special middle point (\fB50\fP).
.RS
.IP \fB50\fP
normal (recording) speed.
.IP "\fB[1 - 50)\fP"
linear speed value increase from zero to the normal speed.
.IP "\fB(50 - 100]\fP"
Linear speed value increase from the normal speed to the maximum
speed given by the parameter \fI(Video max frames-per-second)\fP when
video is involved in the current program, or \fI(Audio max
samples-per-second)\fP when only audio is involved.
.RE
This scale also defines the upper-limit of the best-effort playback
speed.
.IP \fIPosition\fP
This scale has multiple functionalities:
.RS
.IP -
Indicates the beginning position for rewind, fast forward and
playback.
.IP -
Shows the current position during rewind, fast forward, and playback.
.IP -
Random positioning: you can set the position by dragging the
slider. when video is involved, the first frame of the picture group
at the current position is displayed.
.RE
.PP
.B "Program list"

.B Program list
is maintained through the \fBprogram list\fP window, which is popped up by
clicking the \fIProg\fP button in the main window. Currently only \fISelect\fP
and \fIDismiss\fP buttons are fully functional, and contents of a selected
program can be viewed (but not modified) by pressing the \fIModify\fP
button. To select a program, \fBhighlight\fP the desired item and
click \fISelect\fP.  To modify the program list, edit the program file given
below.

.B "Parameters"

.B Parameters
are viewed and maintained through the parameter window, which is activated
by clicking the \fIPara\fP button in the main window. To update a parameter,
\fBhighlight\fP the item, enter the new value in the text window next
to the \fIUpdate\fP button, and press \fIUpdate\fP. Following parameters
are supported:

.IP "\fIReal time (audio on)(tag)\fP"
Best-effort play mode when this parameter is 0 and video is involved
in the current program, otherwise real-time play mode. Default: 1,
range: 0, non-0.
.IP "\fIVideo max frames-per-second\fP"
For video programs, real-time mode play speed when speed scale has a
value of 100. Default: 60, range: > the normal speed.
.IP "\fIAudio max samples-per-second\fP"
For audio-only programs, play speed when speed scale has a value of
100. Default: 16000, range: > the normal speed.
.IP "\fIFF frames-per-second\fP"
Fast forward speed. Default: 150, range: > 0.
.IP "\fIRewind frames-per-second\fP"
Rewind speed. Default: 150, range: > 0.
.IP "\fIFeedback delay (msec)\fP"
Currently not used.
.IP "\fIAudio output mask\fP"
Currently not used.
.IP "\fIAudio_para.encodeType\fP"
Currently not used.
.IP "\fIAudio_para.channels\fP"
Currently not used.
.IP "\fIAudio_para.samplesPerSecond\fP"
Currently not used.
.IP "\fIAudio_para.bytesPerSamples\fP"
Currently not used.
.IP "\fIAudio timer interval (millisec)\fP"
For audio-only programs. Playback
timer interval in milliseconds. Playback of audio and video is
driven by a timer in the client. Default: 500, range: > 0.
.IP "\fIAudio buffered intervals\fP"
For audio-only programs. This number of timer intervals of audio
samples are to be buffered in the AudioFile server internal buffer. This
parameter and the previous one determine how many milliseconds of
audio samples are to be buffered in AudioFile. Buffering too
many samples reduces responsiveness, too few may degrade playback
quality.  Default: 2, range: > 0.
.IP "\fIFrames per audio play\fP"
For audio+video programs, this parameter determines the ratio of the
audio timer interval over the video timer interval.  Default: 4,
range: > 0.
.IP "\fIAudio forward (samples)\fP"
For audio+video programs, this number of samples of audio is
played ahead of video stream. This is supposed to compensate the
delay in AudioFile server. Default: 800, range: > 0.
.IP "\fIVS work-ahead (milli-seconds)\fP"
For video program, this number of milli-seconds the player tries to
keep the video server ahead of the client during playback, rewind and
fast forward.

If the parameter \fISync effective\fP has a value of non-0, then this
parameter gives the initial value of the VS work-ahead time, and the
actual work ahead time is adjusted according to current network delay
jitter level.  If a value less than the default is set, then the
default instead of the given one is used by the player.

Default: 100, range: >= Default.

.IP "\fIFrame rate limit (fps, float)\fP"
For video programs. In real-time play mode, if current play speed is
higher than the value of this parameter, then this
parameter defines the maximum frame rate the player tries to play.
Default: 60.0, range: >0.
.IP "\fICollect statistics(tag)\fP"
For video programs. If both the server and the client programs are compiled
with STAT defined, this tag indicates that, at the end of a playback
session, when \fIStop\fP button is pressed (or in loop-back mode when the
end of the program is reached) statistics is collected to file
stat.\fIn\fP in current directory (from which the client is
invoked). Default: 0, range: 0, non-0.
.IP "\fICollect video structure info(tag)\fP"
For video programs. If both the server and the client programs are compiled
with STAT defined, this tag indicates that, upon successful
initialization of a video stream, structure information of the MPEG
stream is collected to a file named struct.\fIn\fP in
current directory Default: 0, range: 0, non-0.
.IP "\fISync effective(tag)\fP"
For video programs, when set, server/client synchronization control is
effective during playback, rewind and fast forward. Default: 1, range:
0, non-0.
.IP "\fIQoS effective(tag)\fP"
For video programs, when set, automatic frame rate control is
effective during playback. Default: 1, range: 0, non-0.
.IP "\fIAudio offset(samples)\fP"
For audio+video programs. The player assumes that in a program, audio
and video are recorded strictly synchronously.  But it is usually not
the case, and there is a certain amount of timing shift between audio
and video. This parameter specifies audio forward offset against video
in order to compensate the shift. Default: 0, range: integer
.IP "\fIFilter parameter(1/R or n-samples)\fP"
Parameter of the filters for client/server synchronization and frame rate
control. Default: 50, range: > 0.
.IP "\fIMax send pattern frames\fP"
This parameter sets the granularity of the frame rate control
algorithm. Default: 60, range: > 0.
.IP "\fIReliable byte-stream audio (tag)\fP"
In the case when the server is on a remote host, when this tag is set,
the client establishes a TCP connection to the server for shipping
audio samples, otherwise a UDP is used. The client always setup a TCP
connection to the server for control messages, no matter what value
the tag is.
.IP "\fIReliable byte-stream video (tag)\fP"
Similar effort as previous tag, but for video channel.
.IP "\fIVerbose message(tag)\fP"
If this tag is set, then verbose message is printed (provided that
command line option \fB-quiet\fP is not specified. Otherwise the
client will still print some, but less verbose message.
.PP
Parameter setting is for experienced user only. It is suggested that
you leave values of most parameters as default. If you like to change
some of them, be careful. It may make the player behave improperly. In
case you made some change, the player fails to work, and you are
unable to undo the change, delete the parameter file shown below and
restart the client.

.SH FILES

.IP "\fI($HOME)/.vcr/vcrPrograms\fP"
Program file. If this file is absent, it is created with a default
movie list of several basketball game sample movies in it. The movies
in the default movies list are maintained at CSE OGI. In a movie list
file, the first line is a banner. Following this line, each contiguous
four lines describe a movie: video host, MPEG file path, audio host,
audio file path. You may edit the movie list fileto include any movies
you like.

.IP "\fI($HOME)/.vcr/vcrParameters\fP"
Parameter file. When absent, the system default parameter values
apply. Whenever you update a parameter, this parameter file is also
created or updated.

.SH KNOWN PROBLEMS

.B "The player stalls"
when or after playing audio program at very \fBlow speed\fP, or the
product of \fI(Audio timer interval)\fP and \fI(Audio buffered intervals)\fP
parameters \fBtoo large\fP, or \fI(Frames per audio play)\fP too
large. This is because the client tries to put too many audio
samples to AudioFile each time, blocking itself for output.

In this version of the player, when an video+audio program is played,
some conditions are checked and low speed limit is enforced. You
are not able to set too low play speed (even if you set the speed
slider to 0 position). But the conditions might not be sufficient.

.B "Play at too high speed\fP,"
or \fI(Audio timer interval)\fP too small, or \fI(Video max
frames-per-second)\fP, \fI(FF frames-per-second)\fP, or \fI(Rewind
frames-per-second)\fP too high, presentation quality may be worse than
expected. This is because of the resolution limit of the UNIX interval
timer, which is about 10 milliseconds.

.B "When Play speed jump from high to very low\fP,"
a few seconds of worse-than-expected video presentation quality may be
experienced. Because at high speed, the video server usually drops
frames, and play speed changes, the player does not flush the video
pipeline.

Various problems may be experienced if the \fBparameter\fP values are too
far from their default. The parameter values are seldomly guarded.

.B "Audio doesn't work when played across the Internet\fP."
This is because audio is retrieved from the audio server to the
client via TCP, and the Internet TCP connection fails to provide
enough (e.g. 8KB/s) sustained bandwidth. In this case, all audio
samples would be too late showing up at the client, and thus are
dropped.

.B "X shared memory problem\fP."
Parts of the user interface may not work correctly when the player
outputs to X-window via shared memory (with option \fB-shmem\fP).  For
example, some of the buttons may not show up. Usually, the missing
buttons will show up by iconifying the user interface.

.B "Core dump."
The player may core dump when playing a specific MPEG stream, at a
specific position. This may be because the parameters in the MPEG
stream is out of the ability of the decoder code. Upon core dump, you
may want to reproduce the problem, and recompile the player with
option -DNDEBUG, run the player again to see if any assertions fails.

.B "Semaphore or shared memory ids used up\fP."
When this happens, an error shmget() or semget() is reported by the
player.  This may happen if previous invocation(s) of the player have
exit abnormally causing core dump, and you try to run the player
again. Because semaphores and shared memory segments might not be
reclaimed when the player exits abnormally.  You may run the client
with option \fB\-rmsem\fP to remove all existing semaphores and shared
memory ids accessable by you. See description of \fB\-rmsem\fP.  If
\fB-rmsem\fP does not work, you may need to use tools like
\fBipcrm(1)\fP.

.B "Undeleted UNIX socket pathes /tmp/vcrs*\fP"
Some UNIX socket names may remain in /tmp directory as "vcrs*", if the
server or the client has terminated abnormally.

.SH BUG REPORT

If you experience problems, look at the above KNOWN PROBLEM section
first. If the problem is not described, try to reproduce the problem, and
\fBreport bug\fP to \fBscen@cse.ogi.edu\fP.  Thanks.

.SH COPYRIGHT

This software is covered by copyrights. It contains code contributed
by the author and several other parties. Please see the beginning of
source files and copyright file(s) in the root directory of the source
kit.

.SH SEE ALSO

.B "AF\fP(1), \fBX\fP(1)"

.SH AUTHOR

 Shanwei Cen
 Department of Computer Science and Engineering
 Oregon Graduate Institute of Science and Technology
 scen@cse.ogi.edu