-
Notifications
You must be signed in to change notification settings - Fork 0
/
README
406 lines (294 loc) · 15.3 KB
/
README
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
README for FMJ
FMJ supports movie and audio file playback, as well as viewing of
video from a capture device, on Windows, Mac OS X, and
Linux.
--------------------------------------------------------------------
Requirements: Java 5
--------------------------------------------------------------------
Applications
Run the .sh/.bat for your platform. There are several apps included:
fmjstudio,
fmjplay,
fmjtranscode, and
fmjregistry.
fmjstudio lets you play media, and has dropdowns already
for the sample media included with FMJ. If you have a video camera
installed on your system, you should be able to view it using the
appropriate tool button.
fmjplay is a no-frills player. Requires the media parameter as a
URL as a command-line argument. Files must begin with file://
fmjtranscode is a command-line transcoding application. Run it with no
arguments to get example usage.
fmjregistry is similar to the JMF JMFRegistry app. It is NOT
necessary to run this app to view the samples. It is useful if
you are using external codecs, etc., which need to be registered
(example, JFFMPEG). In particular, FMJStudio can do dynamic capture
device detection, so there is no need to do this in the registry.
There is an example of how to use FMJ in an applet in applet.example.
Please read the comments in the HTML files.
--------------------------------------------------------------------
External, Native Libraries
FMJ can take advantage of a number of native, dynamic libraries, if they
are present, and in your library path.
1. ffmpeg
2. ogg/vorbis/theora
3. gstreamer
In general, you may sometimes have
to set your library path explicitly, for example on *nix systems, something
like:
export LD_LIBRARY_PATH=/usr/local/lib
Here are instructions on how to get and build these libraries, if you do
not have them. The instructions are for *nix systems, it is certainly possible
to build them on Windows systems, but you'll have to look online for how to do
that.
-------------------------------------
ffmpeg:
Note: mmx is disabled in this example, as it has caused problems in the past.
Step 1:
Get ffmpeg sources from http://ffmpeg.mplayerhq.hu/
Step 2: build/install ffmpeg
./configure --disable-mmx --enable-shared
make
sudo make install
-------------------------------------
theora:
Step 1:
Get ogg, vorbis, theora sources from http://www.theora.org/
This library was built/tested with:
* libtheora-1.0alpha7
* libogg-1.1.3
* libvorbis-1.1.2
Step 2: build/install ogg, vorbis, theora, by running the standard build
procedure in each of the 3 directories:
./configure
make
sudo make install
-------------------------------------
gstreamer:
Available from http://gstreamer.freedesktop.org/
--------------------------------------------------------------------
Troubleshooting:
---
Cannot find a DataSource for: civil...
WARNING: net.sf.fmj not found in PackageManager.getContentPrefixList() and PackageManager.getProtocolPrefixList(); is JMF ahead of FMJ in the classpath?
WARNING: javax.media.Manager is JMF's implementation, not FMJ's; is JMF ahead of FMJ in the classpath?
One very common problem is to have JMF ahead of FMJ in the classpath. If this is the case, then
you will be using the JMF registry, in which case nothing from FMJ will be registered. The
FMJ apps will generally work (that is, you'll be able to open and play media, etc.), but anything
that requires FMJ will not work. The FMJ apps will output a warning to the logger (which generally
goes to the console) if this is the case.
To aid with troubleshooting, it is recommended that you change your logging.properties (in the current
dir of FMJ) to use debug-level logging. To do so, change
fmj.level=INFO
to
fmj.level=FINE
---
WARNING: java.lang.UnsatisfiedLinkError: [...]\jdshow.dll: Can't find dependent libraries
java.lang.UnsatisfiedLinkError: [...]\jdshow.dll: Can't find dependent libraries
jawt.dll probably is not in your PATH. See Platform-specific notes for Windows:
---
On Windows, when trying to play media: net.sf.jdshow.ComException: hr=-2146697203
This is a Windows error pertaining to the URL or path specified. See http://support.microsoft.com/kb/234292
In particular, Windows is pickier than FMJ about slashes in the URL.
For example, the following URL does not work with Windows (when DirectShow is being used for the playback):
file:///F:\safexmas.mov
But, remove one forward slash from the URL, like this:
file://F:\safexmas.mov
And it will work, assuming everything else is correct.
---
java.lang.UnsatisfiedLinkError: /tmp/jna44845.so: /lib64/tls/libc.so.6: version `GLIBC_2.4' not found (required by /tmp/jna44845.so)
(NOTE: you will only get this error for the first JNA-based plugin that is loaded, the other ones will fail with a different exception, which by default does not get logged)
This is because JNA was built on a newer system than yours. You'll have to build JNA from scratch. We are currently using the jnalib-v3 branch of JNA.
svn checkout https://jna.dev.java.net/svn/jna/branches/jnalib-v3 jna --username yourjavanetusername
-- problems with jdshow on windows
If you wish to eliminate the usage of jdshow for windows playback, in case it is causing problems for you:
To disable jdshow, you can either remove jdshow.dll from your library path, or you can remove this code from RegistryDefaults.java:
contentPrefixList.add("net.sf.fmj.ds");
Or you can run the registry tool, remove net.sf.fmj.ds from the content prefix list, and then run FMJ studio.
This stores your registry settings in a file .fmj.registry.xml.
The danger of doing this is that this will now override any future changes to RegistryDefaults,
so you might want to delete that file if RegistryDefaults is changed in CVS.
--------------------------------------------------------------------
Platform-specific notes:
Windows:
For movie playback (as well as capture), requires DirectShow to be installed.
If you get an error that jawt.dll cannot be found, find it in your JRE
directory and copy it to somewhere in your PATH (perhaps the current
directory).
---
From whome:
I edited fmjstudio.bat file and put JRE/bin folder to path variable. Doing so I did not have to copy jawt.dll file to the app folder.
[ fmjstudio.bat ]
rem jawt.dll must be found from path
set path=%path%;C:\Program Files\Java\jre1.5.0_07\bin
java -classpath fmj.jar...[etc]
---
Linux:
Movie playback is not yet implemented. Movie playback will work
for some movies (including the sample(s)) if JMF is added to
the classpath. It is sufficient to add jmf.jar (cross-platform)
version to the classpath.
Native playback is planned for Linux but development has not yet started.
--------------------------------------------------------------------
Using FMJ with JMF.
There are many cases where the plug-ins and other functionality of FMJ/JMF can be used with the other.
This can be useful to work around bugs and missing functionality in either.
There are 2 ways to do this:
1. Using FMJ alongside JMF (JMF is ahead in the classpath - fmj-nojmf.jar is intended for this)
2. Using JMF alongside FMJ (FMJ is ahead in the classpath - JMF cannot be installed).
One example is using lti-civil capture devices with JMF.
lti-civil does not contain any JMF-related code. So to use lti-civil with JMF you need at least part of FMJ (the civil DataSource and any classes it requires). The easiest way to do this is to put JMF ahead of FMJ in the classpath (which is generally true anyway if JMF is actually installed), and then add "net.sf.fmj" to your protocol prefix list in the JMF registry. You can also add this at runtime by doing something like:
final Vector v = PackageManager.getProtocolPrefixList();
if (!v.contains("net.sf.fmj"))
v.add("net.sf.fmj");
PackageManager.setProtocolPrefixList(v);
This will allow you to create a player/processor using "civil:/0" as the URL.
--------------------------------------------------------------------
Directories.
Not all directories are in the release, some are only in CVS.
Directory Description
src Main source folder for FMJ
src.capture JavaSound and LTI-CIVIL capture DataSources
src.ejmf Source borrowed and adapted from the EJMF book (with permission)
src.sip-communicator Source borrowed from the SIP-Communicator project (speex and ilbc RTP codecs)
src.examples.rtp
src.ffmpeg-java Demux that uses the ffmpeg-java subproject
src.theora-java Demuxes that use the theora-java subproject
src.rtp RTP manager implementation
src.stubs Stubbed implementations of sun/ibm internal JMF classes that can be useful to get JMF-dependent projects to compile
src.ds DirectShow Player
src.utils LTI utils classes
src.examples.ejmf Examples from the EJMF book
src.examples.jmf Examples from the JMF website
src.examples.jmf.guide Examples from the JMF guide
src.experimental Experimental FMJ source. Not used yet.
src.qt Quicktime (QTJ) Player
src.qtfile MOV file atom parsing (from Chris Adamson). Not used.
src.sunibm.replace Replacements for sun/ibm internal JMF classes that are implemented by extending the FMJ equivalents.
Not generally needed unless you want to play classpath tricks. Needed to compile/run unit tests.
src.sunibm.base Implementations of internal sun/ibm base classes that are often used (unfortunately) by many JMF-based
projects.
src.test Unit tests
src.apps Assorted applications, including
- FmjMediaServer: fi.iki.elonen.nanohttpd.NanoHTTPD, and media server which can be used to stream media, transcoded media, and live captured media.
- FmjPlay: a simple barebones media player (much simpler than FMJStudio)
- FmjTranscode: a transcoder application
- FmjApplet: a media applet
src.fmjstudio FmjStudio and FmjRegistry applications
src.t4l Source from com.t4l, contributed by Jeremy Wood
applet.example example of how to use FMJ in an applet
build build output directory
lib jars that FMJ uses or depends on
nativelib native libraries (JNI) that FMJ uses
nbproject NetBeans project. Note that you have to replace build.xml with build.netbeans.xml to use NetBeans
samplemedia Sample media files
sh shell/.bat files to launch FMJ studio and the registry editor.
website old website
website2 old website
website3 website
webstart.example Example of launching FMJ studio with Java webstart (not working yet).
--------------------------------------------------------------------
Joining the development team
- Download the FMJ release, play around with FMJStudio
- Get a sourceforge user account.
- Get the FMJ source code from CVS.
- Subscribe to the fmj-devel mailing list
- Review some of the documents and links on the FMJ website, particularly those pertaining to roadmap and status.
- Do you have a particular project that you would like to get working with FMJ, or particular goals to achieve?
This is a good place to start. See if it works with FMJ (without JMF), and perhaps report your findings to
the fmj-devel mailing list, and the team will likely have ideas on where to start.
- Do you have any particular area of interest or expertise? This is also very relevant, as there are many
different tasks to be done, all the way from native library wrapping, porting codecs from C, to GUI work,
testing, optimization and improvement across the board. For example, are you interested in playback, transcoding, streaming,
applets, RTP, live audio and video capture? Do you have experience with image rendering, javasound, general Java
architecture and design, media formats, ffmpeg, directshow, quicktime, gstreamer, theora, native coding, JNI, JNA,
etc, etc, etc... Please don't be intimidated by the long list of complicated technologies that FMJ integrates with,
nobody on the team is an expert in all of these. There is an optimal niche for everyone, regardless of
breadth and depth of experience. And even without any particular multimedia experience, there are interesting tasks to be done.
--------------------------------------------------------------------
Contributors
Note: not everyone who has contributed is included here. If you
have contributed and have been overlooked here, don't take it
personally, just let the team know and you'll be added.
Thanks also to others for submitting patches, bug reports, and
feedback.
Thanks also to other open-source projects, books, and examples from
which source has been borrowed/adapted, like SIP-Communicator,
EJMF, and others.
Name: Ken Larson (kenlars99)
Role: Developer
Areas: Project leader
Location: USA and Germany
Name: Warren Bloomer (stormboy)
Role: Developer
Areas: FMJStudio, FMJRegistry, audio/video renderers.
Location: Australia
Name: Andrew Rowley (zzalsar4)
Role: Developer
Areas: RTP
Location: England
Name: Christian Vincenot (sgt_sagara)
Role: Developer
Areas: RTP
Location: France
Name: Andrey Kuprianov (andreyvk)
Role: Web designer and administrator
Location: Russia and Thailand
Name: Stephan Goetter (turms)
Role: Developer
Areas: ffmpeg-java
Location: Germany
Name: Jeremy Wood
Role: Developer
Areas: JPEG encoding/decoding, buffer/image conversion, optimization
Name: Damian Minkov
Role: Developer (SIP-Communicator)
Areas: SIP-Communicator RTP Codecs
--------------------------------------------------------------------
Supported Formats
Native wrapper playback:
Wrapper for OS Formats
DirectShow Windows Pretty much anything!
Quicktime for Java Mac OS X Pretty much anything!
GStreamer Any Pretty much anything!
Native wrapper processing an playback:
Wrapper for OS Formats
ffmpeg Any Pretty much anything!
Pure Java processing and playback:
Container Decode, Encode
Format
RTP
JPEG/RTP D,E
ULAW/RTP D,E
ALAW/RTP D,E
SPEEX/RTP D,E
ILBC/RTP D,E
WAV
LINEAR (PCM) D,E
AU
LINEAR (PCM) D,E
ULAW D,?
AIFF
LINEAR (PCM) D,E
multpart/x-mixed-replace
JPEG D,E
GIF D,E (encoding only with Java 6+)
PNG D,E
ogg
VORBIS D
THEORA D
mp3
mp3 D
Assorted pure Java codecs:
Audio resampling
Video scaling
Capture:
Type Technology OS
Audio JavaSound All
Video LTI-CIVIL,DirectShow Windows
LTI-CIVIL,V4L2 Linux
LTI-CIVIL,Quicktime for Java Mac OS X
Note: FMJ and JMF can use each others' plugins, assuming the classpath and
registry is set appropriately.
For JMF supported formats, see:
http://java.sun.com/products/java-media/jmf/2.1.1/formats.html