Mux Audio and Video Into MP4¶
This topic describes how to use the Transcoder.Run method to mux AAC audio and H.264 video into an MP4 file.
The code snippets in this article are from the mux_mp4_file .NET sample.
Code¶
This code multiplexes AAC audio and H.264 video streams into an MP4 container file.
Initialize AVBlocks¶
Initialize the AVBlocks library before creating the transcoder, and shut it down after the muxing operation is complete.
var opt = new Options();
if (!opt.Prepare(args))
return opt.Error ? (int)ExitCodes.OptionsError : (int)ExitCodes.Success;
Library.Initialize();
// Set license information. To run AVBlocks in demo mode, comment the next line out
// Library.SetLicense("<license-string>");
bool encodeResult = MP4Mux(opt);
Library.Shutdown();
Create the MP4 Output Socket¶
The output socket is configured as StreamType.Mp4. The sample adds one output pin for each input audio or video stream.
using (var transcoder = new Transcoder())
{
transcoder.AllowDemoMode = true;
MediaSocket outputSocket = new MediaSocket();
outputSocket.File = opt.OutputFile;
outputSocket.StreamType = StreamType.Mp4;
// audio
for (int i = 0; i < opt.AudioFiles.Count(); i++)
{
MediaPin outputPin = new MediaPin();
AudioStreamInfo asi = new AudioStreamInfo();
asi.StreamType = StreamType.Aac;
outputPin.StreamInfo = asi;
outputSocket.Pins.Add(outputPin);
MediaSocket inputSocket = new MediaSocket();
inputSocket.File = opt.AudioFiles.ElementAt(i);
inputSocket.StreamType = StreamType.Mp4;
transcoder.Inputs.Add(inputSocket);
Console.WriteLine("Muxing audio input: {0}", opt.AudioFiles.ElementAt(i));
}
// video
for (int i = 0; i < opt.VideoFiles.Count(); i++)
{
MediaPin outputPin = new MediaPin();
VideoStreamInfo vsi = new VideoStreamInfo();
vsi.StreamType = StreamType.H264;
outputPin.StreamInfo = vsi;
outputSocket.Pins.Add(outputPin);
MediaSocket inputSocket = new MediaSocket();
inputSocket.File = opt.VideoFiles.ElementAt(i);
inputSocket.StreamType = StreamType.Mp4;
transcoder.Inputs.Add(inputSocket);
Console.WriteLine("Muxing video input: {0}", opt.VideoFiles.ElementAt(i));
}
transcoder.Outputs.Add(outputSocket);
// ...
}
Run the Muxer¶
Open and run the transcoder to perform the muxing operation.
if (!transcoder.Open())
{
PrintError("Open Transcoder", transcoder.Error);
return false;
}
if (!transcoder.Run())
{
PrintError("Run Transcoder", transcoder.Error);
return false;
}
transcoder.Close();
Console.WriteLine("Output file: {0}", opt.OutputFile);
return true;