Укажите язык вывода звука в Expression Encoder

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

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

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

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


person Jason Sherman    schedule 24.09.2010    source источник
comment
Другой подход, о котором я подумал, - разрешить Expression Encoder кодировать с использованием неправильного языка, а затем изменить язык постфактум. Это решение подойдет, но, опять же, я не могу найти способ сделать это без перекодирования.   -  person Jason Sherman    schedule 27.09.2010


Ответы (1)


Я нашел ответ, и все так, как я думал. Похоже, что вы не можете изменить язык вывода из 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. Этот метод должен быть вызван, чтобы изменение действительно вступило в силу. Вам также необходимо убедиться, что вы сделали это после загрузки профиля читателя.

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

person Jason Sherman    schedule 28.09.2010