DirectShow - Java  Video Streaming

Is there any available information on how to stream a video across a newtwork through dsj without JMF?
Thanks a lot

The demo does that and it is described in the javadocs for WMNetSink.
nils
P.S. Please use the DirectShow<>java thread for questions on dsj

Similar Messages

  • Java Video Streaming

    Hello
    I try to get an overview of what's possible according to video streaming in sun's wonderland. The goal is to stream prerecorded videos, stored on a webserver (not necessarily on the same machine like the wl-server ) into our wonderland embedded swing application.
    My first investigation shows me, that I have the following possibilities to stream videos in Java:
    - Java Media Framework (JMF)
    - JVLC (VideoLAN Java API)
    - Quicktime Streaming API (only quicktime movies)
    -> http://www.onjava.com/pub/a/onjava/2005/01/12/strmng_qtj.html
    - Red5 Java Client (only flash movies):
    -> http://www.actionscript.org/resources/articles/617/1/Streaming-and-database-connection-with-red5-media-server/Page1.html
    - Mplayer Java Client:
    -> http://beradrian.wordpress.com/2008/01/30/jmplayer/
    So what do you suggest me? What's the best way? Are there any code-examples for streaming videos from a webserver to a local java-client using JMF?
    Thanks for your help.
    Kind regards,
    Peter
    Edited by: blood_on_ice on Mar 23, 2009 12:44 AM

    Thanks for your answer...
    >
    The "best" way? Considering you're using a Swing application, your best bet is probably going to be JMF. JavaFX has support for playing videos, but I'm not sure if they have support for RTP streams or progressive downloads or anything.
    If you wanted to go the extra mile, you could look into embedding a Silverlight or Flash player into your Swing application. Silverlight is pretty cool because it's HD capable...>
    Yes I have to develop the video streaming in a swing non-top-level Swing JComponent (such as a JPanel) because this is a wonderland restriction...I don't know JavaFX yet, is it possible to build a JavaFX app inside such a non-top-level Swing component? Embedding silverlight in a java-app isn't a really good idea I think...
    Further recherches shows me, that I need on-demand video streaming with the ability to start, stop, play, pause etc. the video which is stored for example on a webserver. This is possible throught RTSP or HTTP according to: [http://www.remlab.net/op/vod.shtml|http://www.remlab.net/op/vod.shtml] ...when I use rtsp, I need a streaming-server like vlc, for http i just need my video stored on a webserver.
    So what do I have for possibilities to stream such a video in a java client (non-top-level Swing JComponent) with RTSP or HTTP?
    I've tried following rtp-code-example: [http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/solutions/AVReceive.html|http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/solutions/AVReceive.html]
    but it didn't work...I started my vlc-streaming server this way:
    cvlc -vvv movie.mpg --sout '#rtp{dst=192.168.1.33,port=1234,sdp=http://localhost:8080}'but the output of the rtp-code-example shows the following:
    run:
    - Open RTP session for: addr: 127.0.0.1 port: 8080 ttl: 1
      - Waiting for RTP data to arrive...
      - Waiting for RTP data to arrive...
      - Waiting for RTP data to arrive...
      - Waiting for RTP data to arrive...
      - Waiting for RTP data to arrive...
    With vlc http://127.0.0.1:8080 i receive the stream...
    But I couldn't find an example of how I can get an rtsp-stream or a http-stream in jmf...
    Thanks for your help.
    Kind regards,
    Peter
    Edited by: blood_on_ice on Mar 23, 2009 8:59 AM
    Edited by: blood_on_ice on Mar 23, 2009 9:00 AM

  • Finding a java video streaming player

    I recently use FreePastry to implement a p2p video streaming system.
    But now i have a new challege, which bother me several days.
    In Splitstream, which uses Byte[] to send the data to other peer.
    I want find a java video player. It would be best to receive Byte[] as input.
    I try JMF, but it use RTP as the input.
    Is there any other video players suited about my case.

    There is a function in LiveStream.java called read. Read passes in a buffer object. The goal is to write all of the data you have available into the buffer object.
    What you want to do is something along the lines of the following pseudocode...
    public void read(Buffer buffer) throws IOException {
        synchronized (this) {
            /* Get the data */
            byte[] data = FunctionThatGetsByteArrayFromTheNetwork();
            /* Write the data to the buffer object */
            buffer.setData(data);
    }As for using the PushBufferDataSource, you just create one like you would a normal class (just use the new operator) and give it to a processor or a player like you would a normal data source.
    You need to include the DataSource.java code like the example does, modify it to use your modified LiveStream.java (you'll probably change the names of classes, so update the DataSource.java class to reflect those changes) and then just use it to create your DataSource.
        /* From DataSource.java */
        DataSource ds = new DataSource();
        /* Normal way of doing this */
        Processor p = Manager.createProcessor(ds);

  • Really need Help! - Java Video Streaming

    Hi,
    I bought a 'Creative' web-cam today and I want to be able to display real-time video in a Java applet. Could someone please help me to do this.
    What classes do I need to capture the video, and use a server to either broadcast or stream the video to a client( applet ).
    I have JMF 1.2.1 installed with jdk1.3.1
    I'm kindof new to Java and really need to know where to start.
    F

    You should use JMF 2.0 or above version because they provide capturing ability.And also see the page. http://java.sun.com/products/java-media/jmf/2.1.1/solutions/
    I think you will find some useful material on this page.

  • Video stream java code

    hey
    i am trying to find how to obtian a video stream from a webcam using java code
    if u can help me please.

    ars_03 wrote:
    i am trying to find how to obtian a video stream from a webcam using java code
    if u can help me please.General questions usually stimulate general answers, such as "google it". If you truly want help, you will put more effort into your question such as answering these questions:
    * What do you know already about doing this?
    * What sources have you looked up and studied?
    * Of this, what specifically do you not understand?
    * What is the current state of your program?
    * Is it running? compiling?
    * Are there errors? if so, post them.
    etc...
    The bottom line here is usually the more thought and effort you put into creating your question, the better your chances are of a volunteer here taking the time and effort to consider it and give you a helpful answer. You would benefit greatly by reading this link (one I try to re-study at least every other week as it helps me):
    [http://www.catb.org/~esr/faqs/smart-questions.html]

  • Storing that Video stream into our local disk in java

    Hi frendz,
    I want to know how to, Connect to a remote online webcam and store that Video stream into our local disk.
    Any java interface tools are there, or can we use java api to do so.
    Anybody Please share your valuable suggestions.
    thanx,
    [email protected]

    Hi frendz,
    I want to know how to, Connect to a remote online
    webcam and store that Video stream into our local
    disk. The jennicam is no longer online.

  • Java Playerless Streamed video

    Hi all,
    We are not java developers but content providers and we would like to use java technology in use for video streaming re providing playerless video to our clients via IE browswer or email.
    Is it possible and where do you start?
    Would anybody be familiar with this technology?...could help us testing some examples for clients?
    Any response is welcome.
    We are based in UK

    Try the Java Media framework
    http://java.sun.com/products/java-media/jmf/2.1.1/

  • CTD bug in simple video streaming applet.

    I'm trying to write a simple applet to use JMF to allow an end-user to view a video stream that's being served up by VLC. It doesn't have to look immensely pretty (in fact, streamlined is what I want most). I swiped some code from the jicyshout project (http://jicyshout.sourceforge.net) which handles streaming MP3s, and borrowed a framework for an applet from one of Sun's example applets for the JMF.
    Here's my code so far:
    ** begin file SimpleVideoDataSource.java **
    import java.lang.String;
    import java.net.*;
    import java.io.*;
    import java.util.Properties;
    import javax.media.*;
    import javax.media.protocol.*;
    /* The SeekableStream and DataSource tweaks are based on the code from
    * jicyshout (jicyshout.sourcefourge.net), which was written by Chris Adamson.
    * The code was simplified (no need for mp3 metadata here), cleaned up, then
    * extended for our puposes.
    * This is a DataSource using a SeekableStream suitable for
    * streaming video using the default parser supplied by JMF.
    public class SimpleVideoDataSource extends PullDataSource {
    protected MediaLocator myML;
    protected SeekableInputStream[] seekStreams;
    protected URLConnection urlConnection;
    // Constructor (trivial).
    public SimpleVideoDataSource (MediaLocator ml) throws MalformedURLException {
    super ();
    myML = ml;
    URL url = ml.getURL();
    public void connect () throws IOException {
    try {
    URL url = myML.getURL();
    urlConnection = url.openConnection();
    // Make the stream seekable, so that the JMF parser can try to parse it (instead
    // of throwing up).
    InputStream videoStream = urlConnection.getInputStream();
    seekStreams = new SeekableInputStream[1];
    seekStreams[0] = new SeekableInputStream(videoStream);
    } catch (MalformedURLException murle) {
    throw new IOException ("Malformed URL: " + murle.getMessage());
    } catch (ArrayIndexOutOfBoundsException aioobe) {
    fatalError("Array Index OOB: " + aioobe);
    // Closes up InputStream.
    public void disconnect () {
    try {
    seekStreams[0].close();
    } catch (IOException ioe) {
    System.out.println ("Can't close stream. Ew?");
    ioe.printStackTrace();
    // Returns just what it says.
    public String getContentType () {
    return "video.mpeg";
    // Does nothing, since this is a stream pulled from PullSourceStream.
    public void start () {
    // Ditto.
    public void stop () {
    // Returns a one-member array with the SeekableInputStream.
    public PullSourceStream[] getStreams () {
    try {
    // **** This seems to be the problem. ****
    if (seekStreams != null) {
    return seekStreams;
    } else {
    fatalError("sourceStreams was null! Bad kitty!");
    return seekStreams;
    } catch (Exception e) {
    fatalError("Error in getStreams(): " + e);
    return seekStreams;
    // Duration abstract stuff. Since this is a theoretically endless stream...
    public Time getDuration () {
    return DataSource.DURATION_UNBOUNDED;
    // Controls abstract stuff. No controls supported here!
    public Object getControl (String controlName) {
    return null;
    public Object[] getControls () {
    return null;
    void fatalError (String deathKnell) {
    System.err.println(":[ Fatal Error ]: - " + deathKnell);
    throw new Error(deathKnell);
    ** end file SimpleVideoDataSource.java **
    ** begin file SeekableInputStream.java **
    import java.lang.String;
    import java.net.*;
    import java.io.*;
    import java.util.Properties;
    import javax.media.*;
    import javax.media.protocol.*;
    /* The SeekableStream and DataSource tweaks are based on the code from
    * jicyshout (jicyshout.sourcefourge.net), which was written by Chris Adamson.
    * The code was simplified (no need for mp3 metadata here), cleaned up, then
    * extended for our puposes.
    /* This is an implementation of a SeekableStream which extends a
    * BufferedInputStream to basically fake JMF into thinking that
    * the stream is seekable, when in fact it's not. Basically, this
    * will keep JMF from puking over something it expects but can't
    * actually get.
    public class SeekableInputStream extends BufferedInputStream implements PullSourceStream, Seekable {
    protected int tellPoint;
    public final static int MAX_MARK = 131072; // Give JMF 128k of data to "play" with.
    protected ContentDescriptor unknownCD;
    // Constructor. Effectively trivial.
    public SeekableInputStream (InputStream in) {
    super (in, MAX_MARK);
    tellPoint = 0;
    mark (MAX_MARK);
    unknownCD = new ContentDescriptor ("unknown");
    // Specified size constructor.
    public SeekableInputStream (InputStream in, int size) {
    super (in, Math.max(size, MAX_MARK));
    tellPoint = 0;
    mark(Math.max(size, MAX_MARK));
    unknownCD = new ContentDescriptor ("unknown");
    // Reads a byte and increments tellPoint.
    public int read () throws IOException {
    int readByte = super.read();
    tellPoint++;
    return readByte;
    // Reads bytes (specified by PullSourceStream).
    public int read (byte[] buf, int off, int len) throws IOException {
    int bytesRead = super.read (buf, off, len);
    tellPoint += bytesRead;
    return bytesRead;
    public int read (byte[] buf) throws IOException {
    int bytesRead = super.read (buf);
    tellPoint += bytesRead;
    return bytesRead;
    // Returns true if in.available() <= 0 (that is, if there are no bytes to
    // read without blocking or end-of-stream).
    public boolean willReadBlock () {
    try {
    return (in.available() <= 0);
    } catch (IOException ioe) {
    // Stick a fork in it...
    return true;
    // Resets the tellPoint to 0 (meaningless after you've read one buffer length).
    public void reset () throws IOException {
    super.reset();
    tellPoint = 0;
    // Skips bytes as expected.
    public long skip (long n) throws IOException {
    long skipped = super.skip(n);
    tellPoint += skipped;
    return skipped;
    // Trivial.
    public void mark (int readLimit) {
    super.mark (readLimit);
    // Returns the "unknown" ContentDescriptor.
    public ContentDescriptor getContentDescriptor () {
    return unknownCD;
    // Lengths? We don't need no stinkin' lengths!
    public long getContentLength () {
    return SourceStream.LENGTH_UNKNOWN;
    // Theoretically, this is always false.
    public boolean endOfStream () {
    return false;
    // We don't provide any controls, either.
    public Object getControl (String controlName) {
    return null;
    public Object[] getControls () {
    return null;
    // Not really... but...
    public boolean isRandomAccess () {
    return true;
    // This only works for the first bits of the stream, while JMF is attempting
    // to figure out what the stream is. If it tries to seek after that, bad
    // things are going to happen (invalid-mark exception).
    public long seek (long where) {
    try {
    reset();
    mark(MAX_MARK);
    skip(where);
    } catch (IOException ioe) {
    ioe.printStackTrace();
    return tell();
    // Tells where in the stream we are, adjusted for seeks, resets, skips, etc.
    public long tell () {
    return tellPoint;
    void fatalError (String deathKnell) {
    System.err.println(":[ Fatal Error ]: - " + deathKnell);
    throw new Error(deathKnell);
    ** end file SeekableInputStream.java **
    ** begin file StreamingViewerApplet.java **
    * This Java Applet will take a streaming video passed to it via the applet
    * command in the embedded object and attempt to play it. No fuss, no muss.
    * Based on the SimplePlayerApplet from Sun, and uses a modified version of
    * jicyshout's (jicyshout.sourceforge.net) tweaks to get JMF to play streams.
    * Use it like this:
    * <!-- Sample HTML
    * <APPLET CODE="StreamingViewerApplet.class" WIDTH="320" HEIGHT="240">
    * <PARAM NAME="code" VALUE="StreamingViewerApplet.class">
    * <PARAM NAME="type" VALUE="application/x-java-applet;version=1.1">
    * <PARAM NAME="streamwidth" VALUE="width (defaults to 320, but will resize as per video size)">
    * <PARAM NAME="streamheight" VALUE="height (defaults to 240, but will resize as per video size)">
    * <PARAM NAME="stream" VALUE="insert://your.stream.address.and:port/here/">
    * </APPLET>
    * -->
    import java.applet.Applet;
    import java.awt.*;
    import java.awt.event.*;
    import java.lang.String;
    import java.lang.ArrayIndexOutOfBoundsException;
    import java.net.URL;
    import java.net.MalformedURLException;
    import java.net.*;
    import java.io.*;
    import java.io.IOException;
    import java.util.Properties;
    import javax.media.*;
    import javax.media.protocol.*;
    public class StreamingViewerApplet extends Applet implements ControllerListener {
    Player player = null;
    Component visualComponent = null;
    SimpleVideoDataSource dataSource;
    URL url;
    MediaLocator ml;
    Panel panel = null;
    int width = 0;
    static int DEFAULT_VIDEO_WIDTH = 320;
    int height = 0;
    static int DEFAULT_VIDEO_HEIGHT = 240;
    String readParameter = null;
    // Initialize applet, read parameters, create media player.
    public void init () {
    try {
    setLayout(null);
    setBackground(Color.white);
    panel = new Panel();
    panel.setLayout(null);
    add(panel);
    // Attempt to read width from applet parameters. If not given, use default.
    if ((readParameter = getParameter("streamwidth")) == null) {
    width = DEFAULT_VIDEO_WIDTH;
    } else {
    width = Integer.parseInt(readParameter);
    // Ditto for height.
    if ((readParameter = getParameter("streamheight")) == null) {
    height = DEFAULT_VIDEO_HEIGHT;
    } else {
    height = Integer.parseInt(readParameter);
    panel.setBounds(0, 0, width, height);
    // Unfortunately, this we can't default.
    if ((readParameter = getParameter("stream")) == null) {
    fatalError("You must provide a stream parameter!");
    try {
    url = new URL(readParameter);
    ml = new MediaLocator(url);
    dataSource = new SimpleVideoDataSource(ml);
    } catch (MalformedURLException murle) {
    fatalError("Malformed URL Exception: " + murle);
    try {
    dataSource.connect();
    player = Manager.createPlayer(dataSource);
    } catch (IOException ioe) {
    fatalError("IO Exception: " + ioe);
    } catch (NoPlayerException npe) {
    fatalError("No Player Exception: " + npe);
    if (player != null) {
    player.addControllerListener(this);
    } else {
    fatalError("Failed to init() player!");
    } catch (Exception e) {
    fatalError("Error opening player. Details: " + e);
    // Start stream playback. This function is called the
    // first time that the applet runs, and every time the user
    // re-enters the page.
    public void start () {
    try {
    if (player != null) {
    player.realize();
    while (player.getState() != Controller.Realized) {
    Thread.sleep(100);
    // Crashes... here?
    player.start();
    } catch (Exception e) {
    fatalError("Exception thrown: " + e);
    public void stop () {
    if (player != null) {
    player.stop();
    player.deallocate();
    } else {
    fatalError("stop() called on a null player!");
    public void destroy () {
    // player.close();
    // This controllerUpdate function is defined to implement a ControllerListener
    // interface. It will be called whenever there is a media event.
    public synchronized void controllerUpdate(ControllerEvent event) {
    // If the player is dead, just leave.
    if (player == null)
    return;
    // When the player is Realized, get the visual component and add it to the Applet.
    if (event instanceof RealizeCompleteEvent) {
    if (visualComponent == null) {
    if ((visualComponent = player.getVisualComponent()) != null) {
    panel.add(visualComponent);
    Dimension videoSize = visualComponent.getPreferredSize();
    width = videoSize.width;
    height = videoSize.height;
    visualComponent.setBounds(0, 0, width, height);
    } else if (event instanceof CachingControlEvent) {
    // With streaming, this doesn't really matter much, does it?
    // Without, a progress bar of some sort would be appropriate.
    } else if (event instanceof EndOfMediaEvent) {
    // We should never see this... but...
    player.stop();
    fatalError("EndOfMediaEvent reached for streaming media. ewe ewe tea eff?");
    } else if (event instanceof ControllerErrorEvent) {
    player = null;
    fatalError(((ControllerErrorEvent)event).getMessage());
    } else if (event instanceof ControllerClosedEvent) {
    panel.removeAll();
    void fatalError (String deathKnell) {
    System.err.println(":[ Fatal Error ]: - " + deathKnell);
    throw new Error(deathKnell);
    ** end file StreamingViewerApplet.java **
    Now, I'm still new to the JMF, so this might be obvious to some of you... but it's exploding on me, and crashing to desktop (both in IE and Firefox) with some very fun errors:
    # An unexpected error has been detected by HotSpot Virtual Machine:
    # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x21217921, pid=3200, tid=3160
    # Java VM: Java HotSpot(TM) Client VM (1.5.0_06-b05 mixed mode, sharing)
    # Problematic frame:
    # C 0x21217921
    --------------- T H R E A D ---------------
    Current thread (0x058f7280): JavaThread "JMF thread: com.sun.media.amovie.AMController@506411[ com.sun.media.amovie.AMController@506411 ] ( realizeThread)" [_thread_in_native, id=3160]
    siginfo: ExceptionCode=0xc0000005, writing address 0x034e6360
    (plenty more here, I can post the rest if necessary)
    The problem seems to be coming from the "return seekStreams" statement in the first file; when I have execution aborted before that (with a fatalError call), it doesn't crash.
    Any tips/hints/suggestions?

    You should write your own Applet, where you can easily get the visual component (getVisualComponent())and show it directly in your Applet (you call it "embedded"). As far as I know, all examples (AVReceive* etc.) use the component which opens a new window.
    Best regards from Germany,
    r.v.

  • How to acess a PTC camera video stream from DVR card/PCI-slot

    I have a security camera which i connected to PC using PCISLOT/DVR Card.
    My requirement is to get the video stream from this camera and show in my program using java
    if it is possible using java and how to do this.
    Thanks in advance

    Believe it or not, this isn't really a Java question. You should begin by looking around your camera manufacturer's website for Java APIs, then their forums if they have any, contacting support and so on. Hoping that a general Java community will know exactly what is required here is a bit pie-in-the-sky.

  • Saving video stream from webcam periodically!!!

    Hi there, I want to catch every 1 minute video stream from the webcam, or video file, and save it into separate files. Of course I woudl like to have possibility to save many streams simultaneously. Any idea?
    Best regards

    Hi,
    I want to do the same thing ... I was able to stream audio through the socket but could not stream video.
    I posted my question at http://forum.java.sun.com/thread.jspa?threadID=674676&tstart=15
    and presented a sketch of my implementation design. But until now no one has answered my question.
    This is how you should hook up the components on the transmitter side
    Webcam --> Processor --> Custom DataSink --> PushBufferStream --> PushBufferHandler --> Socket --> Network.
    You can implement the transferData() method of the PushBufferHandler to write to a socket.
    And on the Receiver side the components should be hooked up like this
    Network --> Socket --> PullBufferStream --> custom DataSource --> Player
    Now as I mentioned in
    http://forum.java.sun.com/thread.jspa?threadID=674676&tstart=15
    the audio works fine but the video does not. The video does not render on the receiver side.
    Note: I tried TCP sockets with audio and it is terrible (not practical at all) so I reverted to UDP datagrams and the result was better than I expected. I didn't take care of the ordering of received packet at the receiver but it still worked fine.
    I am still looking waiting for some help in why video is not rendering and how can I sovle this problem.
    I am workning on a project and time is running out.
    Any help?
    -Adel

  • All video streaming has continuous pixelation/macroblocking issues

    On youtube, dailymotion, vimeo, etc.  (all internet video streaming sites)  the video becomes pixelated and I get macroblocking.  It appears for a few seconds, then it goes away, then a few seconds later it comes back.  It does this continuously off and on.  This happened before and I couldn't find a solution so I re-installed Windows 7 and then the problem went away.  But only 3 weeks into the new re-boot and the problem has resurfaced.  I have no idea what happened or how to fix it.  Please help!!  I can give you the specs for my PC and let you know whatever else is needed to solve this problem.  My PC skills are not that advanced, but I can follow directions very well.  This problem is starting to really piss me off.  When I download a youtube video, the problem is not there when I watch it on VLC media player.  The problem is only present when I am streaming it from the internet.  This problem just "appeared".  It was not there on a clean re-install.  I  don't know how it re-surfaced again.  I've searched through other forums an I cannot find an answer anywhere!  I need to know the source of the problem and I thought it might be Adobe Flash, but I am not sure.  When the videos become pixelated, it looks like this (I took a screen shot):

    My browser is Firefox version 18.0 (it is up-to-date) and I have DownloadHelper version 4.9.13 and Adblock Plus version 2.2.1 as add-ons.  My Adobe flash player version is 11.5.502.146.  My operating system is Windows 7 Professional (64-bit).  The HTML5 video worked perfectly fine.  No problems with that one.  The Non-HTML5 video showed the same problems I keep running into.  Here is a cropped screenshot of it:
    Thank you.  I really appreciate the help.  So what is the next step???  The HTML5 video had no problems and worked perfectly fine.  I figured it would just be easier to show my entire system information (motherboard, processor, video card etc.), so here is the output from the DirectX Diagnotic Tool regarding my system information:
    System Information
    Time of this report: 1/14/2013, 20:36:43
           Machine name: KYLE-PC
       Operating System: Windows 7 Professional 64-bit (6.1, Build 7601) Service Pack 1 (7601.win7sp1_gdr.120830-0333)
               Language: English (Regional Setting: English)
    System Manufacturer: Gigabyte Technology Co., Ltd.
           System Model: GA-890GPA-UD3H
                   BIOS: Award Modular BIOS v6.00PG
              Processor: AMD Phenom(tm) II X4 970 Processor (4 CPUs), ~3.5GHz
                 Memory: 4096MB RAM
    Available OS Memory: 3582MB RAM
              Page File: 1977MB used, 5183MB available
            Windows Dir: C:\Windows
        DirectX Version: DirectX 11
    DX Setup Parameters: Not found
       User DPI Setting: Using System DPI
    System DPI Setting: 96 DPI (100 percent)
        DWM DPI Scaling: Disabled
         DxDiag Version: 6.01.7601.17514 32bit Unicode
    DxDiag Notes
          Display Tab 1: No problems found.
            Sound Tab 1: No problems found.
            Sound Tab 2: No problems found.
            Sound Tab 3: No problems found.
              Input Tab: No problems found.
    DirectX Debug Levels
    Direct3D:    0/4 (retail)
    DirectDraw:  0/4 (retail)
    DirectInput: 0/5 (retail)
    DirectMusic: 0/5 (retail)
    DirectPlay:  0/9 (retail)
    DirectSound: 0/5 (retail)
    DirectShow:  0/6 (retail)
    Display Devices
              Card name: ATI Radeon HD 4290
           Manufacturer: ATI Technologies Inc.
              Chip type: ATI display adapter (0x9714)
               DAC type: Internal DAC(400MHz)
             Device Key: Enum\PCI\VEN_1002&DEV_9714&SUBSYS_D0001458&REV_00
         Display Memory: 2161 MB
       Dedicated Memory: 627 MB
          Shared Memory: 1534 MB
           Current Mode: 1360 x 768 (32 bit) (60Hz)
           Monitor Name: Generic PnP Monitor
          Monitor Model: SAMSUNG
             Monitor Id: SAM0505
            Native Mode: 1360 x 768(p) (60.015Hz)
            Output Type: HDMI
            Driver Name: atiu9p64.dll,aticfx64.dll,atiu9pag,aticfx32,atiumd64.dll,atidxx64.dll,atiumdag,atidxx32,a tiumdva,atiumd6a.cap,atitmm64.dll
    Driver File Version: 8.14.0001.6105 (English)
         Driver Version: 8.723.0.0
            DDI Version: 10.1
           Driver Model: WDDM 1.1
      Driver Attributes: Final Retail
       Driver Date/Size: 4/6/2010 20:22:38, 28160 bytes
            WHQL Logo'd: Yes
        WHQL Date Stamp:
      Device Identifier: {D7B71EE2-D454-11CF-3160-01F0A1C2C535}
              Vendor ID: 0x1002
              Device ID: 0x9714
              SubSys ID: 0xD0001458
            Revision ID: 0x0000
    Driver Strong Name: oem2.inf:ATI.Mfg.NTamd64.6.1:ati2mtag_RS880:8.723.0.0:pci\ven_1002&dev_9714
         Rank Of Driver: 00E62001
            Video Accel: ModeMPEG2_A ModeMPEG2_C
       Deinterlace Caps: {6E8329FF-B642-418B-BCF0-BCB6591E255F}: Format(In/Out)=(YUY2,YUY2) Frames(Prev/Fwd/Back)=(0,0,1) Caps=VideoProcess_YUV2RGB VideoProcess_StretchX VideoProcess_StretchY DeinterlaceTech_PixelAdaptive
                         {335AA36E-7884-43A4-9C91-7F87FAF3E37E}: Format(In/Out)=(YUY2,YUY2) Frames(Prev/Fwd/Back)=(0,0,0) Caps=VideoProcess_YUV2RGB VideoProcess_StretchX VideoProcess_StretchY DeinterlaceTech_BOBVerticalStretch
                         {5A54A0C9-C7EC-4BD9-8EDE-F3C75DC4393B}: Format(In/Out)=(YUY2,YUY2) Frames(Prev/Fwd/Back)=(0,0,0) Caps=VideoProcess_YUV2RGB VideoProcess_StretchX VideoProcess_StretchY
                         {6E8329FF-B642-418B-BCF0-BCB6591E255F}: Format(In/Out)=(UYVY,UYVY) Frames(Prev/Fwd/Back)=(0,0,1) Caps=VideoProcess_YUV2RGB VideoProcess_StretchX VideoProcess_StretchY DeinterlaceTech_PixelAdaptive
                         {335AA36E-7884-43A4-9C91-7F87FAF3E37E}: Format(In/Out)=(UYVY,UYVY) Frames(Prev/Fwd/Back)=(0,0,0) Caps=VideoProcess_YUV2RGB VideoProcess_StretchX VideoProcess_StretchY DeinterlaceTech_BOBVerticalStretch
                         {5A54A0C9-C7EC-4BD9-8EDE-F3C75DC4393B}: Format(In/Out)=(UYVY,UYVY) Frames(Prev/Fwd/Back)=(0,0,0) Caps=VideoProcess_YUV2RGB VideoProcess_StretchX VideoProcess_StretchY
                         {5A54A0C9-C7EC-4BD9-8EDE-F3C75DC4393B}: Format(In/Out)=(YV12,0x32315659) Frames(Prev/Fwd/Back)=(0,0,0) Caps=
                         {3C5323C1-6FB7-44F5-9081-056BF2EE449D}: Format(In/Out)=(NV12,0x3231564e) Frames(Prev/Fwd/Back)=(0,0,2) Caps=VideoProcess_YUV2RGB VideoProcess_StretchX VideoProcess_StretchY DeinterlaceTech_PixelAdaptive
                         {552C0DAD-CCBC-420B-83C8-74943CF9F1A6}: Format(In/Out)=(NV12,0x3231564e) Frames(Prev/Fwd/Back)=(0,0,2) Caps=VideoProcess_YUV2RGB VideoProcess_StretchX VideoProcess_StretchY DeinterlaceTech_PixelAdaptive
                         {6E8329FF-B642-418B-BCF0-BCB6591E255F}: Format(In/Out)=(NV12,0x3231564e) Frames(Prev/Fwd/Back)=(0,0,1) Caps=VideoProcess_YUV2RGB VideoProcess_StretchX VideoProcess_StretchY DeinterlaceTech_PixelAdaptive
                         {335AA36E-7884-43A4-9C91-7F87FAF3E37E}: Format(In/Out)=(NV12,0x3231564e) Frames(Prev/Fwd/Back)=(0,0,0) Caps=VideoProcess_YUV2RGB VideoProcess_StretchX VideoProcess_StretchY DeinterlaceTech_BOBVerticalStretch
                         {5A54A0C9-C7EC-4BD9-8EDE-F3C75DC4393B}: Format(In/Out)=(NV12,0x3231564e) Frames(Prev/Fwd/Back)=(0,0,0) Caps=VideoProcess_YUV2RGB VideoProcess_StretchX VideoProcess_StretchY
                         {5A54A0C9-C7EC-4BD9-8EDE-F3C75DC4393B}: Format(In/Out)=(IMC1,UNKNOWN) Frames(Prev/Fwd/Back)=(0,0,0) Caps=
                         {5A54A0C9-C7EC-4BD9-8EDE-F3C75DC4393B}: Format(In/Out)=(IMC2,UNKNOWN) Frames(Prev/Fwd/Back)=(0,0,0) Caps=
                         {5A54A0C9-C7EC-4BD9-8EDE-F3C75DC4393B}: Format(In/Out)=(IMC3,UNKNOWN) Frames(Prev/Fwd/Back)=(0,0,0) Caps=
                         {5A54A0C9-C7EC-4BD9-8EDE-F3C75DC4393B}: Format(In/Out)=(IMC4,UNKNOWN) Frames(Prev/Fwd/Back)=(0,0,0) Caps=
                         {5A54A0C9-C7EC-4BD9-8EDE-F3C75DC4393B}: Format(In/Out)=(S340,UNKNOWN) Frames(Prev/Fwd/Back)=(0,0,0) Caps=
                         {5A54A0C9-C7EC-4BD9-8EDE-F3C75DC4393B}: Format(In/Out)=(S342,UNKNOWN) Frames(Prev/Fwd/Back)=(0,0,0) Caps=
           D3D9 Overlay: Not Supported
                DXVA-HD: Not Supported
           DDraw Status: Enabled
             D3D Status: Enabled
             AGP Status: Enabled
    Sound Devices
                Description: Realtek HDMI Output (ATI HDMI Audio)
    Default Sound Playback: Yes
    Default Voice Playback: Yes
                Hardware ID: HDAUDIO\FUNC_01&VEN_1002&DEV_791A&SUBSYS_00791A00&REV_1000
            Manufacturer ID: 1
                 Product ID: 100
                       Type: WDM
                Driver Name: RtHDMIVX.sys
             Driver Version: 6.00.0001.6034 (English)
          Driver Attributes: Final Retail
                WHQL Logo'd: Yes
              Date and Size: 1/26/2010 22:05:00, 231328 bytes
                Other Files:
            Driver Provider: Realtek Semiconductor Corp.
             HW Accel Level: Basic
                  Cap Flags: 0xF1F
        Min/Max Sample Rate: 100, 200000
    Static/Strm HW Mix Bufs: 1, 0
    Static/Strm HW 3D Bufs: 0, 0
                  HW Memory: 0
           Voice Management: No
    EAX(tm) 2.0 Listen/Src: No, No
       I3DL2(tm) Listen/Src: No, No
    Sensaura(tm) ZoomFX(tm): No
                Description: Realtek Digital Output(Optical) (Realtek High Definition Audio)
    Default Sound Playback: No
    Default Voice Playback: No
                Hardware ID: HDAUDIO\FUNC_01&VEN_10EC&DEV_0892&SUBSYS_1458A102&REV_1003
            Manufacturer ID: 1
                 Product ID: 100
                       Type: WDM
                Driver Name: RTKVHD64.sys
             Driver Version: 6.00.0001.6083 (English)
          Driver Attributes: Final Retail
                WHQL Logo'd: Yes
              Date and Size: 4/6/2010 05:17:44, 2337440 bytes
                Other Files:
            Driver Provider: Realtek Semiconductor Corp.
             HW Accel Level: Basic
                  Cap Flags: 0xF1F
        Min/Max Sample Rate: 100, 200000
    Static/Strm HW Mix Bufs: 1, 0
    Static/Strm HW 3D Bufs: 0, 0
                  HW Memory: 0
           Voice Management: No
    EAX(tm) 2.0 Listen/Src: No, No
       I3DL2(tm) Listen/Src: No, No
    Sensaura(tm) ZoomFX(tm): No
                Description: Realtek Digital Output (Realtek High Definition Audio)
    Default Sound Playback: No
    Default Voice Playback: No
                Hardware ID: HDAUDIO\FUNC_01&VEN_10EC&DEV_0892&SUBSYS_1458A102&REV_1003
            Manufacturer ID: 1
                 Product ID: 100
                       Type: WDM
                Driver Name: RTKVHD64.sys
             Driver Version: 6.00.0001.6083 (English)
          Driver Attributes: Final Retail
                WHQL Logo'd: Yes
              Date and Size: 4/6/2010 05:17:44, 2337440 bytes
                Other Files:
            Driver Provider: Realtek Semiconductor Corp.
             HW Accel Level: Basic
                  Cap Flags: 0xF1F
        Min/Max Sample Rate: 100, 200000
    Static/Strm HW Mix Bufs: 1, 0
    Static/Strm HW 3D Bufs: 0, 0
                  HW Memory: 0
           Voice Management: No
    EAX(tm) 2.0 Listen/Src: No, No
       I3DL2(tm) Listen/Src: No, No
    Sensaura(tm) ZoomFX(tm): No
    Sound Capture Devices
                Description: Realtek Digital Input (Realtek High Definition Audio)
      Default Sound Capture: Yes
      Default Voice Capture: Yes
                Driver Name: RTKVHD64.sys
             Driver Version: 6.00.0001.6083 (English)
          Driver Attributes: Final Retail
              Date and Size: 4/6/2010 05:17:44, 2337440 bytes
                  Cap Flags: 0x1
               Format Flags: 0xFFFFF
    DirectInput Devices
          Device Name: Mouse
             Attached: 1
        Controller ID: n/a
    Vendor/Product ID: n/a
            FF Driver: n/a
          Device Name: Keyboard
             Attached: 1
        Controller ID: n/a
    Vendor/Product ID: n/a
            FF Driver: n/a
          Device Name: Logitech USB Keyboard
             Attached: 1
        Controller ID: 0x0
    Vendor/Product ID: 0x046D, 0xC31B
            FF Driver: n/a
          Device Name: Logitech USB Keyboard
             Attached: 1
        Controller ID: 0x0
    Vendor/Product ID: 0x046D, 0xC31B
            FF Driver: n/a
    Poll w/ Interrupt: No
    USB Devices
    + USB Root Hub
    | Vendor/Product ID: 0x1002, 0x4397
    | Matching Device ID: usb\root_hub
    | Service: usbhub
    Gameport Devices
    PS/2 Devices
    + HID Keyboard Device
    | Vendor/Product ID: 0x046D, 0xC31B
    | Matching Device ID: hid_device_system_keyboard
    | Service: kbdhid
    |
    + Terminal Server Keyboard Driver
    | Matching Device ID: root\rdp_kbd
    | Upper Filters: kbdclass
    | Service: TermDD
    |
    + HID-compliant mouse
    | Vendor/Product ID: 0x046D, 0xC062
    | Matching Device ID: hid_device_system_mouse
    | Service: mouhid
    |
    + Terminal Server Mouse Driver
    | Matching Device ID: root\rdp_mou
    | Upper Filters: mouclass
    | Service: TermDD
    Disk & DVD/CD-ROM Drives
          Drive: C:
    Free Space: 447.1 GB
    Total Space: 476.9 GB
    File System: NTFS
          Model: ST3500418AS ATA Device
          Drive: E:
    Free Space: 238.7 GB
    Total Space: 476.9 GB
    File System: NTFS
          Model: Seagate FreeAgentDesktop USB Device
          Drive: D:
          Model: HL-DT-ST BD-RE  WH10LS30 ATA Device
         Driver: c:\windows\system32\drivers\cdrom.sys, 6.01.7601.17514 (English), , 0 bytes
    System Devices
         Name: PCI standard PCI-to-PCI bridge
    Device ID: PCI\VEN_1022&DEV_9608&SUBSYS_96011022&REV_00\3&18D45AA6&0&48
       Driver: n/a
         Name: PCI standard host CPU bridge
    Device ID: PCI\VEN_1022&DEV_1200&SUBSYS_00000000&REV_00\3&18D45AA6&0&C0
       Driver: n/a
         Name: Standard OpenHCD USB Host Controller
    Device ID: PCI\VEN_1002&DEV_4397&SUBSYS_50041458&REV_00\3&18D45AA6&0&98
       Driver: n/a
         Name: High Definition Audio Controller
    Device ID: PCI\VEN_1002&DEV_4383&SUBSYS_A1021458&REV_40\3&18D45AA6&0&A2
       Driver: n/a
         Name: Standard Dual Channel PCI IDE Controller
    Device ID: PCI\VEN_197B&DEV_2363&SUBSYS_B0001458&REV_02\4&1A75311A&0&01A8
       Driver: n/a
         Name: PCI standard PCI-to-PCI bridge
    Device ID: PCI\VEN_1022&DEV_9605&SUBSYS_96011022&REV_00\3&18D45AA6&0&28
       Driver: n/a
         Name: ATI Radeon HD 4290
    Device ID: PCI\VEN_1002&DEV_9714&SUBSYS_D0001458&REV_00\4&23F7DD16&0&2808
       Driver: n/a
         Name: Standard OpenHCD USB Host Controller
    Device ID: PCI\VEN_1002&DEV_4397&SUBSYS_50041458&REV_00\3&18D45AA6&0&90
       Driver: n/a
         Name: GIGABYTE GBB36X Controller
    Device ID: PCI\VEN_197B&DEV_2363&SUBSYS_B0001458&REV_02\4&1A75311A&0&00A8
       Driver: n/a
         Name: PCI standard PCI-to-PCI bridge
    Device ID: PCI\VEN_1022&DEV_9602&SUBSYS_96021022&REV_00\3&18D45AA6&0&08
       Driver: n/a
         Name: High Definition Audio Controller
    Device ID: PCI\VEN_1002&DEV_970F&SUBSYS_960F1458&REV_00\4&23F7DD16&0&2908
       Driver: n/a
         Name: Standard Enhanced PCI to USB Host Controller
    Device ID: PCI\VEN_1002&DEV_4396&SUBSYS_50041458&REV_00\3&18D45AA6&0&B2
       Driver: n/a
         Name: D-Link DWA-556 Xtreme N PCIe Desktop Adapter
    Device ID: PCI\VEN_168C&DEV_0024&SUBSYS_3A701186&REV_01\4&5B6B27D&0&0048
       Driver: n/a
         Name: PCI standard host CPU bridge
    Device ID: PCI\VEN_1022&DEV_9601&SUBSYS_96011022&REV_00\3&18D45AA6&0&00
       Driver: n/a
         Name: PCI standard PCI-to-PCI bridge
    Device ID: PCI\VEN_1002&DEV_43A0&SUBSYS_00001002&REV_00\3&18D45AA6&0&A8
       Driver: n/a
         Name: Standard Enhanced PCI to USB Host Controller
    Device ID: PCI\VEN_1002&DEV_4396&SUBSYS_50041458&REV_00\3&18D45AA6&0&9A
       Driver: n/a
         Name: Realtek PCIe GBE Family Controller
    Device ID: PCI\VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_03\4&2BE2F00&0&0050
       Driver: n/a
         Name: PCI standard host CPU bridge
    Device ID: PCI\VEN_1022&DEV_1204&SUBSYS_00000000&REV_00\3&18D45AA6&0&C4
       Driver: n/a
         Name: PCI standard ISA bridge
    Device ID: PCI\VEN_1002&DEV_439D&SUBSYS_439D1002&REV_40\3&18D45AA6&0&A3
       Driver: n/a
         Name: Standard Enhanced PCI to USB Host Controller
    Device ID: PCI\VEN_1002&DEV_4396&SUBSYS_50041458&REV_00\3&18D45AA6&0&92
       Driver: n/a
         Name: Texas Instruments 1394 OHCI Compliant Host Controller
    Device ID: PCI\VEN_104C&DEV_8024&SUBSYS_10001458&REV_00\4&340CE6FE&0&70A4
       Driver: n/a
         Name: PCI standard host CPU bridge
    Device ID: PCI\VEN_1022&DEV_1203&SUBSYS_00000000&REV_00\3&18D45AA6&0&C3
       Driver: n/a
         Name: Standard Dual Channel PCI IDE Controller
    Device ID: PCI\VEN_1002&DEV_439C&SUBSYS_50021458&REV_40\3&18D45AA6&0&A1
       Driver: n/a
         Name: Standard Dual Channel PCI IDE Controller
    Device ID: PCI\VEN_1002&DEV_4390&SUBSYS_B0021458&REV_40\3&18D45AA6&0&88
       Driver: n/a
         Name: NEC Electronics USB 3.0 Host Controller
    Device ID: PCI\VEN_1033&DEV_0194&SUBSYS_50071458&REV_03\4&87DAECB&0&0028
       Driver: n/a
         Name: PCI standard host CPU bridge
    Device ID: PCI\VEN_1022&DEV_1202&SUBSYS_00000000&REV_00\3&18D45AA6&0&C2
       Driver: n/a
         Name: Standard OpenHCD USB Host Controller
    Device ID: PCI\VEN_1002&DEV_4399&SUBSYS_50041458&REV_00\3&18D45AA6&0&A5
       Driver: n/a
         Name: ATI I/O Communications Processor SMBus Controller
    Device ID: PCI\VEN_1002&DEV_4385&SUBSYS_00000000&REV_41\3&18D45AA6&0&A0
       Driver: n/a
         Name: PCI standard PCI-to-PCI bridge
    Device ID: PCI\VEN_1022&DEV_9609&SUBSYS_96011022&REV_00\3&18D45AA6&0&50
       Driver: n/a
         Name: PCI standard host CPU bridge
    Device ID: PCI\VEN_1022&DEV_1201&SUBSYS_00000000&REV_00\3&18D45AA6&0&C1
       Driver: n/a
         Name: Standard OpenHCD USB Host Controller
    Device ID: PCI\VEN_1002&DEV_4397&SUBSYS_50041458&REV_00\3&18D45AA6&0&B0
       Driver: n/a
         Name: ATI I/O Communications Processor PCI Bus Controller
    Device ID: PCI\VEN_1002&DEV_4384&SUBSYS_00000000&REV_40\3&18D45AA6&0&A4
       Driver: n/a
    DirectShow Filters
    DirectShow Filters:
    WMAudio Decoder DMO,0x00800800,1,1,WMADMOD.DLL,6.01.7601.17514
    WMAPro over S/PDIF DMO,0x00600800,1,1,WMADMOD.DLL,6.01.7601.17514
    WMSpeech Decoder DMO,0x00600800,1,1,WMSPDMOD.DLL,6.01.7601.17514
    MP3 Decoder DMO,0x00600800,1,1,mp3dmod.dll,6.01.7600.16385
    Mpeg4s Decoder DMO,0x00800001,1,1,mp4sdecd.dll,6.01.7600.16385
    WMV Screen decoder DMO,0x00600800,1,1,wmvsdecd.dll,6.01.7601.17514
    WMVideo Decoder DMO,0x00800001,1,1,wmvdecod.dll,6.01.7601.17514
    Mpeg43 Decoder DMO,0x00800001,1,1,mp43decd.dll,6.01.7600.16385
    Mpeg4 Decoder DMO,0x00800001,1,1,mpg4decd.dll,6.01.7600.16385
    ATI Ticker,0x00200000,0,1,Ticker.ax,
    DV Muxer,0x00400000,0,0,qdv.dll,6.06.7601.17514
    Color Space Converter,0x00400001,1,1,quartz.dll,6.06.7601.17713
    WM ASF Reader,0x00400000,0,0,qasf.dll,12.00.7601.17514
    Screen Capture filter,0x00200000,0,1,wmpsrcwp.dll,12.00.7601.17514
    AVI Splitter,0x00600000,1,1,quartz.dll,6.06.7601.17713
    VGA 16 Color Ditherer,0x00400000,1,1,quartz.dll,6.06.7601.17713
    SBE2MediaTypeProfile,0x00200000,0,0,sbe.dll,6.06.7601.17528
    Microsoft DTV-DVD Video Decoder,0x005fffff,2,4,msmpeg2vdec.dll,6.01.7140.0000
    AC3 Parser Filter,0x00600000,1,1,mpg2splt.ax,6.06.7601.17528
    StreamBufferSink,0x00200000,0,0,sbe.dll,6.06.7601.17528
    MJPEG Decompressor,0x00600000,1,1,quartz.dll,6.06.7601.17713
    MPEG-I Stream Splitter,0x00600000,1,2,quartz.dll,6.06.7601.17713
    SAMI (CC) Parser,0x00400000,1,1,quartz.dll,6.06.7601.17713
    VBI Codec,0x00600000,1,4,VBICodec.ax,6.06.7601.17514
    MPEG-2 Splitter,0x005fffff,1,0,mpg2splt.ax,6.06.7601.17528
    Closed Captions Analysis Filter,0x00200000,2,5,cca.dll,6.06.7601.17514
    SBE2FileScan,0x00200000,0,0,sbe.dll,6.06.7601.17528
    Microsoft MPEG-2 Video Encoder,0x00200000,1,1,msmpeg2enc.dll,6.01.7601.17514
    Internal Script Command Renderer,0x00800001,1,0,quartz.dll,6.06.7601.17713
    MPEG Audio Decoder,0x03680001,1,1,quartz.dll,6.06.7601.17713
    MMACE ProcAmp,0x00200000,0,2,MMACEFilters.dll,
    DV Splitter,0x00600000,1,2,qdv.dll,6.06.7601.17514
    Video Mixing Renderer 9,0x00200000,1,0,quartz.dll,6.06.7601.17713
    Microsoft MPEG-2 Encoder,0x00200000,2,1,msmpeg2enc.dll,6.01.7601.17514
    ACM Wrapper,0x00600000,1,1,quartz.dll,6.06.7601.17713
    Video Renderer,0x00800001,1,0,quartz.dll,6.06.7601.17713
    MPEG-2 Video Stream Analyzer,0x00200000,0,0,sbe.dll,6.06.7601.17528
    Line 21 Decoder,0x00600000,1,1,qdvd.dll,6.06.7601.17713
    Video Port Manager,0x00600000,2,1,quartz.dll,6.06.7601.17713
    Video Renderer,0x00400000,1,0,quartz.dll,6.06.7601.17713
    VPS Decoder,0x00200000,0,0,WSTPager.ax,6.06.7601.17514
    WM ASF Writer,0x00400000,0,0,qasf.dll,12.00.7601.17514
    VBI Surface Allocator,0x00600000,1,1,vbisurf.ax,6.01.7601.17514
    MMACE SoftEmu,0x00200000,0,2,MMACEFilters.dll,
    File writer,0x00200000,1,0,qcap.dll,6.06.7601.17514
    iTV Data Sink,0x00600000,1,0,itvdata.dll,6.06.7601.17514
    iTV Data Capture filter,0x00600000,1,1,itvdata.dll,6.06.7601.17514
    DVD Navigator,0x00200000,0,3,qdvd.dll,6.06.7601.17713
    MMACE DeInterlace,0x00200000,0,2,MMACEFilters.dll,
    Overlay Mixer2,0x00200000,1,1,qdvd.dll,6.06.7601.17713
    AVI Draw,0x00600064,9,1,quartz.dll,6.06.7601.17713
    RDP DShow Redirection Filter,0xffffffff,1,0,DShowRdpFilter.dll,
    Microsoft MPEG-2 Audio Encoder,0x00200000,1,1,msmpeg2enc.dll,6.01.7601.17514
    WST Pager,0x00200000,1,1,WSTPager.ax,6.06.7601.17514
    MPEG-2 Demultiplexer,0x00600000,1,1,mpg2splt.ax,6.06.7601.17528
    DV Video Decoder,0x00800000,1,1,qdv.dll,6.06.7601.17514
    SampleGrabber,0x00200000,1,1,qedit.dll,6.06.7601.17514
    Null Renderer,0x00200000,1,0,qedit.dll,6.06.7601.17514
    MPEG-2 Sections and Tables,0x005fffff,1,0,Mpeg2Data.ax,6.06.7601.17514
    Microsoft AC3 Encoder,0x00200000,1,1,msac3enc.dll,6.01.7601.17514
    StreamBufferSource,0x00200000,0,0,sbe.dll,6.06.7601.17528
    Smart Tee,0x00200000,1,2,qcap.dll,6.06.7601.17514
    Overlay Mixer,0x00200000,0,0,qdvd.dll,6.06.7601.17713
    AVI Decompressor,0x00600000,1,1,quartz.dll,6.06.7601.17713
    AVI/WAV File Source,0x00400000,0,2,quartz.dll,6.06.7601.17713
    Wave Parser,0x00400000,1,1,quartz.dll,6.06.7601.17713
    MIDI Parser,0x00400000,1,1,quartz.dll,6.06.7601.17713
    Multi-file Parser,0x00400000,1,1,quartz.dll,6.06.7601.17713
    File stream renderer,0x00400000,1,1,quartz.dll,6.06.7601.17713
    Microsoft DTV-DVD Audio Decoder,0x005fffff,1,1,msmpeg2adec.dll,6.01.7140.0000
    StreamBufferSink2,0x00200000,0,0,sbe.dll,6.06.7601.17528
    AVI Mux,0x00200000,1,0,qcap.dll,6.06.7601.17514
    Line 21 Decoder 2,0x00600002,1,1,quartz.dll,6.06.7601.17713
    File Source (Async.),0x00400000,0,1,quartz.dll,6.06.7601.17713
    File Source (URL),0x00400000,0,1,quartz.dll,6.06.7601.17713
    Infinite Pin Tee Filter,0x00200000,1,1,qcap.dll,6.06.7601.17514
    Enhanced Video Renderer,0x00200000,1,0,evr.dll,6.01.7601.17514
    BDA MPEG2 Transport Information Filter,0x00200000,2,0,psisrndr.ax,6.06.7601.17669
    MPEG Video Decoder,0x40000001,1,1,quartz.dll,6.06.7601.17713
    WDM Streaming Tee/Splitter Devices:
    Tee/Sink-to-Sink Converter,0x00200000,1,1,ksproxy.ax,6.01.7601.17514
    Video Compressors:
    WMVideo8 Encoder DMO,0x00600800,1,1,wmvxencd.dll,6.01.7600.16385
    WMVideo9 Encoder DMO,0x00600800,1,1,wmvencod.dll,6.01.7600.16385
    MSScreen 9 encoder DMO,0x00600800,1,1,wmvsencd.dll,6.01.7600.16385
    DV Video Encoder,0x00200000,0,0,qdv.dll,6.06.7601.17514
    MJPEG Compressor,0x00200000,0,0,quartz.dll,6.06.7601.17713
    Cinepak Codec by Radius,0x00200000,1,1,qcap.dll,6.06.7601.17514
    Intel IYUV codec,0x00200000,1,1,qcap.dll,6.06.7601.17514
    Intel IYUV codec,0x00200000,1,1,qcap.dll,6.06.7601.17514
    Microsoft RLE,0x00200000,1,1,qcap.dll,6.06.7601.17514
    Microsoft Video 1,0x00200000,1,1,qcap.dll,6.06.7601.17514
    Audio Compressors:
    WM Speech Encoder DMO,0x00600800,1,1,WMSPDMOE.DLL,6.01.7600.16385
    WMAudio Encoder DMO,0x00600800,1,1,WMADMOE.DLL,6.01.7600.16385
    IMA ADPCM,0x00200000,1,1,quartz.dll,6.06.7601.17713
    PCM,0x00200000,1,1,quartz.dll,6.06.7601.17713
    Microsoft ADPCM,0x00200000,1,1,quartz.dll,6.06.7601.17713
    GSM 6.10,0x00200000,1,1,quartz.dll,6.06.7601.17713
    CCITT A-Law,0x00200000,1,1,quartz.dll,6.06.7601.17713
    CCITT u-Law,0x00200000,1,1,quartz.dll,6.06.7601.17713
    MPEG Layer-3,0x00200000,1,1,quartz.dll,6.06.7601.17713
    Audio Capture Sources:
    Realtek Digital Input (Realtek ,0x00200000,0,0,qcap.dll,6.06.7601.17514
    PBDA CP Filters:
    PBDA DTFilter,0x00600000,1,1,CPFilters.dll,6.06.7601.17528
    PBDA ETFilter,0x00200000,0,0,CPFilters.dll,6.06.7601.17528
    PBDA PTFilter,0x00200000,0,0,CPFilters.dll,6.06.7601.17528
    Midi Renderers:
    Default MidiOut Device,0x00800000,1,0,quartz.dll,6.06.7601.17713
    Microsoft GS Wavetable Synth,0x00200000,1,0,quartz.dll,6.06.7601.17713
    WDM Streaming Capture Devices:
    Realtek HD Digital input,0x00200000,1,1,ksproxy.ax,6.01.7601.17514
    Realtek HD Audio CD input,0x00200000,1,1,ksproxy.ax,6.01.7601.17514
    Realtek HD Audio Line input,0x00200000,1,1,ksproxy.ax,6.01.7601.17514
    Realtek HD Audio Mic input,0x00200000,1,1,ksproxy.ax,6.01.7601.17514
    Realtek HD Audio Stereo input,0x00200000,1,1,ksproxy.ax,6.01.7601.17514
    WDM Streaming Rendering Devices:
    Realtek HDA HDMI Out,0x00200000,1,1,ksproxy.ax,6.01.7601.17514
    Realtek HD Audio output,0x00200000,1,1,ksproxy.ax,6.01.7601.17514
    Realtek HDA SPDIF Optical Out,0x00200000,1,1,ksproxy.ax,6.01.7601.17514
    Realtek HDA SPDIF Out,0x00200000,1,1,ksproxy.ax,6.01.7601.17514
    BDA Network Providers:
    Microsoft ATSC Network Provider,0x00200000,0,1,MSDvbNP.ax,6.06.7601.17514
    Microsoft DVBC Network Provider,0x00200000,0,1,MSDvbNP.ax,6.06.7601.17514
    Microsoft DVBS Network Provider,0x00200000,0,1,MSDvbNP.ax,6.06.7601.17514
    Microsoft DVBT Network Provider,0x00200000,0,1,MSDvbNP.ax,6.06.7601.17514
    Microsoft Network Provider,0x00200000,0,1,MSNP.ax,6.06.7601.17514
    Multi-Instance Capable VBI Codecs:
    VBI Codec,0x00600000,1,4,VBICodec.ax,6.06.7601.17514
    BDA Transport Information Renderers:
    BDA MPEG2 Transport Information Filter,0x00600000,2,0,psisrndr.ax,6.06.7601.17669
    MPEG-2 Sections and Tables,0x00600000,1,0,Mpeg2Data.ax,6.06.7601.17514
    BDA CP/CA Filters:
    Decrypt/Tag,0x00600000,1,1,EncDec.dll,6.06.7601.17708
    Encrypt/Tag,0x00200000,0,0,EncDec.dll,6.06.7601.17708
    PTFilter,0x00200000,0,0,EncDec.dll,6.06.7601.17708
    XDS Codec,0x00200000,0,0,EncDec.dll,6.06.7601.17708
    WDM Streaming Communication Transforms:
    Tee/Sink-to-Sink Converter,0x00200000,1,1,ksproxy.ax,6.01.7601.17514
    Audio Renderers:
    Realtek HDMI Output (ATI HDMI A,0x00200000,1,0,quartz.dll,6.06.7601.17713
    Default DirectSound Device,0x00800000,1,0,quartz.dll,6.06.7601.17713
    Default WaveOut Device,0x00200000,1,0,quartz.dll,6.06.7601.17713
    DirectSound: Realtek Digital Output (Realtek High Definition Audio),0x00200000,1,0,quartz.dll,6.06.7601.17713
    DirectSound: Realtek Digital Output(Optical) (Realtek High Definition Audio),0x00200000,1,0,quartz.dll,6.06.7601.17713
    DirectSound: Realtek HDMI Output (ATI HDMI Audio),0x00200000,1,0,quartz.dll,6.06.7601.17713
    Realtek Digital Output (Realtek,0x00200000,1,0,quartz.dll,6.06.7601.17713
    Realtek Digital Output(Optical),0x00200000,1,0,quartz.dll,6.06.7601.17713
    EVR Power Information
    Current Setting: {5C67A112-A4C9-483F-B4A7-1D473BECAFDC} (Quality)
      Quality Flags: 2576
        Enabled:
        Force throttling
        Allow half deinterlace
        Allow scaling
        Decode Power Usage: 100
      Balanced Flags: 1424
        Enabled:
        Force throttling
        Allow batching
        Force half deinterlace
        Force scaling
        Decode Power Usage: 50
      PowerFlags: 1424
        Enabled:
        Force throttling
        Allow batching
        Force half deinterlace
        Force scaling
        Decode Power Usage: 0

  • Display a video stream (successives images)

    Hello!
    Thanks for looking after my post.
    I try to display a video stream (successives images) in Java component.
    With a simple swing component, it's not possible to display 25 fps for a 640x480 resolution.
    With SWT, we arrive to display about 15 fps for a resolution 640x480 but the use of the CPU is very important.
    Do you know an efficient system to display video stream?
    Thanks.

    Firstly if you're loading images with Toolkit you'll nbeed to use MediaTracker (see the Javadoc for full and clear instructions).
    Secondly, be aware of how long it takes to load image data, allocate the memory for it, and decode it. This is where you're going to suffer and it's the fundamental flaw in the plan of simulating video by flipping single frames: it's highly unlikely you'll manage it quickly enough. As above, 50ms is quite optimistic.
    You could do your loading up-front and buffer a load of images - there are a few strategies you could use for this. But bear in mind that (a) this is going to be very memory hungry, and (b) if your image load time is greater than your frame display time you're always going to be fighting a losing battle. But it should work for very small animations.
    Run yourself some tests: write yourself a simple test class which just loads an image in its main() method using a MediaTracker. It'll tell you how long loading the image takes. Of course, if you're doing it in an applet then you've got all sorts of other factors to consider and the load times will be high.

  • Windows Media Player & Video Streaming

    Hi, there!
    Is it possible to send Video Streaming (using JMF) to
    Windows Media Player? If so, how could I do that???
    Thank You very much!!
    Cesar

    Hi Jupiter,
    Yes, JMF supports streaming media using the public standard RTP and RTSP protocols.
    JMF supports both transmission and reception of media over RTP for a variety of media formats. For a list of the default formats supported, check:
    http://java.sun.com/products/java-media/jmf/2.1.1/support-rtp.html
    It also fully supports RTCP. Besides, JMF implements the "RTP Profile for Audio and Video Conferences with Minamal Control", RTP/AVP.
    The front end GUI application, JMStudio can be used as a standalone application to transmit and receive RTP streams. To implement custom RTP applications using JMF as a framework, check out the RTP samples
    on the solutions page: http://java.sun.com/products/java-media/jmf/2.1.1/solutions/index.html
    OR you can refer this URL.
    http://java.sun.com/products/java-media/jmf/2.1.1/faq-jmf.html#jmf2-rtp-features
    I hope this will help you.
    Thanks
    Bakrudeen
    Technical Support Engineer
    Sun MicroSystems Inc, India

  • Rtp video streaming issue from linux to windows

    i am currently running a windows machine and linux machine on the same network connected by a linksy wrt45g router. i am trying to use avtransmit2.java and avreceive2.java to stream a video from one computer to the other and i can't get it to go from either win to linux or linux to win.
    i am able to send information from one computer to the other through an objectoutputstream, but i have been unsuccessful in getting video to go through rtp from one computer to the other.
    anyone have any ideas? it is starting to get really frustrating. i have been able to do something similar using vlc, but the avreceive and avtransmit won't work. i am using a new configuration, and have been successfull with the same code previous times
    thanks
    bd

    You can use MediaPlayerLauncher or MediaElement control
    https://msdn.microsoft.com/en-us/library/windows/apps/hh394004%28v=vs.105%29.aspx
    https://msdn.microsoft.com/en-us/library/windows/apps/ff769551(v=vs.105).aspx
    Gaurav Khanna | Microsoft .NET MVP | Microsoft Community Contributor

  • Using sockets to relay video stream

    Hi there,
    I've been working with java for 4 years now, and I never had troubles making the applications I wanted with it...since my last project :(
    I hope you, gurus from the java community forum, can help me sort this out, but let me explain it to you:
    I'd like to stream video content (let's say from a webcam) to several spectators. But my upload bandwidth (ADSL line) is limited to 512kbps, which is far from enough to send a video streaming (with a bitrate of ~400kbps) to 10 or more viewers.
    That's why I decided to rent a distant server (with a bandwidth of 5Mbps download/upload), and make a java application run on it, which would be able to broadcast the stream to all the viewers.
    So my computer (connected to adsl) captures the video from the webcam, sends it via socket to the rented server, which broadcasts the video to all the spectators. If no video is sent to the rented server, then it should broadcast local files to the spectators.
    Here is a schema of the project so you understand easily (my english is not as good as I'd like it to be, so you may not understand with words only):
    http://www.bf-stream.com/schema1.gif
    My application runs quite well with 5 spectators, but as soon as more viewers come to see the video, it starts hanging, and all the viewers suffer lags and buffering, which is not exactly what I expected...
    Of course, I checked the administration interface on the rented server to see if this was due to a cpu/ram/bandwitdh problem. With no success: with 10 viewers connected, the app uses less than 1% of the cpu power, something like 200kb of RAM, and a bandwidth of 3-4Mbps (which is still under the actual bandwidth capacity of the server).
    That's why I came to the conclusion that my java app was not as good as I thought, and decided to show it to you, so you can help me make it better.
    So here is a schema showing the classes and their interactions:
    http://www.bf-stream.com/schema2.gif
    And here are the sources of the classes:
    StreamRelay.java:
    package com.RR4;
    import java.net.Socket;
    import java.util.Vector;
    import java.util.Observable;
    import java.util.Observer;
    * StreamRelay:
    *  Main class controlling every aspects of the stream
    *  (live content, or files read from hard disk)
    public class StreamRelay extends Observable implements Observer  {
         static public String VERSION = "0.5";
         static public int BUFFER_SIZE = 16;
         private StreamServer streamServer;
         private LiveServer liveServer;
         LocalFile localFile;
         Vector clients;
         boolean streamFromSocket;
         public StreamRelay(int livePort, int relayPort) {
              streamFromSocket = false;
              // clients: vector containing every StreamClient connected
              clients = new Vector();
              // localFile: class reading local files when no live is sent to the relay
              localFile = new LocalFile(this);
              new Thread(localFile).start();
              // streamServer: server listening for new StreamClient
              streamServer = new StreamServer(this, relayPort);
              new Thread(streamServer).start();
              // liveServer: server listening for new sources for live content
              liveServer = new LiveServer(this, livePort);
              new Thread(liveServer).start();
         * addClient: adds new StreamClient to 'clients' vector (a StreamClient is a 'spectator')
         public void addClient(Socket clientSocket) {
             StreamClient client = new StreamClient(this, clientSocket);
         * removeClient: removes a StreamClient from 'clients' vector
         public void removeClient(int index) {
              clients.remove(index);
         * update: updates every StreamClient (which are all Observers of StreamRelay)
         public void update(Observable observable, Object obj) {
              if ((observable.getClass().toString().indexOf("LocalFile")!=-1&&!streamFromSocket)||(observable.getClass().toString().indexOf("LiveStream")!=-1)) {
                   this.notifyObservers( (byte[]) obj);
                   this.setChanged();
         public static void main(String[] args) {
              new StreamRelay(8000, 8080);
    LocalFile.java:
    package com.RR4;
    import java.util.Observable;
    import java.io.*;
    * LocalFile: class reading local file when no live content is sent to the relay
    public class LocalFile extends Observable implements Runnable {
         // filenames is an array containing a list of files to be read when no live content is sent
         private String[] filenames = {
              "file1",
              "file2"
         private InputStream stream;
         boolean streamOpened;
         private StreamRelay parent;
         int fileIndex;
         // Constructor: initialises LocalFile
         //  sets fileIndex to 0, and sets main StreamRelay as Observer
         public LocalFile(StreamRelay parent) {
              this.parent = parent;
              fileIndex = 0;
              this.addObserver(parent);
              initStream();
          * initStream: initialises stream to read the next file in 'filenames' array
         public void initStream() {
              try {
                   stream = new BufferedInputStream(new FileInputStream(filenames[fileIndex]), StreamRelay.BUFFER_SIZE);
                   streamOpened = true;
                   fileIndex++;
                   if (fileIndex==filenames.length)
                        fileIndex = 0;
              } catch (Exception exp) {
                   exp.printStackTrace();
                   streamOpened = false;
          * run: main loop of the class.
          *     the file is actually read: a buffer of BUFFER_SIZE is filled and sent to
          *     the observer (StreamRelay)
         public void run() {
              byte[] buffer = new byte[StreamRelay.BUFFER_SIZE];
              byte[] bufferToSend;
              boolean quit = false;
              int actualBufferSize = 0;
              while (!quit) {
                   try {
                        this.setChanged();
                        // Bytes are read until the buffer is actually filled with BUFFER_SIZE bytes
                        // Only then is it sent to the observer...
                        while (streamOpened && ((actualBufferSize = stream.read(buffer, 0, StreamRelay.BUFFER_SIZE)) > 0)) {
                             if (parent.clients.size()>0 && (!parent.streamFromSocket)) {
                                  if (actualBufferSize<StreamRelay.BUFFER_SIZE) {
                                       bufferToSend = new byte[actualBufferSize];
                                       System.arraycopy(buffer, 0, bufferToSend, 0, actualBufferSize);
                                       this.notifyObservers(bufferToSend);
                                  } else
                                       this.notifyObservers(buffer);
                                  this.setChanged();
                             } else {
                                  try { Thread.sleep(100); } catch (Exception exp) {}
                   } catch (Exception exp) {
                        exp.printStackTrace();
                   try { stream.close(); } catch (Exception exp) {}
                   initStream();
    StreamServer.java:
    package com.RR4;
    import java.net.ServerSocket;
    public class StreamServer extends Thread {
         private ServerSocket serverSocket;
         private boolean socketOpened;
         private StreamRelay parent;
         * StreamServer: server listening for new StreamClient
         public StreamServer(StreamRelay parent, int relayPort) {
              this.parent = parent;
              try {
                   serverSocket = new ServerSocket(relayPort);
                   socketOpened = true;
              } catch (Exception exp) {
                   exp.printStackTrace();
                   socketOpened = false;
         public void run() {
              try {
                   while (socketOpened) {
                        parent.addClient(serverSocket.accept());
              } catch (Exception exp) {
                   exp.printStackTrace();
    StreamClient.java:
    package com.RR4;
    import java.net.Socket;
    import java.util.Observer;
    import java.util.Observable;
    import java.io.*;
    * StreamClient: class representing spectators connected to view the video content
    *     whether it is live content, or local files
    public class StreamClient implements Observer {
         private Socket socket;
         private OutputStream outStream;
         private boolean connected = true;
         private StreamRelay parent;
         public StreamClient(StreamRelay parent, Socket socket) {
              this.parent = parent;
              this.socket = socket;
              try {
                   // initialises OutputStream from socket
                   outStream = socket.getOutputStream();
              } catch (Exception exp) {
                   try { outStream.close(); } catch (Exception e) {}
                   try { socket.close(); } catch (Exception e) {}
                   exp.printStackTrace();
                   connected = false;
              if (connected) {
                   // if initializing of OutputStream didn't fail
                   // add this class to StreamBroadcast 'clients' vector
                   // and add this class to StreamRelay observers
                   parent.clients.add(this);
                   parent.addObserver(this);
          * update: actually send read bytes to the client
         public void update(Observable observable, Object obj) {
             try {
                   outStream.write( (byte[]) obj);
                   outStream.flush();
              } catch (Exception exp) {
                   // if read bytes couldn't be sent
                   // remove this client from clients list and observers of StreamRelay
                   // and try to close OutputStream and Socket
                   connected = false;
                   try { parent.deleteObserver(this); } catch (Exception e) {}
                   try { parent.clients.remove(this); } catch (Exception e) {}
                   try { outStream.close(); } catch (Exception e) {}
                   try { socket.close(); } catch (Exception e) {}
    LiveServer.java:
    package com.RR4;
    import java.net.ServerSocket;
    * LiveServer:
    *     SocketServer listening to new 'Live streams'
    public class LiveServer extends Thread {
         private ServerSocket liveSocket;
         private boolean liveServerOpened;
         private StreamRelay parent;
         public LiveServer(StreamRelay parent, int livePort) {
              this.parent = parent;
              try {
                   liveSocket = new ServerSocket(livePort);
                   liveServerOpened = true;
              } catch (Exception exp) {
                   exp.printStackTrace();
                   liveServerOpened = false;
         public void run() {
              LiveStream liveStream;
              try {
                   while (liveServerOpened) {
                        liveStream = new LiveStream(parent, liveSocket.accept());
                        new Thread(liveStream).start();
              } catch (Exception exp) {
                   exp.printStackTrace();
    LiveStream.java:
    package com.RR4;
    import java.util.Observable;
    import java.io.*;
    import java.net.Socket;
    *     LiveStream:
    *          Socket receiving live content from another distant computer
    *          to display it instead of the local files.
    public class LiveStream extends Observable implements Runnable {
         private InputStream stream;
         boolean streamOpened;
         private StreamRelay parent;
         public LiveStream(StreamRelay parent, Socket socket) {
              this.parent = parent;
              this.addObserver(parent);
              try {
                   stream = new BufferedInputStream(socket.getInputStream(), StreamRelay.BUFFER_SIZE);
                   streamOpened = true;
              } catch (Exception exp) {
                   exp.printStackTrace();
                   streamOpened = false;
         public void run() {
              byte[] buffer = new byte[StreamRelay.BUFFER_SIZE];
              byte[] bufferToSend;
              int actualBufferSize = 0;
              try {
                   this.setChanged();
                   // Bytes are read until the buffer is actually filled with BUFFER_SIZE bytes
                   // Only then is it sent to the observer...
                   while (streamOpened && ((actualBufferSize = stream.read(buffer, 0, StreamRelay.BUFFER_SIZE)) > 0)) {
                        if (!parent.streamFromSocket)
                             parent.streamFromSocket = true;
                        if (parent.clients.size() > 0) {
                             if (actualBufferSize<StreamRelay.BUFFER_SIZE) {
                                  bufferToSend = new byte[actualBufferSize];
                                  System.arraycopy(buffer, 0, bufferToSend, 0, actualBufferSize);
                                  this.notifyObservers(bufferToSend);
                             } else
                                  this.notifyObservers(buffer);
                             this.setChanged();
                        } else
                             try { Thread.sleep(100); } catch (Exception exp) {}
              } catch (Exception exp) {
                   exp.printStackTrace();
              } finally {
                   try { stream.close(); } catch (Exception exp) {}
                   this.deleteObserver(parent);
                   parent.streamFromSocket = false;
    }For your information, I uses NSV/VP6 vbr as video codec (but this should have no incidence on it, since the app only takes the video stream from a socket and broadcasts it to other sockets, without analysing it or modifying it). And the java app is hosted on a Celeron 2.6 GHz, 128MB RAM.
    I really hope you'll be able to help me with this project, as it is really important to me...
    I've been trying several Stream types available with the JDK but I hadn't any success... I've also been playing with the BUFFER_SIZE parameter, unsuccessfully too...
    Anyway, thanks in advance for reading me so far... and I hope, for helping me... I know the java community is strong, and I hope I won't have to make it with C or C++ :(

    Hi again :)
    I've been focusing on the local part of the stream (no live video, just playing local files and sending them to clients) using NIO.
    NIOStreamRelay.java:
    package com.RR4;
    import java.io.*;
    import java.nio.*;
    import java.nio.channels.*;
    import java.nio.channels.spi.*;
    import java.net.*;
    import java.util.*;
    public class NIOStreamRelay {
         static int BUFFER_SIZE = 1024;
         LocalFile localFile;
         Vector clients;
         public NIOStreamRelay() throws IOException {
              localFile = new LocalFile(this);
              new Thread(localFile).start();
              clients = new Vector();
              acceptConnections();
         public void acceptConnections() throws IOException {          
              // Selector for incoming requests
              Selector acceptSelector = SelectorProvider.provider().openSelector();
              // Create a new server socket and set to non blocking mode
              ServerSocketChannel ssc = ServerSocketChannel.open();
              ssc.configureBlocking(false);
              // Bind the server socket to the local host and port
              InetAddress lh = InetAddress.getLocalHost();
              InetSocketAddress isa = new InetSocketAddress(lh, 8080);
              ssc.socket().bind(isa);
              // Register accepts on the server socket with the selector. This
              // step tells the selector that the socket wants to be put on the
              // ready list when accept operations occur, so allowing multiplexed
              // non-blocking I/O to take place.
              SelectionKey acceptKey = ssc.register(acceptSelector, SelectionKey.OP_ACCEPT);
              int keysAdded = 0;
              // Here's where everything happens. The select method will
              // return when any operations registered above have occurred, the
              // thread has been interrupted, etc.
              while ((keysAdded = acceptSelector.select()) > 0) {
                  // Someone is ready for I/O, get the ready keys
                  Set readyKeys = acceptSelector.selectedKeys();
                  Iterator i = readyKeys.iterator();
                  // Walk through the ready keys collection and process date requests.
                  while (i.hasNext()) {
                        SelectionKey sk = (SelectionKey)i.next();
                        i.remove();
                        // The key indexes into the selector so you
                        // can retrieve the socket that's ready for I/O
                        ServerSocketChannel nextReady = (ServerSocketChannel)sk.channel();
                        // Accept the date request and send back the date string
                        Socket s = nextReady.accept().socket();
                        OutputStream socketStream = s.getOutputStream();
                        StreamClient newClient = new StreamClient(socketStream, this);
                        localFile.addObserver(newClient);
                        clients.add(newClient);
         public static void main(String[] args) {
              try {
                   NIOStreamRelay streamRelay = new NIOStreamRelay();
              } catch (Exception e) {
                   e.printStackTrace();
    LocalFile.java:
    package com.RR4;
    import java.util.Observable;
    import java.io.*;
    * LocalFile: class reading local file when no live content is sent to the relay
    public class LocalFile extends Observable implements Runnable {
         // filenames is an array containing a list of files to be read when no live content is sent
         private String[] filenames = {
              "test.nsv",
              "test2.nsv"
         private InputStream stream;
         boolean streamOpened;
         int fileIndex;
         NIOStreamRelay parent;
         // Constructor: initialises LocalFile
         //  sets fileIndex to 0, and sets main StreamRelay as Observer
         public LocalFile(NIOStreamRelay parent) {
              this.parent = parent;
              fileIndex = 0;
              initStream();
          * initStream: initialises stream to read the next file in 'filenames' array
         public void initStream() {
              try {
                   stream = new BufferedInputStream(new FileInputStream(filenames[fileIndex]), NIOStreamRelay.BUFFER_SIZE);
                   streamOpened = true;
                   fileIndex++;
                   if (fileIndex==filenames.length)
                        fileIndex = 0;
              } catch (Exception exp) {
                   exp.printStackTrace();
                   streamOpened = false;
          * run: main loop of the class.
          *     the file is actually read: a buffer of BUFFER_SIZE is filled and sent to
          *     the observer (StreamRelay)
         public void run() {
              byte[] buffer = new byte[NIOStreamRelay.BUFFER_SIZE];
              byte[] bufferToSend;
              boolean quit = false;
              int actualBufferSize = 0;
              while (!quit) {
                   try {
                        this.setChanged();
                        // Bytes are read until the buffer is actually filled with BUFFER_SIZE bytes
                        // Only then is it sent to the observer...
                        while (streamOpened && ((actualBufferSize = stream.read(buffer, 0, NIOStreamRelay.BUFFER_SIZE)) > 0)) {
                             if (parent.clients.size() > 0) {
                                  if (actualBufferSize<NIOStreamRelay.BUFFER_SIZE) {
                                       bufferToSend = new byte[actualBufferSize];
                                       System.arraycopy(buffer, 0, bufferToSend, 0, actualBufferSize);
                                       this.notifyObservers(bufferToSend);
                                  } else
                                       this.notifyObservers(buffer);
                                  this.setChanged();
                             } else {
                                  try { Thread.sleep(100); } catch (Exception exp) {}
                   } catch (Exception exp) {
                        exp.printStackTrace();
                   try { stream.close(); } catch (Exception exp) {}
                   initStream();
    StreamClient.java:
    package com.RR4;
    import java.io.*;
    import java.net.*;
    import java.util.*;
    public class StreamClient implements Observer {
         OutputStream out;
         NIOStreamRelay parent;
         public StreamClient(OutputStream out, NIOStreamRelay parent) {
              this.out = out;
              this.parent = parent;
         public void update(Observable observable, Object obj) {
             try {
                   out.write( (byte[]) obj);
                   out.flush();
              } catch (Exception exp) {
                   // if read bytes couldn't be sent
                   // remove this client from clients list and observers of StreamRelay
                   // and try to close OutputStream and Socket
                   try { parent.localFile.deleteObserver(this); } catch (Exception e) {}
                   try { parent.clients.remove(this); } catch (Exception e) {}
                   try { out.close(); } catch (Exception e) {}
    }Does it look better to you?
    I know I'm still using single threading, but as the IO should be non-blocking, I guess it should be better.
    Furthermore, I tried it locally, and was able to launch 30+ clients without buffering problems (huh, ok, my cpu here is only a 1.6GHz, so the display was a bit lagguy, but it didn't seem to buffer at all)

Maybe you are looking for

  • [SRP527w] NAT Traversal not available in VPN options!!!

    Hi, I'm so disappointed to find such a light and incomplete VPN menu on the SRP527w. As a Cisco certified network engineer, I'm testing it because my company needs about twenty ADSL+ 3G Backup router, and Cisco seemed to offer the best solution. We n

  • Cisco ASA 8.2. Destination NAT (network - network)

    Hi Guys, Could you tell me if I can do destination NAT (class C network => class C network) on Cisco ASA running 8.2? (or another version). For example, will destination NAT like this work: static (inside,outside) 8.2.2.0 10.10.8.0 netmask 255.255.25

  • Having problem in visible/hidden

    I am using same script under two subform section 1 and section 2. When click on button under section1, this script is working well, but section 2 not working. Again if I click on the button section 2, it is working well, but section 1 not working the

  • Sorting & Organizing in Preview

    Hi- In Tiger I was able to open multiple images in Preview, and them sort them by name, modified date, etc. In Leopard I can not seem to change the default method by which images are ordered. It doesn't appear that there is any type of view menu in t

  • Help P-L-E-A-S-E

    Okay, I have no clue about java period. just starting to learn, one of our servers at work is giving me a Java.Lang Unsupportedclassverion error. This was dropped in my and I really have not a clue to what is causing this error.