Как я могу записать двоичный поток непосредственно в контейнер MPEG-4 AVC (mp4) без перекодирования в C #? - PullRequest
0 голосов
/ 19 января 2012

Я использую Axis media parser SDK для получения потока h264, как я могу записать этот поток напрямую в контейнер MPEG-4 AVC (mp4) в C # без перекодирования и потери качества видео

В настоящее время эти 2события запускаются для записи аудио и видео в файл

private void OnVideoSample(int cookieID, int sampleType,
    int sampleFlags, ulong startTime, ulong stopTime, object SampleArray)
{
    // Cast the buffer object to a byte array
    byte[] bufferBytes = (byte[])SampleArray;
    Console.WriteLine("OnVideoSample - {0} bytes", bufferBytes.Length);

    // Write the data to out file
    lock (fileLock)
    {
        outFile.Write(sampleType);
        outFile.Write(sampleFlags);
        outFile.Write(startTime);
        outFile.Write(stopTime);
        outFile.Write(bufferBytes.Length);
        outFile.Write(bufferBytes, 0, bufferBytes.Length);
    }
}

// Event handler callback for audio samples buffers
private void OnAudioSample(int cookieID, int sampleType,
    int sampleFlags, ulong startTime, ulong stopTime, object SampleArray)
{
    // Cast the buffer object to a byte array
    byte[] bufferBytes = (byte[])SampleArray;
    Console.WriteLine("OnAudioSample - {0} bytes", bufferBytes.Length);

    // Write the data to out file
    lock (fileLock)
    {
        outFile.Write(sampleType);
        outFile.Write(sampleFlags);
        outFile.Write(startTime);
        outFile.Write(stopTime);
        outFile.Write(bufferBytes.Length);
        outFile.Write(bufferBytes, 0, bufferBytes.Length);
    }
}

1 Ответ

0 голосов
/ 19 января 2012

Вы можете построить конвейер DirectShow с вашими пользовательскими исходными фильтрами (особенно на основе / полученными из образца SDK `PushSource '), которые вводят данные, полученные из событий, указанных выше. Эти два устройства будут подключены к так называемому мультиплексору MPEG-4, такому как свободный от GDCL или совместимый. Тогда первый будет подключен к файлу записи. Этот конвейер преобразует данные из событий в файл MP4.

Написание фильтров предполагает разработку на C ++. Я не уверен, но DirectShowLib может обеспечить своего рода мост в управляемое окружение, чтобы вы могли в конечном итоге избегать прикосновения к C ++.

Вы также можете использовать Intel IPP Library (Intel Media SDK?) Для создания файлов MP4, хотя я думаю, что для этого также требуется C ++, а не C #.

...