Laden...

Benötige für Projekt vollständige Proxy-Unterstützung

Erstellt von Padman vor 7 Jahren Letzter Beitrag vor 7 Jahren 5.572 Views
P
Padman Themenstarter:in
52 Beiträge seit 2015
vor 7 Jahren
Benötige für Projekt vollständige Proxy-Unterstützung

Hallo,
für ein Projekt benötige ich vollständige Unterstützung eines Proxies, da das jeweilige Medium nur in einem bestimmten Land verfügbar ist. Leider finde ich dazu gar nichts 🙁

Das jeweilige Medium (Video) soll im VLC-Control geladen werden ( M3U8 ) (ein anderes Control scheint es im Videobereich nicht zu geben, außer den von Microsoft), aber dazu wird ein Proxy benötigt, wie könnte dies umgesetzt werden?

Über Vorschläge oder Beispiele würde ich mich sehr freuen, vielen Dank 🙂

Gruß Padman
16.825 Beiträge seit 2008
vor 7 Jahren

Was Du nimmst, um mit VLC zu sprechen, ergeht aus dem Text hier nicht.
VLC selbst bietet ja kein .NET SDK aber es gibt ein paar Projekte da draußen, die VLC via Interop ansprechen.

Mir ist aber aktuell nicht ganz klar, was für eine Antwort Du Dir nun erhofft hast.
Auf die Frage, wie man sowas umsetzt, kommt eben drauf an, was Du aktuell nutzt.

Es kann gut sein, dass zB. VLC.NET - sofern Du das nutzt - das nicht kann, was Du willst. Jedenfalls findet man in GitHub kein Anzeichen für ne Proxy Unterstützung.
Aber dafür ist das Projekt ja Open Source und frei lizenziert, sodass Du den Quellcode nehmen und anpassen kannst; und im Optimalfall auch anderen wieder zur Verfügung stellen kannst.

Wenn Du Glück hast, dann musst Du nur über den Interop-Weg die Proxy-Settings dem VLC mitteilen.

P
Padman Themenstarter:in
52 Beiträge seit 2015
vor 7 Jahren

Nun ja, VLC bietet ein ActiveX an, das wollte ich zur Not nehmen... Kann man C# nicht mitteilen, dass das der Link via Proxy aufgerufen wird und dann der Videoinhalt geladen wird? Oder mal anders geragt, gibt es überhaupt brauchbare Steuerelemente in Sachen Video außer den WMP und VLC?

Gruß Padman
16.825 Beiträge seit 2008
vor 7 Jahren

Das Control, das die Daten über das Internet/Netwerk lädt, muss ein Proxy bieten. Welches das ist: egal, hauptsache es unterstützt die Kommunikation über Proxies.
Mit "C# irgendwas sagen" - so funktioniert Software Entwicklung leider nicht ganz 😉

P
1.090 Beiträge seit 2011
vor 7 Jahren

Schau dir mal den Link an: stackexchange:Global proxy settings for Windows

Hilft vielleicht weiter das Problem zu umgehen.

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern

P
Padman Themenstarter:in
52 Beiträge seit 2015
vor 7 Jahren

Also bietet C# selber keine Möglichkeit einen Proxy zu verwenden?
Geplant wäre dies hier:
Benutzer stellt Proxy-Daten ein, fehlen diese läuft nix
Alle Verbindungen im erstellten Programm laufen darpber, so könnte hier der Videostream laufen

@Palin
Laut den verlinken Beitrag geht es möglicherweise z.B. vom IE?
Wenn es damit gehen täte, wäre es zu Not ok, aber dennoch wäre es schön, wenn das erstellte Programm eine Verbindung mit dem Proxy aufbauen könnte und darüber den Datenverkehr, hier wären es die Videostreams.

Gruß Padman
16.825 Beiträge seit 2008
vor 7 Jahren

Deine Frage, ob es eine Möglichkeit gibt, dass C# einen Proxy verwendet, ist hinfällig.
C# ist eine Sprache, keine Anwendung. Die Anwendung muss einen Proxy unterstützen, und nicht die Entwicklungssprache.
Der Entwickler muss implementieren, dass ein Proxy genutzt werden kann, und dann auch noch welcher (SocketProxy, HTTP Proxy...). =)

Wenn VLC den Proxyeinstellung des IE erkennt; dann ist das freundlicherweise so von VLC implementiert worden.
Wenn die Anwendung keine Proxyunterstützung hat: dann ist das halt so.

VLC unterstützt sicher Proxies; die Frage ist jetzt nur, wie Du das über C# ansteuern kannst.
Und das kannste dann vermutlich via Interop. Aber deswegen is der Quellcode (zB von VLC.NET) offen und Du kannst es Dir anschauen.

Aber es liegt nicht an C#. 😉

P
1.090 Beiträge seit 2011
vor 7 Jahren

Laut den verlinken Beitrag geht es möglicherweise z.B. vom IE?
Wenn es damit gehen täte, wäre es zu Not ok, aber dennoch wäre es schön, wenn das erstellte Programm eine Verbindung mit dem Proxy aufbauen könnte und darüber den Datenverkehr, hier wären es die Videostreams.

Wenn ich den Beitrag richtig Verstanden haben, kann ich einzelne Anwendungen mit 3 Anbierter Software dazubringen einen Proxy zu verwenden.

You can force individual applications to use proxies, even if the applications themselves don't support proxies, by using tools such FreeCAP or Socksify.

Wenn da funktioniert kannst du mal googeln ob es eine Open Source Lösung gibt, die das macht. Und schauen wie sie es umsetzen.

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern

P
Padman Themenstarter:in
52 Beiträge seit 2015
vor 7 Jahren

Ich danke euch beiden 🙂

Ich meinte, dass der entwickelte Client eine Proxy-Schnittstelle haben sollte und eine Verbindung aufbauen könnte 😉 😁

Leider bin ich in C# nicht so weit 🙁

@Palin
Tjoa, hmm, wenn gar nix hilft, dann eben VPN, darüber müsste ja der gesamte Datenverkehr laufen, also auch das getippselte Programm, was aber nicht der Sinn wäre 🙁

Vielleicht würde es auch reichen, wenn man zur Not halt die Proxy-Daten vom Internet Explorer anzapft damit die gesamte Verbindung im Programm via Proxy geht, immerhin, auch wenn Firefox in einer anderen Sprache geschrieben ist, hat auch eine Schnittstelle 😉 😁

PS: Tut mir Leid dass ich momentan etwas planlos bin... Die Idee im Kopf funktioniert, nur das Umsetzen nicht...

Gruß Padman
P
1.090 Beiträge seit 2011
vor 7 Jahren

Hier mal die C# Implementierung eines Revers Proxys
GitHub:Babalu_rProxy

Wenn ich es beim überfligen richtig verstanden habe, ist er in der Lage einen Client vorzugeben ein angeforderter Server zu sein. Und den Datenverker auf einen anderen Server umzuleiten.

Wenn es so ist solltest du ihn bei dir in die Software integrieren können, so das er dem VLC-Control vorgibt der eigndliche Sever zu sein und du dann den Datenverker umleitest auf deinen Proxy. Vobei du dann nur den Proxy Angeben musst.

Ist warscheinlich nicht tivial, sind deine Anforderungen aber auch nicht. 😉

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern

151 Beiträge seit 2003
vor 7 Jahren

Hi,

benutzte am besten das Projekt was schon oben in Abt's erstem Beitrag verlinkt ist.

Dem VLC control (gibt es für WinForms und WPF) kannst du dann Parameter mitgeben.

Vlc.DotNet

Unter anderem gibt es da was für http proxies:

VLC command line help

Siehe --http-proxy


 HTTP input
      --http-proxy=<string>      HTTP proxy
          HTTP proxy to be used It must be of the form http://[user@]myproxy.myd
          omain:myport/ ; if empty, the http_proxy environment variable will be
          tried.
      --http-proxy-pwd=<string>  HTTP proxy password
          If your HTTP proxy requires a password, set it here.

Gruß,
moson

P
Padman Themenstarter:in
52 Beiträge seit 2015
vor 7 Jahren

Vielen Dank für die Info und so 🙂

Ich bin der Anleitung gefolgt, hatte per NuGet ausnahmsweise VLC.DotNet geholt und alles scheint installiert zu sein. Im Projekt ist jetzt auch das VlcControl und wurde eingefügt, aber sobald ich das Projekt starte, nervt VlcLibDirectory und es muss laut Fehlermeldung etwas angegeben werden... Es soll ja nichts lokales wiedergegeben werden sondern vom Netz 😉

Edit
Ich habe ein neues Projekt erstellt, Version 4.5.2 und die 32-Bit von Vlc.DotNet.Forms.2.1.126 eingefügt, da die 64-Bit nicht möchte> Fehlermeldung:

The file '...\net45\x64\Vlc.DotNet.Forms.dll' is not valid.

Beim compilieren erscheint folgendes:

Fehlermeldung:
1>C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1820,5): warning MSB3270: There was a mismatch between the processor architecture of the project being built "MSIL" and the processor architecture of the reference "Vlc.DotNet.Core, Version=2.1.126.0, Culture=neutral, PublicKeyToken=84529da31f4eb963, processorArchitecture=x86", "x86". This mismatch may cause runtime failures. Please consider changing the targeted processor architecture of your project through the Configuration Manager so as to align the processor architectures between your project and references, or take a dependency on references with a processor architecture that matches the targeted processor architecture of your project.
1>C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1820,5): warning MSB3270: There was a mismatch between the processor architecture of the project being built "MSIL" and the processor architecture of the reference "Vlc.DotNet.Core.Interops, Version=2.1.126.0, Culture=neutral, PublicKeyToken=84529da31f4eb963, processorArchitecture=x86", "x86". This mismatch may cause runtime failures. Please consider changing the targeted processor architecture of your project through the Configuration Manager so as to align the processor architectures between your project and references, or take a dependency on references with a processor architecture that matches the targeted processor architecture of your project.
1>C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1820,5): warning MSB3270: There was a mismatch between the processor architecture of the project being built "MSIL" and the processor architecture of the reference "Vlc.DotNet.Forms, Version=2.1.126.0, Culture=neutral, PublicKeyToken=84529da31f4eb963, processorArchitecture=x86", "x86". This mismatch may cause runtime failures. Please consider changing the targeted processor architecture of your project through the Configuration Manager so as to align the processor architectures between your project and references, or take a dependency on references with a processor architecture that matches the targeted processor architecture of your project.
1>C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1820,5): warning MSB3270: There was a mismatch between the processor architecture of the project being built "MSIL" and the processor architecture of the reference "Vlc.DotNet.Wpf, Version=2.1.126.0, Culture=neutral, PublicKeyToken=84529da31f4eb963, processorArchitecture=x86", "x86". This mismatch may cause runtime failures. Please consider changing the targeted processor architecture of your project through the Configuration Manager so as to align the processor architectures between your project and references, or take a dependency on references with a processor architecture that matches the targeted processor architecture of your project.

Naja, ist schon etwas spät 😉

Gruß Padman
151 Beiträge seit 2003
vor 7 Jahren

Du musst das VLC Verzeichnis angeben.
Steht in der Anleitung unter #12. (sieht man auch im meinem angehängten screenshot)

If you can't get it to work using that method, simply go to the Properties of the VlcControl1. Go down to VlcLibDirectory, click the ellipse, browse to your VLC folder (It will either be "C:\Program Files (x86)\VideoLAN\VLC" or C:\Program Files\VideoLAN\VLC"). Once you finish you can run the program and use VLC in dot net!

Entweder direkt im Designer das VlcLibDirectory setzten oder das VlcLibDirectoryNeeded event abonnieren und entsprechend den Pfad setzen. Siehe "Some additional info" in der WinForms Anleitung.

P
Padman Themenstarter:in
52 Beiträge seit 2015
vor 7 Jahren

Vielen Dank, es funktioniert nun soweit, Proxy und Medium 😁 🙂

Ich hätte noch eine Frage: muss auf dem Ziel-PC VLC installiert sein?

Vielen Dank 🙂

PS: leider bin ich etwas zu ?( aber wie muss das Array für VlcMediaplayerOptions aussehen?
PPS: das Steuerelement scheint ein wenig fehlerhaft zu sein, sobald das Medium geladen wurde, funktionieren die Events nicht mehr 🙁

Gruß Padman
151 Beiträge seit 2003
vor 7 Jahren

Ja. VLC muss auf dem Rechner vorhanden sein (Irgendwie offensichtlich wenn man das VLC Verzeichnis setzten muss...).
Ob es die installierte Variante oder die portable ist, spielt meines Wissens keine Rolle.

VlcMediaplayerOptions ist ein simples string array.
Wie gesagt kannst du dort VLC command line options verwenden.

F.e.

this.vlc.VlcMediaplayerOptions = new string[] 
{
        "--video-filter=deinterlace",
        "--sout-deinterlace-mode=yadif2x"
};

Bei Problemen oder Fragen, nutzte doch einfach den Issue tracker auf der github Seite, bzw. das Kontakt Formular

https://github.com/ZeBobo5/Vlc.DotNet/issues
http://zebobo5.github.io/Vlc.DotNet/#contact

P
Padman Themenstarter:in
52 Beiträge seit 2015
vor 7 Jahren

Vielen Dank.

irgendwie bin ich zu doof, aber in welchem Abschnitt muss der Code liegen damit VLC die Werte ließt? Irgendwie passiert nichts 🙁

Für den Pfad müsste ich auch noch etwas basteln, aber um das umsetzen zu können muss VLC die Werte ebenfallös lesen. Wie könnte es umgesetzt werden, damit VLC den eigenen Code liest und nicht die Werte aus [Design]?

Hier der eigens erstellte Beispiel-Code der ebenfalls ignoriert wird:

vlcControl1.VlcLibDirectory = new DirectoryInfo("C:\\Program Files (x86)\\VideoLAN\\VLC");

Vielen Dank 🙂

PS: gibt es für das Steuerelement eine Art Prüfung ob das Medium aus dem Internet erreichbar ist und warum reagieren zum Beispiel das Kontextmenü oder andere Aktionen (Events) nach dem laden eines Mediums nicht mehr?

Gruß Padman
P
Padman Themenstarter:in
52 Beiträge seit 2015
vor 7 Jahren

Ich habe eben folgendes gemacht, wobei jetzt [Design]-Ansicht damit nicht mehr funktioniert funktioniert, das Programm aber schon.

Designer.cs:

this.vlc.VlcMediaplayerOptions = new string[] {
        _vlcproxy};

Form1.cs:

private string _vlcproxy = "--http-proxy=Benutzer:Passwort@IP:Port";

Fehlermeldung:
The variable _vlcproxy is either undeclared or was never assigned.

Instances of this error (1)

  1. Projekt Form1.Designer.cs Line:79 Column:1

at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.Error(IDesignerSerializationManager manager, String exceptionText, String helpLink)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression)

Es war halt ein Versuch, Programm läuft, Design-Ansicht so nicht.

Frage wäre, warum es damit funktioniert, aber nicht auf dem normalen Wege?

Gruß Padman