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 🙂
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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?
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 😉
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Schau dir mal den Link an: stackexchange:Global proxy settings for Windows
Hilft vielleicht weiter das Problem zu umgehen.
Sollte man mal gelesen haben:
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.
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#. 😉
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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:
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...
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:
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.
Unter anderem gibt es da was für http proxies:
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
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 😉
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.
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 🙁
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
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?
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)
- 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?