vzhd1701 / gridplayer

Play videos side-by-side
GNU General Public License v3.0
1.15k stars 92 forks source link

[Feature request]: Run URL link #15

Closed danrobi11 closed 2 years ago

danrobi11 commented 2 years ago

Suggestion

Hello. Is supporting URL link something planned?

flatpak run com.vzhd1701.gridplayer https://www.twitch.tv/cxmmunity does not work.

vzhd1701 commented 2 years ago

Maybe, but not soon. I was planning GridPlayer to be file-oriented. However, it won't be too hard to implement since VLC supports all kinds of video streaming.

Dean-Corso commented 2 years ago

Hi,

just wanna request some similar function, so could you please add to load / run playlist URLs (HLS/m3u8) (VOD & Live)?So VLC does support it already and you just need to implement it as you said already.Just do it.Would like to watch diffrent stream channels at once in your player instance instead of running diffrent VLC instances at the same time.With your player it would be very practical and comfortable of course.Would be nice if you could add that feature in your next release.Thanks.

makidoll commented 2 years ago

I was looking to do the same thing to see 6 m3u8 streams all together

Dean-Corso commented 2 years ago

Hey again,

listen vzhd1701, why did you still not add the function of VLC player to load playlist files m3u8? This would be the most interesting feature to watch live channels all at once from one player instance only. Without that feature I don't need to use your app. Just add it.

Example: I want to watch 4 or more channels at once like some football conference and for each stream I have to open 4 tabs in browser or 4 VLC player instances (I do paste direct m3u8 urls into) and in this case the handling sucks of course. Now you come around with your gridplayer what could do this already with static files stored on system. Thats ok for all who need it (I do not) but its no highlight you know. Just add the option to load URLs like VLC does already (ctrl+v). Just don't understand what the big deal is when you already use the VLC source. Once again, I'am not the only one who is looking for that feature to load direct file URLs. Just think about it, "live is live" and everthing else is not live and not needed to watch them at once (in most cases). Anyway, maybe I do just talk against walls not finding your attention.

eswiig commented 2 years ago

No need to be rude, there are a lot of feature requests and updates in the works. Respect the developer, he does not owe you to implement any features. Just be happy the dev considers implementing the requested feature sometime in the future.

Or don't use the app if it's not to your liking.

Dean-Corso commented 2 years ago

I'am not rude I'am just talking cleartext and thats the difference and my point of view. I'am just trying to request a "main feature" (few months ago without getting an answer / very respectfull right) what vzhd1701 could build in very simple but I just see a missing will to do that. See the about... Simple VLC-based media player that can play multiple videos at the same time. You can play as many videos as you like, the only limit is your hardware. It supports all video formats that VLC supports (which is all of them). ...and to add the URL support for same is also doable by using VLC source. I think the goal is to build apps for more people and not just only a few and thats the reason why we do send requests to let improve apps and make them more popular. It's not an attack to developer as you do think eswiig. Just think about it.

danrobi11 commented 2 years ago

@Dean-Corso Hi. @vzhd1701 said above he probably will implement the feature in the future. Please dont harass him. That's very rude. You made your point 3 times now already. Again please dont harass him or open your own issue if you want to do that. Thanks!

@eswiig Thank you!

vzhd1701 commented 2 years ago

I will implement this feature, please be patient.

@danrobi11, @eswiig thank you for understanding.

Dean-Corso commented 2 years ago

Listen guys, I'am not rude ok. May be that I'am a little postulating in your understanding but that's not badly intentioned or so you know. Otherwise you should not to be so sensitive in dealing with some criticism posts (only a suggestion). I just talked about the app of vzhd1701 and whats missing in my contemplation and thats all. So if anyone dosen't like the way I talk then it's fine to tell me and I will take note.

@vzhd1701 | Maybe you as dev of that app don't mind too much about my request and how I told you that. If you got somehow injured by my words then I'am sorry. Thanks.

vzhd1701 commented 2 years ago

It's done. GridPlayer can play any URL now. It uses streamlink + yt-dlp to resolve streams.

Sorry that it took so awfully long. Please check out the new version and share how it works for you!

Dean-Corso commented 2 years ago

Hello again vzhd1701,

just wanna say thank you very much for adding the URL / Streaming support in your player. I tried to play around with your new version and seems to work pretty well. I was just loading some TV stream playlists I have and some YT urls. Good idea to implement the yt-dlp tool. I will test go on and send later some more feedback if I found some issues or something but my first test looks already very good and you made it so like I wanted. 😄 Thank you very much vzhd1701. No problem, some things need time and the results of your new player version are great so far.

Dean-Corso commented 2 years ago

Hi vzhd1701,

ok so I have test your latest version a lot now and found some issues.

1.) "(11596) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization". So this error I get offten when trying to load any stream (direct or master) or webpage (no difference what to use here) and I don't know why I get this error because all of them getting loaded fine when using VLC itself (playlist file/s) or using yt-dlp (CLI) itself to play it. All works so far but not in your player. Thats pretty annoying. Just would like to know how you do run yt-dlp with the URL and which parameters. So in my test I was just using default params no extra commands etc = all working / playing in CLI version. Just check this again to find the problem and fix it. Sometimes I need to repeat F5 loading the stream/webURL very offten in your player to make it work after X times. The process is also aborting very quick. I think there is maybe any issue with the buffering or so but this you need to fix. In some cases if it works after long trying the stream isn't playing very liquid (in browser it does) and stops/plays etc. Also in other cases the stream video quality looks strange and not original. At the bottom I have seens some not clean image information etc not sure how to call that but it looks like smudged or so (just in your player only).

Question: What about the decoder options in your player? Could you explain them a little? Hardware VLC 3.0.16 I have enabled with 2 video per process. What does this mean? So I'am using VLC very long and in my codec settings (simple view) I have set the HW accelerator decode to automatic & enabled "fast decode" too (just using german language not english) and the strongness I have set to 6 and set the h.264 deblocking to ALL. So this is my basic setting to get a liquid playing but in some cases I need to set the HW decode to disabled like when trying to play 4K videos to get them playing liquid but then the quality is more bad and I can see much artefacts more or less on playing. How to setup your player now to do some similar decode setting?

Question: Why are you using both tools Streamlink & yt-dlp? Just in case if one them fails so I think right. As I can see you did set streamlink at first place to handle the URL input and after this comes yt-dlp. Could it make sense to make a option in your setting to choose between both tools which should be used in first place? So I would prefer yt-dlp.

In some cases I also see some differences playing some streams in your player and using the CLI yt-dlp version itself. Some streams needs to run 2 streams at once for video&audio and in your player it does just play the video stream alone withou audio. Not sure whether it was playing with yt-dlp or streamlink in that case in your player but with yt-dlp CLI version it did work to play. Below a example HLS URL you can test... https://zdf-hls-15.akamaized.net/hls/live/2016498/de/high/master.m3u8 Results of yt-dlp are...

ID                                                    EXT RESOLUTION FPS │   TBR PROTO  │ VCODEC        VBR ACODEC     MORE INFO
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
A1.1_A2.1_A3.1-1266820252-Audio-Deskription           mp4 audio only     │       m3u8_n │ audio only        unknown    [deu] Audio-Deskription
A1.1_A2.1_A3.1-1266820252-Klare_Sprache___Originalton mp4 audio only     │       m3u8_n │ audio only        unknown    [mul] Klare Sprache / Originalton
A1.1_A2.1_A3.1-1266820252-TV_Ton                      mp4 audio only     │       m3u8_n │ audio only        unknown    [deu] TV Ton
A1.1_A2.1_A3.1-510682780-Audio-Deskription            mp4 audio only     │       m3u8_n │ audio only        unknown    [deu] Audio-Deskription
A1.1_A2.1_A3.1-510682780-Klare_Sprache___Originalton  mp4 audio only     │       m3u8_n │ audio only        unknown    [mul] Klare Sprache / Originalton
A1.1_A2.1_A3.1-510682780-TV_Ton                       mp4 audio only     │       m3u8_n │ audio only        unknown    [deu] TV Ton
581-0                                                 mp4 480x270     25 │  581k m3u8_n │ avc1.4d401f  581k video only
581-1                                                 mp4 480x270     25 │  581k m3u8_n │ avc1.4d401f  581k video only
969-0                                                 mp4 640x360     25 │  969k m3u8_n │ avc1.4d401f  969k video only
969-1                                                 mp4 640x360     25 │  969k m3u8_n │ avc1.4d401f  969k video only
1807-0                                                mp4 960x540     25 │ 1807k m3u8_n │ avc1.4d401f 1807k video only
1807-1                                                mp4 960x540     25 │ 1807k m3u8_n │ avc1.4d401f 1807k video only
3544-0                                                mp4 1280x720    50 │ 3544k m3u8_n │ avc1.640028 3544k video only
3544-1                                                mp4 1280x720    50 │ 3544k m3u8_n │ avc1.640028 3544k video only

...so in case using yt-dlp CLI with that master URL video&audio getting played but audio dosen't match with video only if I use video&audio IDs manually and start them with param -f then its working like (-f 3544-1+A1.1_A2.1_A3.1-510682780-TV_Ton). Anyway, just want to tell you that here is a difference when using your player (just get video) and using yt-dlp itself (default).

Error log: So the most errors I get are those "Video stopped before initialization" as I told above already so this you must really get fixed vzhd1701. Below a list of few of them using other error codes (code) I think. Maybe this will help you to recognize the error issues and to fix them.

(19852) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
(12812) | PlayerProcessSingleVLCSW | ERROR | Video stopped before initialization
(11596) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
(13004) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
(10328) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
(12168) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
(13288) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
(10268) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
(12440) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
 (7624) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
 (6240) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
 (3324) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
 (6884) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
 (2580) | PlayerProcessSingleVLCHWSP | error | Video stopped before initialization

Otherwise your app is very cool and if it works it works fine to play the streams. Just love it so far. Just try to fix that error problems above and then it should be work much better. Thank you.

vzhd1701 commented 2 years ago

Thank you for giving it a fair shake and sharing your analysis!

I need to repeat F5 loading the stream/webURL very offten in your player to make it work after X times In some cases if it works after long trying the stream isn't playing very liquid Also in other cases the stream video quality looks strange and not original So the most errors I get are those "Video stopped before initialization"

Could you share the sample links where each of these problems occur?

https://zdf-hls-15.akamaized.net/hls/live/2016498/de/high/master.m3u8

This one gives me 403 error.

What about the decoder options in your player?

I explained it briefly here. The problem is that when I use libVLC to spawn multiple instances/players within the same process it causes strange CPU usage spikes which kill the performance and make player unusable. As a workaround I split VLC instances into separate processes, so each one can stay below the threshold after which it starts to lag. After experimenting with the number of instances I found that 4 instances per process is optimal.

There is Hardware SP mode which spawns player instances within the same process, but I don't recommend using it. I had to implement it for macOS, because the OS won't allow rendering on windows from one process to another, which is required for multi-process HW mode to work.

As for software mode, libVLC has a way of decoding videos directly to memory completely bypassing any GPU involvement. It is mostly just an experimental function, because it's very bad at handling high-res videos. But it's useful if you need to play a lot of tiny videos.

I have set the HW accelerator decode to automatic & enabled "fast decode" too

I can add separate section into settings that will allow fine tuning VLC if you think it's useful. I just wanted to keep the player as simple as possible, so I didn't expose those.

Why are you using both tools Streamlink & yt-dlp?

Both projects provide a lot of plugins and are well maintained, so why not use both? Also streamlink is better at handling twitch (cutting out ads) and yt-dlp is better at extracting from youtube. I will add a setting where you will be able to add URL filter to select preferable module to use.

In some cases I also see some differences playing some streams in your player and using the CLI yt-dlp version itself. Some streams needs to run 2 streams at once for video&audio and in your player it does just play the video stream alone withou audio.

I am afraid that GridPlayer can't handle those formats where audio and video are separated. Currently it's trying to extract track where audio & video are muxed into single stream. If none are found, then it just grabs whatever is available. libVLC doesn't support adding multiple tracks as streaming URLs. It can handle external track as local files, but it doesn't work for URLs. I will experiment with spawning a parallel instance that will play audio in sync, but I have a bad feeling that this method will cause terrible audio sync issues.

Dean-Corso commented 2 years ago

Hi vzhd1701,

so the problem to get that error "Video stopped before initialization" happens really very offten and seems to come from VLC code (I did turn on the VLC Error log). Here a log of a failed load...

2022-06-27 20:46:03,005 (6632) | VLC | ERROR | main: option marq-color does not exist
2022-06-27 20:46:03,019 (6632) | VLC | ERROR | main: option marq-opacity does not exist
2022-06-27 20:46:03,020 (6632) | VLC | ERROR | main: option marq-position does not exist
2022-06-27 20:46:03,020 (6632) | VLC | ERROR | main: option marq-refresh does not exist
2022-06-27 20:46:03,020 (6632) | VLC | ERROR | main: option marq-size does not exist
2022-06-27 20:46:03,020 (6632) | VLC | ERROR | main: option marq-timeout does not exist
2022-06-27 20:46:03,020 (6632) | VLC | ERROR | main: option marq-x does not exist
2022-06-27 20:46:03,021 (6632) | VLC | ERROR | main: option marq-y does not exist
2022-06-27 20:46:03,021 (6632) | VLC | ERROR | main: option logo-x does not exist
2022-06-27 20:46:03,021 (6632) | VLC | ERROR | main: option logo-y does not exist
2022-06-27 20:46:03,021 (6632) | VLC | ERROR | main: option logo-delay does not exist
2022-06-27 20:46:03,021 (6632) | VLC | ERROR | main: option logo-repeat does not exist
2022-06-27 20:46:03,021 (6632) | VLC | ERROR | main: option logo-opacity does not exist
2022-06-27 20:46:03,021 (6632) | VLC | ERROR | main: option logo-position does not exist
2022-06-27 20:46:03,021 (6632) | VLC | ERROR | main: option contrast does not exist
2022-06-27 20:46:03,021 (6632) | VLC | ERROR | main: option brightness does not exist
2022-06-27 20:46:03,021 (6632) | VLC | ERROR | main: option hue does not exist
2022-06-27 20:46:03,021 (6632) | VLC | ERROR | main: option saturation does not exist
2022-06-27 20:46:03,021 (6632) | VLC | ERROR | main: option gamma does not exist
2022-06-27 20:46:03,021 (6632) | VLC | ERROR | main: option amem-format does not exist
2022-06-27 20:46:03,022 (6632) | VLC | ERROR | main: option amem-rate does not exist
2022-06-27 20:46:03,022 (6632) | VLC | ERROR | main: option amem-channels does not exist
2022-06-27 20:46:03,022 (6632) | VLC | ERROR | main: option equalizer-preset does not exist
2022-06-27 20:46:05,839 (6632) | VLC | WARNING | main: cannot insert stream filter prefetch,cache_block
2022-06-27 20:46:05,840 (6632) | VLC | WARNING | main: cannot insert stream filter record
2022-06-27 20:46:05,841 (6632) | VLC | ERROR | main: option quiet does not exist
2022-06-27 20:46:05,847 (6632) | VLC | ERROR | avcodec: Could not open \\edge8-hel.live.mmcdn.com\live-hls\..._trns_h264\chunklist_w1268080265_b7128000_t64RlBTOjYwLjA=.m3u8: Invalid argument
2022-06-27 20:46:05,894 (6632) | VLC | WARNING | ps: this does not look like an MPEG PS stream, continuing anyway
2022-06-27 20:46:05,896 (6632) | VLC | WARNING | ps: garbage at input from 193, trying to resync...
2022-06-27 20:46:05,897 (6632) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization

...so right now I was trying to load four webcam streams and all failed to load avcodec stream. So you can try to verify this problem by yourself so just go to chaturbate.com website and copy any URL from any model and load the URL in your player like this.. "https://chaturbate.com/hayleex/" etc. So yt-dlp does support this site as you can see in the Supported sites list. Maybe some words about the streams itself...

#EXTM3U
#EXT-X-VERSION:4
#EXT-X-STREAM-INF:BANDWIDTH=488000,NAME="FPS:30.0",CODECS="avc1.42c015,mp4a.40.2",RESOLUTION=426x240
chunklist_w382011484_b448000_t64RlBTOjMwLjA=.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1258000,NAME="FPS:30.0",CODECS="avc1.4d401f,mp4a.40.2",RESOLUTION=854x480
chunklist_w382011484_b1148000_t64RlBTOjMwLjA=.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=3396000,NAME="FPS:30.0",CODECS="avc1.4d401f,mp4a.40.2",RESOLUTION=1280x720
chunklist_w382011484_b3096000_t64RlBTOjMwLjA=.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=5046000,NAME="FPS:60.0",CODECS="avc1.4d4020,mp4a.40.2",RESOLUTION=1280x720
chunklist_w382011484_b4596000_t64RlBTOjYwLjA=.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=7828000,NAME="FPS:60.0",CODECS="avc1.64002a,mp4a.40.2",RESOLUTION=1920x1080
chunklist_w382011484_b7128000_t64RlBTOjYwLjA=.m3u8
    Stream #0:13: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 60 fps, 60 tbr, 90k tbn, 120 tbc
    Metadata:
      variant_bitrate : 7828000
    Stream #0:14: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp
    Metadata:
      variant_bitrate : 7828000

...as you can see they using avc codec for video and VLC should normally have no problems to handle it. Just test it by yourself to find out what the problem is and how to fix it.

Sorry for that 403 problem you got with the TV Stream URL I did post. Just forgot the countries restrictions such TV channels have so you can just check it with any German IP but anyway, just forget this stream URL I did post.

Thanks for the infos about decoder settings. Sure it would be nice if you could add more settings for decode options just for users who want it (like me). No problem if you want to keep your player simple so just let the default settings original like now and users like me could adjust & test more speicifc settings if we / they want.

I have some more little questions & requests if you don't mind. So I see if I load a YT URL then you do play the HD 720p stream and you have mostly just another 360p & 144p the user can choose. What about those other stream qualities? It seems you do use yt-dlp for youtube and just picking the streams which also have both streams (Audio&Video) inside. So that means we can not watch YT videos higher as 720p but I think this is also OK so far for YT.

Requests1: Could you add a stay on top option to keep your player on top. Request2: Could you add a MONO option choice for every single player to enable mono audio & also maybe a MONO audio option in the settings itself to set all playing streams to Mono audio as default. Now you will ask why mono right, because some streams running just with one audio channel left or right or some channel is louder or quieter whats really bad to hear streams on that way and in such cases I need to switch to mono audio to make both channels same good like you can do in VLC too. Request3: Just add a simple PASTE button in your Add URLs window to paste URL/s via button quickly without to use right mouse / paste or strg+v shortcut you know.

So I think thats it at the moment to send your some feedbacks. So I hope I could help you a little so that you can also find the main problem "Video stopped before initialization" in your player source and fix it soon. Thank you.

Dean-Corso commented 2 years ago

Hi vzhd1701,

just wanna ask whether you could check this problem already why your app is failing to load streams with those "Video stopped before initialization" & VLC errors. Thats pretty bugging to repeat the reload/ F5 key in loop til it works maybe after +/- 10 times sometimes you know. Did you found something out what the reason is? Thanks.

vzhd1701 commented 2 years ago

Yes, I fixed the issue with HLS streams. GridPlayer will proxify them using Streamlink when possible to ensure faster opening time and smooth playback. This is different from URL resolving, you will be able to resolve links through yt-dlp. It will use Streamlink HLS handling mechanism after m3u8 URL is resolved. I also had to implement the proxification because some services require cookies, which libVLC can't handle by itself.

As for VLC errors that you are getting. I think the problem is that the VLC version which is bundled in AppImage is too old. I'll redo the AppImage build script to compile latest VLC from scratch. I would recommend using flatpak for now if possible, since it has the latest VLC.

vzhd1701 commented 2 years ago

I improved the way GridPlayer handles streams, so a lot of problems should go away hopefully.

I also overhauled AppImage build script. It bundles latest version of VLC now. Some of those "option xxx does not exist" will stay, but that's OK. They are caused by some plugins that I have stripped off.

About your requests. You can select which resolver plugin has the priority. You can add advanced VLC options. I also added paste button to add url dialog. Sorry, I forgot about stay on top & mono options, will put them in the next release.

Please check out the new version and tell how it works for you.

Dean-Corso commented 2 years ago

Hello vzhd1701,

thank you very much for your new update. 😃 I did test your new version and it seems to work much better now. The paste button is also better now. Also to have a choice to set which resolver to use for specific hosts is also a good new feature. I found some new issues we need to talk about a little.

Maybe you could explain the direct resolver. Is the direct resolver just the VLC engine what does handle the stream/URLs by itself? I think so right. So somehow this direct resolver is not working good and fails pretty much what not happens when I paste same URLs in VLC player itself. Maybe you could check this direct resolver later again a little more if possible (I can test & send you URLs etc if you need to test by yourself). The other YT & SL resolver working fine so far (yet / quick tests). I still got a problem with some streams and they are showing not correctly as I told before (smudges in 1/3 below area of video). The strange thing is when I have this smudges problem (test streams from CB site) then I can switch the stream quality to any other (1080p highest in this case shows video stream smudges / bad) lower stream quality like 720p or lower and now all is shown correctly but when I now switch back to highest 1080p then the smudges are also back again. I think there is something of VLC not working right or wrong set or something no clue.

Now I wanted to test your VLC options I can enter CLI commands right. So I tried to enter any CLI command like this.."--sout-mono-downmix" to make a mono sound but this fails when loading a URL and your entire app does crash with some unhandled exception window infos....

Traceback (most recent call last):
  File "gridplayer\player\managers\video_driver.py", line 80, in crash
gridplayer.exceptions.PlayerException: Traceback (most recent call last):
  File "gridplayer\multiprocess\instance_process.py", line 77, in run
  File "gridplayer\multiprocess\instance_process.py", line 94, in process_body
  File "gridplayer\vlc_player\instance.py", line 51, in init_instance
  File "gridplayer\vlc_player\instance.py", line 151, in init_instance
RuntimeError: VLC failed to initialize

So I can enter any CLI like and it just always crashs the app. So I'am using your portable app just as info. Maybe you can check this out and tell me / us why its crashing or whether I did enter something wrong etc you know. You can also add some example lines the user can enter like you did with the wildcards in resolver settings. By the way, some tiny another examples about HOST / URL / REGEX would be also nice. I think thats all so far at the moment I have test. Maybe one more thing / request. Could you maybe add another "F" icon next to the "X" icon on the video windows to switch to fullscreen mode and back? Anywhere there maybe so this would be nice because I'am no fan of using keyboard shortcuts all the time. I also have another idea about a URL / Playlist window showing the user to select and load URLs manually / single. I know you have the Playlist the user can save & load all at once but what if I want to load just one or few stream channels and not all? Lets say I have 6 stream TV channels saved in my playlist and now I want to load just the playlist in a user window to see all channel entrys which the user now can select (one or more / multiselect) to load them. Something like this you know. Would be nice in case of saving playlists with many more channels like +20 and not loading all of course. Just think about it whether you think its a good idea or not. Oh, I have another small idea I almost forgot to tell you. So in my case I'am using the defaul view with Aspect Mode Fit. In this case I can not see all of the video resolution when playing few streams at once. So would it be possible for you to add a function to move the video in the video window to all directions just to make the areas visible for me as user. Lets say I just see something of the middle of the video stream and now I just want to move this video in its own window around etc you know what I mean? Alright, now its all for the moment. Just tell me what you think about it. Thank you.

vzhd1701 commented 2 years ago

Maybe you could explain the direct resolver.

Using direct resolver just sends raw link to the VLC player. It can't handle any youtube/twitch links though, because I removed those plugins from the VLC. But it should handle regular mp4/m3u8 streams. Please send example links that fail in GridPlayer but work OK in VLC.

I still got a problem with some streams and they are showing not correctly as I told before (smudges in 1/3 below area of video).

Could you send me the example links for which you get this problem?

Now I wanted to test your VLC options I can enter CLI commands right

Not all options will work. --sout-* options are related to VLC streaming/transcoding mode, which is not used by GridPlayer. Try using --stereo-mode option. What do you want to achieve? Do you want to play audio in one speaker only?

You can also add some example lines the user can enter like you did with the wildcards in resolver settings. By the way, some tiny another examples about HOST / URL / REGEX would be also nice.

OK, I'll add more examples for wildcards. Regex is an advanced feature, I'll just put a link to regex101 if user wants to learn how to use them.

Could you maybe add another "F" icon next to the "X" icon on the video windows to switch to fullscreen mode and back?

This will be confusing. Since player is designed to play multiple videos I'll have to put it in every video box. You have Fullscreen command in context menu.

I also have another idea about a URL / Playlist window showing the user to select and load URLs manually / single

I think this will also be confusing. Why not just keep multiple playlists? The main idea of GridPlayer was to have a quick way to save videos with their playback states. With this selective playlist mode, some videos will be hidden. I have to think about this one.

Dean-Corso commented 2 years ago

Hi vzhd1701,

Please send example links that fail in GridPlayer but work OK in VLC.

It seems that the VLC direct mode has already problems to handle direct master playlists itself so they do fail with buffering timeout. In the master playlist are one or more streams listed VLC does pick by itself to play the best one I think. So in your player I get this error log...

2022-07-15 23:29:33,805 (12344) | VLC | ERROR | main: option marq-color does not exist
2022-07-15 23:29:33,805 (12344) | VLC | ERROR | main: option marq-opacity does not exist
2022-07-15 23:29:33,805 (12344) | VLC | ERROR | main: option marq-position does not exist
2022-07-15 23:29:33,805 (12344) | VLC | ERROR | main: option marq-refresh does not exist
2022-07-15 23:29:33,805 (12344) | VLC | ERROR | main: option marq-size does not exist
2022-07-15 23:29:33,806 (12344) | VLC | ERROR | main: option marq-timeout does not exist
2022-07-15 23:29:33,806 (12344) | VLC | ERROR | main: option marq-x does not exist
2022-07-15 23:29:33,806 (12344) | VLC | ERROR | main: option marq-y does not exist
2022-07-15 23:29:33,806 (12344) | VLC | ERROR | main: option logo-x does not exist
2022-07-15 23:29:33,806 (12344) | VLC | ERROR | main: option logo-y does not exist
2022-07-15 23:29:33,806 (12344) | VLC | ERROR | main: option logo-delay does not exist
2022-07-15 23:29:33,806 (12344) | VLC | ERROR | main: option logo-repeat does not exist
2022-07-15 23:29:33,807 (12344) | VLC | ERROR | main: option logo-opacity does not exist
2022-07-15 23:29:33,807 (12344) | VLC | ERROR | main: option logo-position does not exist
2022-07-15 23:29:33,807 (12344) | VLC | ERROR | main: option contrast does not exist
2022-07-15 23:29:33,807 (12344) | VLC | ERROR | main: option brightness does not exist
2022-07-15 23:29:33,807 (12344) | VLC | ERROR | main: option hue does not exist
2022-07-15 23:29:33,807 (12344) | VLC | ERROR | main: option saturation does not exist
2022-07-15 23:29:33,807 (12344) | VLC | ERROR | main: option gamma does not exist
2022-07-15 23:29:33,807 (12344) | VLC | ERROR | main: option amem-format does not exist
2022-07-15 23:29:33,808 (12344) | VLC | ERROR | main: option amem-rate does not exist
2022-07-15 23:29:33,808 (12344) | VLC | ERROR | main: option amem-channels does not exist
2022-07-15 23:29:33,808 (12344) | VLC | ERROR | main: option equalizer-preset does not exist
2022-07-15 23:29:33,998 (12344) | VLC | WARNING | main: cannot insert stream filter prefetch,cache_block
2022-07-15 23:29:34,000 (12344) | VLC | WARNING | main: cannot insert stream filter record
2022-07-15 23:29:34,020 (12344) | VLC | ERROR | main: option quiet does not exist
2022-07-15 23:29:34,362 (12344) | VLC | WARNING | main: cannot insert stream filter prefetch,cache_block
2022-07-15 23:29:34,363 (12344) | VLC | WARNING | main: cannot insert stream filter record
2022-07-15 23:29:34,368 (12344) | VLC | ERROR | main: option quiet does not exist
2022-07-15 23:30:03,235 (12344) | EventWaiter | ERROR | Waiting for buffering timed out after 29 seconds
2022-07-15 23:30:03,235 (12344) | PlayerProcessSingleVLCHW | ERROR | Buffering timeout

Example Stream Master URL (German TV Channel / I hope it will work for you / outside of Germany). Below the master playlist.. https://bild.personalstream.tv/v1/master.m3u8 ...so this fails in your player but works in VLC itself what does play the first stream 360p URL inside of master URL...

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=1125872,AVERAGE-BANDWIDTH=990000,CODECS="avc1.77.30,mp4a.40.2",RESOLUTION=640x360,FRAME-RATE=25.000
https://broadcast.bild.personalstream.tv/v1/manifest/e237d596efe8bf8a700f8f91f1de8bbe03e0fe29/bildtv-broadcast-prod/bfd16bba-788a-4b2d-b68e-68f22edfb8be/0.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=2182400,AVERAGE-BANDWIDTH=1900800,CODECS="avc1.77.30,mp4a.40.2",RESOLUTION=768x432,FRAME-RATE=25.000
https://broadcast.bild.personalstream.tv/v1/manifest/e237d596efe8bf8a700f8f91f1de8bbe03e0fe29/bildtv-broadcast-prod/bfd16bba-788a-4b2d-b68e-68f22edfb8be/1.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=2948000,AVERAGE-BANDWIDTH=2560800,CODECS="avc1.64001f,mp4a.40.2",RESOLUTION=1280x720,FRAME-RATE=25.000
https://broadcast.bild.personalstream.tv/v1/manifest/e237d596efe8bf8a700f8f91f1de8bbe03e0fe29/bildtv-broadcast-prod/bfd16bba-788a-4b2d-b68e-68f22edfb8be/2.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=7158800,AVERAGE-BANDWIDTH=6190800,CODECS="avc1.640028,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=25.000
https://broadcast.bild.personalstream.tv/v1/manifest/e237d596efe8bf8a700f8f91f1de8bbe03e0fe29/bildtv-broadcast-prod/bfd16bba-788a-4b2d-b68e-68f22edfb8be/3.m3u8

...and then VLC does switch automatically to highest stream 1080p. Problem is that VLC itself does handle it and your VLC source does not and fails with a buffer error. Somehow it must hung on any point reading the playlist content URLs etc and does just stop to work go on. Otherwise when I try to play any of those direct stream URLs then it works to play them. Just wanna say that the raw direct URLs are working to play directly but master playlist URLs are not working in direct mode but they should also work to play in direct mode because VLC itself can handle / play them too. Maybe you can check this out again if possible so that would be nice. But not all direct stream URLs are working in direct mode. In case of chaturbate website it fails with all (master & direct chunklist URLs) with a "Video stopped before initialization" error (I tried it few times)...

2022-07-15 23:45:59,066 (7028) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
2022-07-15 23:46:02,932 (1812) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
2022-07-15 23:46:04,972 (12520) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
2022-07-15 23:46:38,172 (4848) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
2022-07-15 23:46:44,656 (14004) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
2022-07-15 23:46:46,747 (4912) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
2022-07-15 23:46:48,566 (13976) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
2022-07-15 23:47:37,484 (11660) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization

...but VLC itself does play them. So this website is good for testing streams with your player. Just check this out til you got it work in your player.

Could you send me the example links for which you get this problem?

Also here you can look on CB website. Problem is that this wrong showing / decode / smudges 1/3 below of the screen not happens on all cam streams. Just found few of them by checking diffrent streams on that site but did not notice the stream channel / name yet. I will check this problem go on and trying to log the channel / names go on to see whether it always happens on same channel or not. I will send some more infos about that problem later.

Not all options will work. --sout-* options are related to VLC streaming/transcoding mode, which is not used by GridPlayer. Try using --stereo-mode option. What do you want to achieve? Do you want to play audio in one speaker only?

Ok I tried using not stdout commands but in your player it does not work. I created a audio mp3 file with total silence on left channel and music on right channel. Now I tried to execute VLC itself with commandline and found out that this commandline does work as MONO "--stereo-mode=7". Just use value 7 does set VLC to MONO in audio options. Value 7 is not documented...

      --stereo-mode={0 (Unset), 1 (Stereo), 2 (Reverse stereo), 3 (Left), 4 (Right), 5 (Dolby Surround), 6 (Headphones)} 
                                 Stereo audio output mode

....but if you use 7 with VLC as commandline then see into audio / stereo modus / Mono <--- set. So you can verify that. Now I did add this one commandline into your app but its not playing MONO like it does in VLC itself. Just check this again. Info, I'am using VLC 3.0.16 Vetinari. Not sure whether this is important or not. Just wanna say the commandline works in VLC but not in your app. So for myself I want to set to mono in cases when files/streams are just using one channel which is pretty bad. Otherwise for people who just hearing nothing anymore at one side (left or right hearing numb etc) the mono function would help very much to make sound on both sides (left & right). So for me its important to have a mono option. Just check out why the VLC commandline is not working in your player.

OK, I'll add more examples for wildcards. Regex is an advanced feature, I'll just put a link to regex101 if user wants to learn how to use them.

Ok, just make some little examples for all of them. Yes the regex site I also use sometimes. 😃 What about URL wildcard? How much or offten I can use the asterix * in URL? Anyway, just make some little example URLs +/- whats possible you know just to be sure and having examples.

This will be confusing. Since player is designed to play multiple videos I'll have to put it in every video box. You have Fullscreen command in context menu.

Hhmm, but in all video window you can also see the X icon to close the video/stream. Whats the diffrent putting also a F icon there? Just imagine, you put a F icon also on every video window and its just working as switch command ON/OFF or 0&1. When the app window is small and you press on F then you player should switch into FullScreen mode and if you press again then it should switch back etc. In this case I don't need to use F shortcut or using mouse/right click and choosing F enty to switch. Main goal is it to make it handy / simple. Similar like you did add the paste button for URL/s to save right mouse click / paste execution. If you use some functions very offten then its much better to have buttons for specific functions (I do add in my own apps mostly). Of course this idea is just a idea not must have to add.

I think this will also be confusing. Why not just keep multiple playlists? The main idea of GridPlayer was to have a quick way to save videos with their playback states. With this selective playlist mode, some videos will be hidden. I have to think about this one.

Yes of course you should keep multible playlist files. This feature is good. Just was talking about not to start playing & load them all at once when loading a playlist file. Anyway, maybe just another idea I just have and maybe not pretty well for others. I will think about it too some more and maybe I have some better idea for this later. Alright, so I hope you don't mind reading my long post now. Just keep going and send some feedback about your possible progress in finding & fixing problems. Thank you.

vzhd1701 commented 2 years ago

I figured out what is the problem with playing m3u8 streams directly, the fix will be in the next version. For now I would recommend using a resolver for them, it splits m3u8 stream and recombines it with option to select stream quality. I am afraid it won't have auto-adaptation function in this mode, but it should open those streams at least.

Whats the diffrent putting also a F icon there?

The point is that controls in one video box should be related to that video box only, not the whole player. F icon in a video box that makes the whole player switch fullscreen mode would be illogical IMHO. The implement your idea I will need to create my own window frame instead of using OS-native and add fullscreen button there, something like this. Will implement it in the future.

Thank you for your patience and your help with testing and debugging my glitchy app :)

vzhd1701 commented 2 years ago

The problem with direct HLS streams should be fixed now. Please check out version 0.4.2.

Dean-Corso commented 2 years ago

Hi again,

I have test your latest 0.4.2 portable version x64 but nothing changed. Still not working to play many direct streams HLS and master playlists in direct mode. 😢 Same error infos as before too. Did you test it?

2022-07-16 23:37:32,412 (11420) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
2022-07-16 23:38:21,811 (10312) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
2022-07-16 23:38:46,758 (12180) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
2022-07-16 23:38:50,768 (8980) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
2022-07-16 23:38:51,836 (4220) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
2022-07-16 23:39:45,327 (12180) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
2022-07-16 23:39:48,329 (6688) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
2022-07-16 23:39:49,381 (12124) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
2022-07-16 23:40:02,544 (6660) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
2022-07-16 23:40:03,722 (11116) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
2022-07-16 23:40:04,684 (7796) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
2022-07-16 23:40:05,760 (11172) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
2022-07-16 23:40:07,027 (7604) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
2022-07-16 23:40:08,058 (4104) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization
2022-07-16 23:42:43,804 (8664) | PlayerProcessSingleVLCHW | ERROR | Video stopped before initialization

VLC does play but your app fails. What about the commandline arguments, did you check this? I see its still not working when I use ""--stereo-mode=7". Just check this again so maybe you did overlook anything or etc but for me I don't feel any difference compared to verson 0.4.0. Thank you.

vzhd1701 commented 2 years ago

Sorry, you are correct, it didn't work with portable version. I only tested it in development environment.

I rebuilt the portable & installer now. I tested --stereo-mode=7 with audio file that only has left channel and it works OK - sound is converted to mono and played on both channels. I also tested https://bild.personalstream.tv/v1/master.m3u8 url in direct mode and it also works OK.

The problem was that I stripped too many VLC plugins to make the release package smaller.

Please re-download the package from the latest release and tell me how it works for you.

Dean-Corso commented 2 years ago

Hey vzhd1701,

ah ok so I thought already that there was anything going wrong on your side with the update. 😃 Nice that found the problem and updated your portable package. I have to say that now everything works so far very very nice on my first quick tests. Also the mono sound working now with the added VLC commandline. Well done my friend. So I will test your latest version go on and send some more feedback later also about that smudges problem in some cases. Thank you very much and keep going with that great app.

PS: Just have another possible request about URL path & files paths the user did use to play them in your app. So I see when I close any file or stream then they are gone and there is no recent list to re-load them. So my idea is that you could add a setting point in your setting menu to enable / disable to store all file/url paths and when a user does enable this function (I do) then you could just show another 2 buttons in the Add URL(s) window after the PASTE button (drop down menu to choose a URL) to load and another button to CLEAR all recent URLs from list. Maybe just adding this in the URL window. What do you think about that? Sometimes I do work with many stream URLs and don't wanna do a copy/paste move from outside of your app into your app etc you know. Would be good to have a option to choose last used URLs in your app directly like you can also do in other app who saving recent last loaded files etc you know. If you think the idea is good / ok to add then add as minimum 20 recent last entrys or more etc.

Dean-Corso commented 2 years ago

Hi vzhd1701,

so I would like to request another new function. Now your app is working pretty well so far and I think it would be a good idea to add a record & download function. The tools you need for this you have already build-in. What do you think?

Idea: Just put a record button or context menu entry for live streams and for not live streams put and show a download button instead. You can make it pretty simple just to record / download the mpeg ts data stream to file (original data / raw) without to do any encodings etc. In case of not live streams like youtube videos & Co you can use YT-dl or streamlink to download the video in desired Stream Quality the user has set in settings or use the stream quality the user is watching for that stream etc something like this. What do you say? First its just the idea only and you will know better how to manage it if possible. Thanks.

vzhd1701 commented 2 years ago

so I would like to request another new function. Now your app is working pretty well so far and I think it would be a good idea to add a record & download function. The tools you need for this you have already build-in. What do you think?

I will consider this, since you are not the first to request this feature. Can't promise that it will be in soon though.

I hope you won't mind if I close this issue and split all requests into separate issues. This way it will be easier for me to keep track of them and not forget anything.

If you will have any new requests / bug reports, however small, please open a new issue.