Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1532470
  • 博文数量: 114
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 1357
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-19 18:13
文章分类
文章存档

2010年(8)

2009年(9)

2008年(27)

2007年(62)

2006年(8)

我的朋友

分类: LINUX

2007-08-27 19:59:08

北京理工大学 20981 陈罡
在各位热心的网友、机友的支持下,我又开始为编译出来的mplayer编写界面应用的计划。
当然了,众口难调无论做出什么样子的界面,都会有人觉得不好看的。:),这点我还是
对大家非常理解的。
暂且不谈界面的问题,先来考虑考虑如何为mplayer编写前端界面的问题。有两种思路,
一种是把mplayer解剖,直接修改它里面的代码,这样我们做得界面就可以和mplayer一体
了(当然也可以通过link mplayer用到的所有的库和.o文件,把它无缝的集成在程序里面)
第二种方法就是mplayer所谓的slave模式,现在来探讨一下slave模式:
所谓的slave模式,就是mplayer在运行过程中可以接收用户的输入命令行,具体支持哪些
命令行,可以通过mplayer -input cmdlist这条命令来得到。linux是可以采用管道的方式
把一个程序的输出做为另外一个程序的输入来用的(呵呵,这里似乎有点拗口)。
简单的讲程序A可以从命令行调用程序B,如果程序B可以在运行过程中支持参数的话,那么
程序A就可以在程序B运行过程中,向B通过管道发送新的指令。mplayer恰好就属于程序B
这种类型的软件。有了这个特性,可以为我们节约很多时间呢。
目前找到的mplayer slave模式的命令大全参见附件slave.rar:
(mpalyer 1.0pre8的slave mode参数)
文件: slave.rar
大小: 5KB
下载: 下载
很遗憾的是,mplayer有的slave模式不起作用(这个不太清楚是怎么一回事),例如
change_rectangle integer integer
这个用来调整mplayer播放的时候视频窗口位置的,但是在slave模式下就不好使。。。
也不知道是我输入的不对还是什么别的原因。
mplayer进入slave模式下播放的命令行为:
./mplayer -slave -quiet -vf rotate=2,scale=240:320 a.avi
这样可以全屏播放了并且支持telnet或者eKonsole的命令行控制,常规的快进、快退、
暂停、播放控制都是没问题的,可是全屏播放和非全屏播放的切换就不行,也不能修改
在非全屏播放模式下的视频输出位置,这一点可能需要自己手工修改一下源代码才可以实现,
:P这个偶就懒得去做了,太麻烦。
这个切换似乎可以通过记录播放的pos,然后重启mplayer并seek到该pos来实现。呵呵,
这些都是具体实现起来的后话了。当务之急是做一个简单的文件浏览器,可以方便用户进行
目录之间的切换,找到自己希望播放的那个文件。还是不喜欢用moto的sdk,用linux的posix
api多舒服啊,速度还快。不过界面编写上稍微麻烦些。
#include
#include
#include
#include
#include
int main(int argc,char *argv[])
{
 DIR * dp;
 struct dirent *filename;
 if (argc < 2) {
         print_usage();
         exit(1);
 }
 dp = opendir(argv[1]);
 if (!dp) {
         fprintf(stderr,"open directory error\n");
         return 0;
 }
 while (filename=readdir(dp)) {
         printf("fname : %-10s\t", filename->d_name);
 }
 closedir(dp);
 return 0;
}
dirent的结构如下定义
struct dirent
{
  long d_ino;                      /* 存放的是该文件的结点数目 */
  off_t d_off;                     /* 是文件在目录中的编移 */
  unsigned short d_reclen;         /* d_name的长度 */
  char d_name [NAME_MAX+1];        /* 文件名 */
}
这里似乎就是d_name有用,通过上述程序可以列出指定目录下的文件,
包括中文文件名的文件,这些文件名似乎都是采用utf-8格式存储的。
至于文件和目录之间的判别,可以采用stat.h中的的一些文件判别宏:
S_ISREG() 普通文件
S_ISDIR() 目录文件
S_ISCHR() 字符特殊文件
S_ISBLK() 块特殊文件
S_ISFIFO() 管道或FIFO
S_ISLNK() 符号连接(POSIX.1或SVR4无此类型)
S_ISSOCK() 套接字(POSIX.1或SVR4无此类型)
大概的使用是这样的:
struct stat buf;
if(lstat(argv[1], &buf) < 0) {
 printf("lstat error for %s\r\n", argv[1]);
 return;
}
if(S_ISDIR(buf.st_mode)) printf("%s Is DIR\r\n", argv[1]) ;
else if(S_ISREG(buf.st_mode)) printf("%s Is FILE\r\n", argv[1]) ;
如此以来就可以判断出文件还是目录了。加上一点ui上的工作,文件选择问题
应该就可以解决了。相信不久就可以完成mplayer在a1200上的简单前端播放器。
阅读(5330) | 评论(8) | 转发(0) |
给主人留下些什么吧!~~