铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 734|回复: 3

[其他] 小水壶播放器介绍以及如何加入到游戏中

[复制链接]
发表于 2017-11-30 01:01 | 显示全部楼层 |阅读模式

马上注册,结交更多侠友!

您需要 登录 才可以下载或查看,没有帐号?我要成为铁血侠客

x
小水壶播放器是一个视频播放器。
最初脱胎于金庸水浒传的片头动画播放部分,后来发展为独立的功能。并可以用于在sdl2游戏的窗口中播放视频。
近期进行了一些修改,修正了之前退出时容易崩溃的问题。





评分

参与人数 1声望 +100 银两 +666 收起 理由
Ice + 100 + 666 很给力!

查看全部评分

[发帖际遇]: 华山论剑大混战中bt一人击败四神,bt提升5 声望. 幸运榜 / 衰神榜
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2017-11-30 14:31 | 显示全部楼层
tinypot
一个轻量级播放器。
遗留问题
因为是单线程架构,所以在一些文件跳转时会出现马赛克。一般来说这个可以通过清除解码器状态来解决,但是单线程架构下这个操作会导致后面一帧的解码卡顿,故没有这么做。或者谁有更好的办法可以指教一下。 srt支持不完善,只能使用没有bom的utf8文件,而且时间不能出负值。等ka大神有空解决。
功能键
方向左右是跳过几秒,上下是音量,空格是暂停,回车是全屏,退格是返回文件开始,del删除播放记录(打开曾经播放过的文件会自动跳转到上次退出的位置)。 1是切换音频流,2是切换字幕流,3是内部字幕显示/隐藏,4是外部字幕显示/隐藏。 鼠标点右上是暂停。
架构
该播放器的架构并未参考其他主流播放器,而是重新设计的单线程预解,原理如下图。在跳转的时候可能会稍慢于其他的主流播放器,但是相差并不明显。
为什么叫大水壶?
大水壶播放器的前身是金庸水浒传的片头动画播放子程。在整个游戏过程中该子程仅被调用了一次,但是为了做好这个部分,开发组使用了FFmpeg进行解码,BASS进行播放,SDL2进行输出,并成功将其移植到了其他平台。因此,金庸水浒传的片头实际支持相当多的格式。而大水壶播放器在设计阶段,也是使用类似的架构,但是在开发阶段发现音频难以控制,因此改为了使用SDL2播放。 而水浒的谐音是水壶,同时新论坛叫大武侠,有个“大”字,所以该播放器起名“大水壶”,英文BigPot。至于跟著名的播放器PotPlayer有没有关系,答案是一点都没有,而且PotPlayer的功能远远强于大水壶,名字有点像只是巧合。
另外现在改叫小水壶了……
可以播放什么格式?
FFmpeg能解什么格式它就能放什么格式,FFmpeg不能解的,它也放不出来。而且也不考虑调用其他的解码器,因为作者不会。 特别地,不能播放WAV,以及WAV为音频流的视频文件,因为WAV是没有压缩的,谈不上解码。也不推荐用它播放纯音频,因为它的音频没有经过处理,只是把解码的结果原样放出来,远不及专门的播放器。
怎样打开文件?
因为没有制作配置的图形界面,所以仅能将文件拖到图标或者窗口上进行播放。 打开文件的时候,会先判断有没有字幕,有的话会自动载入。或者播放的时候拖一个字幕进去也会载入字幕,而字幕的扩展名必须是ass、ssa、srt、txt其中之一。其他文件都会当成媒体文件处理,能否播放看解码器的。


【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2017-11-30 14:39 | 显示全部楼层
支持,这是我在MAC上用过的最好用的播放器,没有之一!
[发帖际遇]: 发现闯王宝藏后,侥幸躲过“雪山飞狐”,Ice 九死一生揣了几块金银逃下山,赚到31 银两。 幸运榜 / 衰神榜
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2017-11-30 16:04 | 显示全部楼层
如何在游戏里调用:
C的接口:

  1. void* tinypot = PotCreateFromWindow(g_Window);
  2. int r = PotInputVideo(tinypot, filename);
  3. PotDestory(tinypot)
复制代码


其中g_window是sdl2游戏所使用的窗口SDL_Window。

返回值为0表示是按esc、右键或播放至结尾,可以认为是用户正常操作。如果为1是用户按了退出按钮。可以增加一些处理,例如:
  1.     if (r == 1)
  2.     {
  3.         SDL_Event e;
  4.         e.type = SDL_QUIT;
  5.         SDL_PushEvent(&e);
  6.     }
复制代码
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

关注论坛微信公众号

小黑屋|手机版|铁血丹心 ( 粤ICP备16123140号-1 )

GMT+8, 2018-4-22 03:12 , Processed in 0.212888 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.3 Licensed

© 2001-2017 Comsenz Inc.

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