Mike Kazantsev <[email protected]> writes:
> On Mon, 09 Dec 2024 08:25:56 -0500 > Yoni Rabkin <[email protected]> wrote: > >> > I can access it through tramp(emacs) and add a file to emms >> > playlist. >> > As the result, in the playlist buffer i get a file, for example: >> > /ssh:Server:/home/user/1.mp3 >> > (One can use other protocols /rsync:, /sshx:, /sftp:) >> > >> > But emms-mpv does not play such files. >> > I would like to ask a question is it possible to fix it? >> > >> > As i see it, there are two reasons why mpv doesn't play such files. >> > (As i understand vlc also) >> > 1. Mpv uses different naming scheme than tramp. >> > So instead of /sftp: one should write sftp:// >> > >> > 2. mpv does not support protocols rsync, sshx, ssh only sftp >> > >> > I would suggest changing few lines in emms-player-mpv-start. >> > (Although i did it through advice-add) >> > >> > --- emms-player-mpv.el 2024-12-02 17:19:18.807604784 +0100 >> > +++ emms-player-mpv-new.el 2024-12-04 15:36:39.132959493 +0100 >> > @@ -722,7 +722,10 @@ >> > (setq emms-player-mpv-stopped nil) >> > (emms-player-mpv-proc-playing nil) >> > (let* >> > - ((track-name (emms-track-get track 'name)) >> > + ((name-origin (emms-track-get track 'name)) >> > + (track-name (if (string-match >> > "^/ssh:\\|^/sshx:\\|^/rsync:\\|^/sftp:" name-origin) >> > + (replace-match "sftp://" nil nil name-origin) >> > + name-origin)) >> > (track-playlist-option >> > (and emms-player-mpv-use-playlist-option >> > (memq (emms-track-get track 'type) >> > >> > What would be better solution? >> >> Perhaps this is a good solution (taking the above into consideration); I >> haven't looked into it yet. I would like to read Mike Kazantsev's view >> on it first. > > I've never used emacs tramp mode myself, but it seem to make sense to > translate track URLs passed to mpv there. > > One concern might be that it'd include an otherwise-legitimate > filenames by accident, but I think chance of someone naming a file > "/ssh:..." under root dir is low enough to probably not even bother > making an option to disable it. > > I'd condense regexp to "^/\\(ssh\\|sshx\\|rsync\\|sftp\\):" - might > express "/one-of-protocols:" intent a bit better, with an identical > start/end character, but it should work fine either way of course. > > > Also, if rsync's on the list, maybe all other ssh-related tramp access > methods can be added too - plink, plinkx, scp, scpx, pscp, psftp, fcp. > > https://www.gnu.org/software/emacs/manual/html_node/tramp/Inline-methods.html > https://www.gnu.org/software/emacs/manual/html_node/tramp/External-methods.html > > I think all the extra ones listed above basically mean "ssh connection > follows" and for mpv that always translates to sftp:// method. > > > Same as with tramp mode, never used sftp:// file paths myself either. > As far as I can tell it'd be an URL that mpv passes to ffmpeg's libav as-is, > and it's documented to use libssh to handle those. > > Afaik emacs uses OpenSSH for tramp mode, and libssh is a different ssh > implementation from that, so its access might work differently from > tramp mode due to emacs-side configuration, OpenSSH configuration, > and more general differences between OpenSSH and libssh. > (I think libssh does read e.g. ~/.ssh configs and pickup ssh-agent > from env though, so should probably not give any surprises) > > I'd be a bit uneasy about giving mpv an ssh access to any ssh user not > strictly locked to sftp tbh (which can be easily configured in openssh), > but this doesn't enable any new access methods, as sftp:// URLs were > implicitly supported by emms before, I think. > > >> > My entire music collection is on the remote server, to which i have >> > access trough ssh. >> >> I think of this as a file-system level issue. Why not mount the remote >> directory instead? > > I also always just mounted stuff using sshfs, and have always been > using it as a primary way for accessing any media files or often editing > remote configuration files as well. > (as using NFS was always more difficult and not required performance-wise) > > But that's just me, tramp mode might have some advantages over that, idk. Ok, i see that no one use emms and tramp together. Still, i do not think that it is a bad idea to integrate a little bit emms and tramp. I have tried to answer Mike's concerns. @@ -250,6 +250,10 @@ :type 'symbol) +(defvar emms-player-mpv-protocols-substitute "^/\\(ssh\\|sshx\\|rsync\\|sftp\\|plink\\|plinkx\\|scp\\|scpx\\|pscp\\|psftp\\|fcp\\):" + "Protocols which are substituted to sftp://") + + ;; ----- helpers (defvar emms-player-mpv-debug nil @@ -722,7 +726,11 @@ (setq emms-player-mpv-stopped nil) (emms-player-mpv-proc-playing nil) (let* - ((track-name (emms-track-get track 'name)) + ((name-original (emms-track-get track 'name)) + (track-name (if (and (file-remote-p name-original) + (string-match emms-player-mpv-protocols-substitute name-original)) + (replace-match "sftp://" nil nil name-origin) + name-original)) (track-playlist-option (and emms-player-mpv-use-playlist-option (memq (emms-track-get track 'type)
