LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 923|回复: 8

mplayer的一个bug

[复制链接]
发表于 2004-5-2 21:18:09 | 显示全部楼层 |阅读模式
就是对于mms协议,不能播放含中文的url。
比方说mms://host/中文.asf这种url,会提示说找不到文件,然后会进入一个死循环。
而mms://host/abc.asf这种则没问题。
附件就是patch。
使用方法:
下载mplayer 1.0pre4的源代码,跟附件中的patch: mms.patch.gz
进入mplayer源码的顶层目录,
$gzip -d mms.patch.gz
$patch -p1 mms.patch
然后编译就好了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2004-5-2 21:55:06 | 显示全部楼层
看了一下,这个patch没有考虑到用LC_CTYPE=zh_CN(等效于zh_CN.gb2312)的情况。。。

我没机会测试带中文路径的远程mms://
不过本地的asf在使用中文路径的时候是没问题的

我觉得这里用glib提供的g_get_charset和g_iconv比较合适一点,不过只是猜测,而且mplayer除了界面,其它地方并不依赖glib。。所以也不是太好。
 楼主| 发表于 2004-5-2 22:30:38 | 显示全部楼层
最初由 penny 发表
看了一下,这个patch没有考虑到用LC_CTYPE=zh_CN(等效于zh_CN.gb2312)的情况。。。

我没机会测试带中文路径的远程mms://
不过本地的asf在使用中文路径的时候是没问题的

我觉得这里用glib提供的g_get_charset和g_iconv比较合适一点,不过只是猜测,而且mplayer除了界面,其它地方并不依赖glib。。所以也不是太好。

这确实是个问题。
不过这个问题只跟mms有关,因为只在这个时候它才会进行路径的编码转换。
发表于 2004-5-2 22:59:27 | 显示全部楼层
pupilzeng
把qq投条给我 我想交朋友(我是菜鸟哈哈)
遇到问题请教你

把qq号码发到 sjtu2002@163.com
 楼主| 发表于 2004-5-2 23:46:50 | 显示全部楼层
再修改了一下,使用nl_langinfo(CODESET)来取得字符集,这个对zh_CN也适用了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2004-5-3 14:35:57 | 显示全部楼层
看看这个是roger@bbs.ustc.edu.cn提交的多字节mmspatch:
cat mplayer_1.0-pre3cvs20040404-urlfix.patch

--- mplayer-1.0-pre3cvs20040404.orig/libmpdemux/asf_mmst_streaming.c   
2004-04-04 21:32:21.000000000 +0800
+++ mplayer-1.0-pre3cvs20040404/libmpdemux/asf_mmst_streaming.c 2004-04-18
00:24:09.000000000 +0800
@@ -24,6 +24,7 @@

#ifdef USE_ICONV
#include <locale.h>
+#include <langinfo.h>
#include <iconv.h>
#endif

@@ -490,7 +491,7 @@
   /* prepare for the url encoding conversion */
#ifdef USE_ICONV
  setlocale(LC_CTYPE, "");
-  url_conv = iconv_open("UTF-16LE",setlocale(LC_CTYPE, NULL));
+  url_conv = iconv_open("UTF-16LE", nl_langinfo(CODESET));
#endif

   snprintf (str, 1023, "\034\003NSPlayer/7.0.0.1956;
{33715801-BAB3-9D85-24E9-03B90328270A}; Host: %s", url1->hostname);
 楼主| 发表于 2004-5-3 14:53:01 | 显示全部楼层
呵呵,这个跟我的完全一样。

没想到已经有人做好了,你是从哪找到的?
已经提交给开发组了?
发表于 2004-5-4 14:56:23 | 显示全部楼层
在mplayer的开发邮件列表里。
据他本人说同样已经提交到xine去了。而且他们收了。用xine/gxine
看的话,就没有问题。
不过mplayer没有收入。
 楼主| 发表于 2004-5-4 17:26:13 | 显示全部楼层

还有一个bug

同样是在处理mms的时候会出现的,就是如果文件不存在的时候就会进入死循环,原因是在get_data中,因为这时无法接收到数据(数据长度总为0),所以它就一直不停的recv。
我的解决办法是当接收到的数据长度为0时,设置一个计数器,然后sleep一会。
如果连续接收到长度为0的数据的次数超过某个值时,就认为发生错误了,get_data函数返回0。
这样就避免了死循环。不知道有没有更好的解决方法?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表