public void StopVideoStream() {
    Parent.WriteLogtoConsole("Stopping Gstreamer Video Player");

    pipe.setState(State.READY);

    // debugGST();

    Element videosink = videoComponent.getElement();
    videoComponent.repaint();
    pipe.getElementByName("elphelstream").unlink(videosink);
    pipe.remove(videosink);

    // debugGST();

    pipe.setState(State.NULL);

    // debugGST();

    List<Element> elements = pipe.getElementsRecursive();
    for (int i = 0; i < elements.size(); i++) {
      pipe.unlink(elements.get(i));
      pipe.remove(elements.get(i));
      elements.get(i).dispose();
    }

    List<Element> sources = pipe.getSources();
    for (int i = 0; i < sources.size(); i++) {
      pipe.unlink(sources.get(i));
      pipe.remove(sources.get(i));
      sources.get(i).dispose();
    }

    // debugGST();
    pipe = null;
    // debugGST();
  }