Укажите язык вывода звука в Expression Encoder - PullRequest
0 голосов
/ 24 сентября 2010

Я использую Expression Encoder 3 SDK и пытаюсь указать язык вывода звука.Основная причина, по которой я это делаю, заключается в том, чтобы кодировать звуковую дорожку на английском языке и указывать другие необязательные звуковые дорожки на других языках.Expression Encoder не поддерживает это, но если вы кодируете отдельные дорожки на разные языки, редактор Windows Media Stream может затем собрать их вместе в один файл.

Я не могу найти способ изменить язык вывода.Я попробовал метаданные метки, но это просто ставит язык вызова метки;это фактически не меняет язык LCID трека.Итак, потоковый редактор по-прежнему видит его как английский.

Я также попытался установить текущую культуру потока и культуру пользовательского интерфейса, полагая, что он берет его оттуда.Тем не менее, SDK запускает тонны новых потоков внутри, и я думаю, что они меняют мою культуру.

Это действительно раздражает, и я ничего не могу найти где-нибудь об изменении языка для кодировщика.Условия поиска слишком общие, и все, что я получаю, это спецификации на кодировщике.:( Пожалуйста, помогите!

1 Ответ

1 голос
/ 28 сентября 2010

Я нашел ответ, и я так и думал. Кажется, вы не можете изменить язык вывода с Expression Encoder 3. Говорят о поддержке нескольких языков в Expression Encoder 4, но кажется, что, хотя я и не проверял, IIS Smooth Streaming.

Решение состоит в том, чтобы позволить Encoder выводить аудиофайл на английском языке, а затем изменять язык после факта.

Я выполнил это с помощью двух проектов с открытым исходным кодом, сосредоточенных вокруг DirectShow SDK и Windows Media Format SDK. Здесь есть оболочки .NET для обоих из них: DirectShow и WMFormat .

Проект WindowsMediaNet имеет пример проекта под названием WMVCopy. Это копирует один файл WMV в другой, перестраивая заголовки и т. Д. Однако он не перекодирует поток, а просто копирует его из одного файла в другой. Это именно то, что я хотел.

Я изменил код WMVCopy, чтобы изменить язык всех потоков:

int streamCount = 0;
m_pReaderProfile.GetStreamCount(out streamCount);
for (int streamIndex = 0; streamIndex < streamCount; streamIndex++)
{
    IWMStreamConfig stream = null;
    m_pReaderProfile.GetStream(streamIndex, out stream);

    ((IWMStreamConfig3)stream).SetLanguage(language);
    m_pReaderProfile.ReconfigStream(stream);
}

Это перебирает каждый поток и устанавливает язык для указанной строки LCID. Язык должен быть в форме en-us или ca-fr. Часть импорта является частью ReconfigureStream. Этот метод должен быть вызван, чтобы изменение вступило в силу. Вы также должны убедиться, что делаете это после загрузки профиля считывателя.

Я не уверен, что кому-то еще понадобится это сделать. Но если это так, я надеюсь, что это поможет.

...