передача имени видеоустройства в качестве аргумента dshow

У меня на рабочем столе установлено 2 веб-камеры - Intex USB 2.0 и Logitech Webcam C170. Я использую оболочку libvlc .net и хочу транслировать вторую веб-камеру.

Я создаю playerStream, используя данный пример -

    VlcSinglePlayer playerStream = (VlcSinglePlayer)factory.CreatePlayer(new
                    PlayerOutput(":sout=#transcode{vcodec=h264,vb=256,fps=30,scale=1,acodec=none}:udp{mux=ts,dst=127.0.0.1:8080}"));

    playerStream.SetMediaInput(new MediaInput(MediaInputType.UnparsedMrl, 
                "dshow://:dshow-vdev=\"Webcam C170\" :dshow-adev=none  :live-caching=300 "));

Приведенный выше код работает, но поток, который я захватываю в VLC (udp://@:8080), всегда поступает с первой веб-камеры (Intex USB 2.0), а не с веб-камеры Logitech C170.

Когда я пытаюсь использовать VLC из командной строки, все работает нормально.

Как я могу исправить эту ошибку?


person John Qualis    schedule 29.07.2014    source источник


Ответы (1)


Поскольку он всегда выбирает ваше первое устройство, VLC не должен знать об указанной вами опции устройства, поэтому, скорее всего, где-то в синтаксисе есть ошибка.

Вам просто не хватает пробела после "dshow://"?

У вас есть это:

playerStream.SetMediaInput(
  new MediaInput(MediaInputType.UnparsedMrl, 
    "dshow://:dshow-vdev=\"Webcam C170\" :dshow-adev=none :live-caching=300"));

После «dshow://» и перед следующим двоеточием должен быть пробел:

playerStream.SetMediaInput(
  new MediaInput(MediaInputType.UnparsedMrl, 
    "dshow:// :dshow-vdev=\"Webcam C170\" :dshow-adev=none :live-caching=300"));

Иногда необходимо использовать синтаксис «--», а не «:», поэтому вместо этого может потребоваться следующее:

playerStream.SetMediaInput(
  new MediaInput(MediaInputType.UnparsedMrl, 
    "dshow:// --dshow-vdev=\"Webcam C170\" --dshow-adev=none --live-caching=300"));

Если это все еще не работает, вам нужно обратиться к документации о том, как MediaInputType.UnparsedMrl ожидает свои аргументы. В моих собственных привязках LibVLC здесь только «dshow://» будет считаться «MRL», а все остальное будет параметрами, которые должны передаваться отдельно и явно добавляться к медиа (это другой вызов API под прикрытием).

Некоторые параметры можно (а в некоторых случаях нужно) передавать при создании экземпляра LibVLC. Для этой библиотеки это будет примерно так:

factory = new VlcMediaLibraryFactory (new string[] { 
  "--dshow-vdev=\"Webcam C170\"", 
  "--dshow-adev=none", 
  "--live-caching=300"});
person caprica    schedule 29.07.2014
comment
вопрос не в пространстве. Он по-прежнему дает тот же результат даже без пробела. - person John Qualis; 30.07.2014
comment
Ну тогда я не знаю. Документации по этому проекту не так много. Я все еще думаю, что вы, вероятно, не передаете эти параметры --dshow с dshow:// MRL. Это может сработать, если вы передадите их при создании VLCMediaLibraryFactory в соответствии с кратким руководством. - person caprica; 30.07.2014