zhanghai / MaterialFiles

Material Design file manager for Android
https://play.google.com/store/apps/details?id=me.zhanghai.android.files
GNU General Public License v3.0
5.93k stars 403 forks source link

播放smb内的视频,文件名被转码了 #743

Closed Vixb1122 closed 2 years ago

Vixb1122 commented 2 years ago

质感文件的情况 Screenshot_2022-04-03-09-01-19-476_com.mxtech.videoplayer.ad.jpg 其他文件管理器和mx player自带的情况 Screenshot_2022-04-03-09-02-10-550_com.mxtech.videoplayer.ad.jpg

zhanghai commented 2 years ago

Android 系统里应用间传递文件的方式是通过 URI(格式是 content://provider_name/path)实现的,出现这个情况是播放器假定了 URI 的最后一段就是文件名,但其实不能这样假定,URI 的内容完全可能是任何东西。正确的做法是向 URI 的提供者查询这个 URI 的 OpenableColumns.DISPLAY_NAME 信息,这个 display name 才是真正能给用户展示的。

Vixb1122 commented 2 years ago

@zhanghai 同样是打开视频文件,手机内置存储里面的视频文件名是正常的,打开smb里面的视频文件才会出这个问题。 这个url应该是只转码文件地址前面的路径吧,文件名应该用原名才对,我试了其他支持smb的文件管理器,用三方视频播放器打开都没有问题。

https://play.google.com/store/apps/details?id=files.fileexplorer.filemanager https://play.google.com/store/apps/details?id=pl.solidexplorer2

zhanghai commented 2 years ago

这个url应该是只转码文件地址前面的路径吧,文件名应该用原名才对

URI 的内容完全可能是任何东西。正确的做法是向 URI 的提供者查询这个 URI 的 OpenableColumns.DISPLAY_NAME 信息,这个 display name 才是真正能给用户展示的。

Vixb1122 commented 2 years ago

@zhanghai 我简单测了下,其他文件管理器smb服务器里面的视频文件是通过 http 连接发送给其他应用的。 类似这种 http://127.0.0.1:57871/1fe4/videos/86-不存在的战区-.mp4 所以视频播放器直接播放的是web链接,能拿到文件名。而且用这种方式播放视频会更快一些,基本不用缓冲。 content url 通过 DISPLAY_NAME 能拿到文件名,直接截取就会出问题。

zhanghai commented 2 years ago

我试了下开源的 VLC 并没有这个问题。MX 确实有这个问题,但它是闭源的,所以我也不能看它的具体实现。你可能更应该向 MX 的开发者报告这个问题,并且提到 VLC 工作正常。