xzhao
(xzhao)
2020年03月13日 11:14
1
更新之后,mpv 无法远程打开 samba 网络共享中的视频文件。
命令行下面运行出现这样的报错:
$ mpv smb://admin@192.168.0.100/share/movie/1.mp4
[ffmpeg] Protocol not found. Make sure ffmpeg/Libav is compiled with networking support.
Failed to open smb://admin@192.168.0.100/share/movie/1.mp4.
尝试安装 Packman 中的 ffmpeg/libav 包,未果。
在 opensuse 英文论坛上看到一个人和我遇到的问题是一样的:
https://forums.opensuse.org/showthread.php/539418-tumbleweed-update-no-longer-can-play-videos-from-smb-share
xzhao
(xzhao)
2020年03月13日 11:24
3
在一次系统升级之前是可以播放的。@hillwood
xzhao
(xzhao)
2020年03月13日 11:51
4
更新:在最近的一次更改中,mpv 改为了要求 ffmpeg 支持才能播放网络视频:
If you really want that, you can get it through FFmpeg, I guess.
changed 2 files
with 2 additions
and 2 deletions .
但是为什么 Packman 编译的 ffmpeg 不支持 samba 播放目前还在研究中。
xzhao
(xzhao)
2020年03月13日 16:57
5
查到了,ffmpeg 需要开启一个编译选项"–enable-libsmbclient" 来打开 smb 支持,但是目前 Packman 的编译并没有打开这个。需要修改 Packman 的编译脚本来让 ffmpeg 支持 samba。
看起来像是这个原来是 MPV 的功能,后来 FFMPEG 有了这个功能,MPV 就不自己提供这个功能了,但是 Packman 编译的 FFMPEG 又没有启用这个功能。。。
xzhao
(xzhao)
2020年03月14日 23:57
7
对,不知道什么时候 Packman 才能修复编译选项
我在 PMBS 和 OBS 都提交了 Request:
Enable libsmbclient
https://build.opensuse.org/request/show/785258
guoyunhe:
PMBS
obs 上提交就够了。packman 上也是链接的 obs 。
要等 OBS 进了 Factory ,Packman 才会更新吧
已经进了 OBS Factory 了。Packman 那边拒绝了我的 Request,我也不知道他们怎么个流程。
后来他们把那个 Request 给 Revert 了。你还是去提 Bugzilla 吧,我已经管不了了。
xzhao
(xzhao)
2020年03月29日 00:18
15
悲剧……我在邮件列表里面问了,他们说 working on it,只能再等等了。
xzhao
(xzhao)
2020年04月4日 12:32
16
交的修复被打回来了,说 libsambaconf.so 和 mariadb 有符号冲突:
https://build.opensuse.org/request/show/790242
为什么会和其他不同的 so 文件有符号冲突??
09:54 < fvogt> libmariadbd.so.19 and libsmbconf.so.0 both define a symbol get_charset
这两个库都提供了 public function get_charset ()。
linking 的顺序可能导致了用了 libmariadbd.so 里内容和作用完全不同的同名 public 函数。
由于上述两个 so 都不是 ffmpeg 自带的,我感觉你应该从调整 linking 顺序下手。
https://holtstrom.com/michael/blog/post/437/Shared-Library-Symbol-Conflicts-(on-Linux).html
xzhao
(xzhao)
2020年04月4日 18:00
18
所以说只能向 samba 或者 mariadb 提交补丁,让它们修改其中之一的函数名字了?但是这样修改的话,所有依赖于这个名字的应用也要修改。看来还是向 Samba 提交比较好……
xzhao
(xzhao)
2020年04月4日 18:12
19
感觉这样完全 screw up 了啊,本质是要求所有项目的开发者发布的 so 库 export 名字全部不能冲突。开源项目那么多,怎么可能做到不用重复的名字呢?比如说像这个 mariadb 和 samba,是完全不一样的项目,却 “不约而同” 地采用了同一个函数名字 get_charset 并且把它们 export 到了 so 里面。我查了一下,这个也不是最近才发生的冲突,而是早就存在的。这样应该怎么说服双方解决呢?
linking 的顺序意思是指编译时:
gcc -lmariadbd -lsambaconf
就会用 libmariadbd.so 里的 get_charset ()
gcc -lsambaconf -lmariadbd
就会用 libsambaconf.so 里的。
我没看 ffmpeg 的 buildlog,也不知道 ffmpeg 是否依赖 mariadb…不太懂 C,感觉是两个都依赖,linking 的顺序不对,导致用了前一个。你可以给 ffmpeg 提 issue 让它们自己改的