Click or drag to resize
SoMPEGRenderer Class

Base class for generating MPEG output from a scene graph.

Inheritance Hierarchy
SystemObject
  OIV.InventorSoNetBase
    OIV.Inventor.MPEGSoMPEGRenderer
      OIV.Inventor.MPEGSoMPEGFrameRenderer
      OIV.Inventor.MPEGSoMPEGNavRenderer

Namespace: OIV.Inventor.MPEG
Assembly: OIV.Inventor (in OIV.Inventor.dll) Version: 2024.1.0.0 (2024.1.0)
Syntax
public class SoMPEGRenderer : SoNetBase

The SoMPEGRenderer type exposes the following members.

Constructors
  NameDescription
Public methodSoMPEGRenderer

Constructor.

Top
Methods
  NameDescription
Public methodAddFrame

Low level method to add a new frame to the MPEG output from a buffer of unsigned characters.

Public methodCloseFile

Closes the MPEG file previously opened with the OIV.Inventor.MPEG.SoMPEGRenderer.OpenFile(System.String, System.UInt32) method.

Public methodEquals
Determines whether the specified Object is equal to the current Object.
(Inherited from Object.)
Public methodGetBackgroundColor

Gets the background color for rendering each frame.

Public methodGetComponents

Returns the number of color components of the frames recorded.

Public methodGetCompressionRate

Returns the compression rate.

Public methodGetGLRenderAction

Gets the GL Render action used to generate each frame.

Public methodGetHashCode
Overrides GetHashCode().
(Inherited from SoNetBase.)
Public methodGetNumFramesPerSecond

Gets the number of frames per second to be encoded in the MPEG output.

Public methodGetSceneGraph

Gets the scene graph used for generating frames in the MPEG output.

Public methodGetShareContext

Gets the OpenGL context shared by this object.

Public methodGetSize

Gets the frame pixel size.

Public methodGetType
Gets the Type of the current instance.
(Inherited from Object.)
Public methodIsRecording

Returns true if this renderer is recording.

Public methodIsViewerIdle
Public methodOpenFile(String)
Calls OpenFile(filename, System.Convert.ToUInt32(10000)).
Public methodOpenFile(String, UInt32)

Specifies the MPEG output file name.

Public methodPause

Pauses the recording.

Public methodRecord

Starts the recording.

Public methodSetBackgroundColor

Sets the background color for rendering each frame.

Public methodSetBitPerSec

This method allows the user to specify a fixed bit rate.

Public methodSetComponents

Set the number of color components of the frames recorded.

Public methodSetCompressionRate

Compression rate of the MPEG output.

Public methodSetGLRenderAction

Sets the GL Render action used to generate each frame.

Public methodSetNumFramesPerSecond

Sets the number of frames per second encoded in the MPEG output.

Public methodSetSceneGraph

Sets the scene graph used for generating frames in the MPEG output.

Public methodSetShareContext

Sets the OpenGL context to be shared by the OIV.Inventor.MPEG.SoMPEGRenderer.

Public methodSetSize

Sets the frame pixel size.

Public methodSetViewerIsIdle

Tells the recorder that the viewer is idle.

Public methodStop

Stops the recording and closes the opened file.

Public methodToString
Returns a string that represents the current object.
(Inherited from Object.)
Top
Remarks

This class is the base class for creating MPEG video output from a scene graph. Two specialized classes OIV.Inventor.MPEG.SoMPEGFrameRenderer and OIV.Inventor.MPEG.SoMPEGNavRenderer are provided to give applications more control over video generation.

Warning : Writing in multiple streams at the same time is not possible.

This class is used by the viewer classes to record MPEG video (see for example the OIV.Inventor.Win.SoWinRenderArea method SetMPEGRecorder). The default right-mouse popup menu in the viewer classes provides an option to display a video recording dialog box. This dialog allows the user to conveniently start and stop recording the scene in the viewer window.

The #SetShareContextmethod allows you to share an existing OpenGL context with the MPEG renderer. This avoids the necessity to re-generate textures and display lists if they are already available in another OpenGL context (the viewer context, for instance). This can dramatically reduce offscreen rendering time, depending on your scene graph.

Here's how you might use these methods to share OpenGL contexts:

SoMPEGRenderer renderer = new SoMPEGRenderer();
renderer.SetShareContext( viewer.GetShareContext() );

The MPEGRender uses two separate tasks. One to record rendered frames and one to encode the frames in MPEG format (this is a much slower task). If the recording task is stopped, the encoding one can continue. If #OpenFileis called before the end of this task, two scenarios can occur. If the filename is the same file as the one currently in use by the encoding task, this task is stopped. The behavior is the same if #Recordis called after #Stop. If the filename is different, the file is not opened and encoding continues.

It is important to note that the MPEGRenderer can only generate raw MPEG-1 video streams. In order for the generated video to be played correctly by any video player, it needs to be embedded into a container. This operation can be easily performed by the multimedia tool FFmpeg. For example, the following command allows you to embed the generated raw video stream into an MP4 container format:

ffmpeg -i input_raw_stream.mpg -codec copy output_video.mp4

The -codec copy argument is important because it allows ffmpeg to only copy the input stream inside the container instead of doing a real re-encoding.

Different container formats can also be used, like AVI or MKV.

See Also