kakone / VLC.MediaElement

MediaElement clone powered by VLC
GNU Lesser General Public License v2.1
68 stars 33 forks source link

your input can t be opened vlc is unable to open the mrl #27

Closed touseefbsb closed 7 years ago

touseefbsb commented 7 years ago

your input can t be opened vlc is unable to open the mrl winrt://{....} Check the log for more details, from where can I check the log? and why is this problem caused?

This is the error I get on most of the videos I try to play but some videos are played without any problem.

kakone commented 7 years ago

The log file must be stored in the %LOCALAPPDATA%\Packages\YourApp folder.

touseefbsb commented 7 years ago

I opened the log file but the analysis tab for that file is empty

touseefbsb commented 7 years ago

ok I checked the log file again and dragged analysis from left side side,. and these are repeated error I am seeing whenever a videois failed to play with error "vlc in unable to open mrl" [core] (../../src/video_output/display.c:934) Failed to change zoom [core] (../../src/video_output/display.c:949) Failed to set on top [core] (../../src/video_output/display.c:973) Failed to change source AR [core] (../../src/video_output/display.c:1055) Failed to change Viewpoint [core] (../../src/video_output/display.c:934) Failed to change zoom [core] (../../src/video_output/display.c:973) Failed to change source AR

mfe- commented 7 years ago

Same issue here:

Your input can't be opened VLC is unable to open the MRL http://apasfiisl.apa.at/%%%%/playlist.m3u8 Check the log for deatils

I can't find a *.log file in the Package folder. There is only a binary VLC_MediaElement_Log.etl file. I'm unable to view its content.

kakone commented 7 years ago

The ETL (Event Trace Log) file is a log file. You can open it with the event viewer or another tool (Microsoft Message Analyzer for example).

mfe- commented 7 years ago

Thanks @kakone . I viewed the logs of the *.etl file using MMA, but I cant' find a message related to the error. I'll added the log as zip archive. VLC_MediaElement_Log.zip

kakone commented 7 years ago

error: HTTP/1.1 403 Forbidden: Access is denied.

I think you have the same problem with the VLC Media Player desktop application.

mfe- commented 7 years ago

Currently I'm using the native MediaElement control. First I'm requesting a json file with the HttpClient and setting the necessary AuthorizationHeader. Then I extract the stream link from the json and set the VideoSource of the MediaElement with new Uri("linkfromson");

It seems that the native MediaElement has access to HttpClient session, so the request doesn't result in a 403?

How would I accomplish the above using the vlc:MediaElement @kakone ?

kakone commented 7 years ago

You could add user:pass in your URI (http://user:pass@ip:port/command).

Otherwise, the MediaElement.ShowLoginDialog event should be called if credentials are needed. So, if you subscribe to this event, you can just set the username and password in the DialogResult property of the event args :
e.DialogResult = new LoginDialogResult() { Username = username, Password = password };

mfe- commented 7 years ago

Thanks @kakone . A ShowLoginDialog is not shown.

Using:

        byte[] UserArray = Encoding.ASCII.GetBytes($"{Username}:{Password}");
        HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(UserArray));
        var response = await HttpClient.GetAsync($"{BaseUri}livestreams/24hours?limit=30");

works.

Setting the username and password directly in the URL results in a 403. Maybe only a Header Authetnication is supported by the server?

I noticed that the native MediaElement is using Uri for VideoSource and not String like the vlc:MediaElement.

kakone commented 7 years ago

Yes, it's strange, it should work with the http://username:password@address syntax, it should set the basic authentication header. I can only pass a string to libVLC, there is no other choice, I don't have access to the http client. In VLC.MediaElement, the source is a string because, otherwise, you can't set this syntax (http://username:password@address) with an URI.