├── .gitattributes ├── .gitignore ├── README.md ├── assets ├── 1528423684326.png ├── kiwi theater 首页.png ├── localhost 8080 play roomid 9.png └── logo.png ├── kiwi-im ├── .idea │ ├── compiler.xml │ ├── misc.xml │ └── workspace.xml ├── Dockerfile ├── docker_build.sh ├── lib │ ├── commons-pool2-2.3.jar │ ├── jedis-2.8.0.jar │ ├── logback-classic-1.1.3.jar │ ├── logback-core-1.1.3.jar │ ├── netty-all-4.1.6.Final.jar │ ├── protobuf-java-3.5.1.jar │ └── slf4j-api-1.7.7.jar ├── pom.xml └── src │ └── main │ └── java │ └── im │ ├── ImPto.java │ ├── ImWebSocketServerHandler.java │ ├── ImWebsocketServer.java │ ├── connection │ └── ImConnectionMap.java │ ├── constans │ └── ImConfConstans.java │ └── radis │ ├── RedisHandler.java │ └── RedisPoolManager.java ├── kiwi-ssm ├── .idea │ ├── compiler.xml │ ├── misc.xml │ └── workspace.xml ├── Dockerfile ├── docker_build.sh ├── pom.xml ├── setup.sh └── src │ └── main │ ├── java │ └── ssm │ │ ├── controller │ │ ├── AccountController.java │ │ ├── CommonController.java │ │ ├── RoomController.java │ │ └── UserController.java │ │ ├── dao │ │ ├── CommonMapper.java │ │ ├── CommonMapper.xml │ │ ├── RoomMapper.java │ │ ├── RoomMapper.xml │ │ ├── UserMapper.java │ │ └── UserMapper.xml │ │ ├── exception │ │ └── CustomException.java │ │ ├── model │ │ ├── Room.java │ │ ├── User.java │ │ ├── Vo.java │ │ ├── constance │ │ │ ├── LiveCategory.java │ │ │ └── StreamAction.java │ │ └── json │ │ │ ├── Charge.java │ │ │ ├── Gift.java │ │ │ └── SrsSteam.java │ │ ├── redis │ │ ├── RedisHandler.java │ │ └── RedisPoolManager.java │ │ ├── service │ │ ├── AccountService.java │ │ ├── CommonService.java │ │ ├── RoomService.java │ │ ├── UserService.java │ │ └── impl │ │ │ ├── AccountServiceImpl.java │ │ │ ├── CommonServiceImpl.java │ │ │ ├── RoomServiceImpl.java │ │ │ └── UserServiceImpl.java │ │ └── utils │ │ └── MD5.java │ ├── resources │ ├── db.properties │ ├── log4j.properties │ ├── mybatis │ │ └── mybatisConfig.xml │ └── spring │ │ ├── applicationContext-dao.xml │ │ └── springmvc.xml │ └── webapp │ ├── WEB-INF │ ├── jsp │ │ ├── createRoom.jsp │ │ ├── home.jsp │ │ ├── misc │ │ │ ├── 404.jsp │ │ │ ├── 500.jsp │ │ │ └── success.jsp │ │ ├── play.jsp │ │ ├── roomInfo.jsp │ │ ├── signin.jsp │ │ ├── signup.jsp │ │ └── userInfo.jsp │ └── web.xml │ ├── front-resources │ ├── img │ │ ├── fruit-icons │ │ │ ├── icons8-avocado-100.png │ │ │ ├── icons8-cherry-100.png │ │ │ ├── icons8-citrus-100.png │ │ │ ├── icons8-coconut-100.png │ │ │ ├── icons8-grapes-100.png │ │ │ ├── icons8-greens-100.png │ │ │ ├── icons8-kiwi-100.png │ │ │ ├── icons8-orange-2-100.png │ │ │ ├── icons8-pears-100.png │ │ │ ├── icons8-sweet-banana-100.png │ │ │ ├── icons8-tomato-100.png │ │ │ └── icons8-watermelon-100.png │ │ ├── logo │ │ │ ├── icon.png │ │ │ ├── icons8-kiwi-64.png │ │ │ ├── logo.png │ │ │ └── logo.psd │ │ ├── play.png │ │ └── play2.png │ ├── js │ │ └── charge.js │ ├── layui │ │ ├── css │ │ │ ├── layui.css │ │ │ ├── layui.mobile.css │ │ │ └── modules │ │ │ │ ├── code.css │ │ │ │ ├── laydate │ │ │ │ └── default │ │ │ │ │ └── laydate.css │ │ │ │ └── layer │ │ │ │ └── default │ │ │ │ ├── icon-ext.png │ │ │ │ ├── icon.png │ │ │ │ ├── layer.css │ │ │ │ ├── loading-0.gif │ │ │ │ ├── loading-1.gif │ │ │ │ └── loading-2.gif │ │ ├── font │ │ │ ├── iconfont.eot │ │ │ ├── iconfont.svg │ │ │ ├── iconfont.ttf │ │ │ └── iconfont.woff │ │ ├── lay │ │ │ └── modules │ │ │ │ ├── carousel.js │ │ │ │ ├── code.js │ │ │ │ ├── element.js │ │ │ │ ├── flow.js │ │ │ │ ├── form.js │ │ │ │ ├── jquery.js │ │ │ │ ├── laydate.js │ │ │ │ ├── layedit.js │ │ │ │ ├── layer.js │ │ │ │ ├── laypage.js │ │ │ │ ├── laytpl.js │ │ │ │ ├── mobile.js │ │ │ │ ├── table.js │ │ │ │ ├── tree.js │ │ │ │ ├── upload.js │ │ │ │ └── util.js │ │ ├── layui.all.js │ │ └── layui.js │ ├── protobuf │ │ └── imPto.js │ ├── sockjs.min.js │ └── videojs-5.20.5 │ │ ├── alt │ │ ├── video-js-cdn.css │ │ ├── video-js-cdn.min.css │ │ ├── video.novtt.js │ │ └── video.novtt.min.js │ │ ├── examples │ │ ├── elephantsdream │ │ │ ├── captions.ar.vtt │ │ │ ├── captions.en.vtt │ │ │ ├── captions.ja.vtt │ │ │ ├── captions.ru.vtt │ │ │ ├── captions.sv.vtt │ │ │ ├── chapters.en.vtt │ │ │ ├── descriptions.en.vtt │ │ │ └── index.html │ │ ├── shared │ │ │ └── example-captions.vtt │ │ └── simple-embed │ │ │ └── index.html │ │ ├── font │ │ ├── VideoJS.eot │ │ ├── VideoJS.svg │ │ ├── VideoJS.ttf │ │ └── VideoJS.woff │ │ ├── ie8 │ │ ├── videojs-ie8.js │ │ └── videojs-ie8.min.js │ │ ├── lang │ │ ├── ar.js │ │ ├── ba.js │ │ ├── bg.js │ │ ├── ca.js │ │ ├── cs.js │ │ ├── da.js │ │ ├── de.js │ │ ├── el.js │ │ ├── en.js │ │ ├── es.js │ │ ├── fa.js │ │ ├── fi.js │ │ ├── fr.js │ │ ├── hr.js │ │ ├── hu.js │ │ ├── it.js │ │ ├── ja.js │ │ ├── ko.js │ │ ├── nb.js │ │ ├── nl.js │ │ ├── nn.js │ │ ├── pl.js │ │ ├── pt-BR.js │ │ ├── ru.js │ │ ├── sr.js │ │ ├── sv.js │ │ ├── tr.js │ │ ├── uk.js │ │ ├── vi.js │ │ ├── zh-CN.js │ │ └── zh-TW.js │ │ ├── video-js.css │ │ ├── video-js.min.css │ │ ├── video-js.swf │ │ ├── video.js │ │ └── video.min.js │ ├── index.jsp │ ├── pic │ ├── null_room.jpg │ └── null_user.jpg │ └── sql │ └── kiwitheater.sql └── mysql ├── Dockerfile ├── docker_build.sh ├── mysql.cnf ├── privileges.sql ├── schema.sql └── setup.sh /.gitattributes: -------------------------------------------------------------------------------- 1 | *.js linguist-language=java 2 | *.css linguist-language=java 3 | *.html linguist-language=java 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ##ignore this file## 2 | 3 | /*/target/ 4 | 5 | /.idea/ 6 | 7 | /*/*.iml 8 | 9 | /*.iml 10 | 11 | /webapp/src/main/webapp/WEB-INF/jsp/*.html 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 |

4 |

5 | 6 | 7 | 8 | ## 介绍 9 | 10 | 一个直播平台,Spring+SpringMVC+Mybatis,Netty,Protobuf,[SRS](https://github.com/ossrs/srs), Docker , Rancher 11 | 12 | ## 架构 13 | 14 | ![1528423684326](assets/1528423684326.png) 15 | 16 | 17 | 18 | ## 端口 19 | 20 | tomcat : 8080 21 | 22 | RTMP(srs) : 1935 23 | 24 | IM : 2333 25 | 26 | redis : 6379 27 | 28 | mysql : 3306 29 | 30 | ## 截图 31 | 32 | 首页: 33 | 34 | ![kiwi theater 首页](assets/kiwi%20theater%20%E9%A6%96%E9%A1%B5.png) 35 | 36 | 直播间: 37 | 38 | ![localhost 8080 play roomid 9](assets/localhost%208080%20play%20roomid%209.png) 39 | 40 | 41 | 42 | **TODO:** 43 | 44 | docker化后VideoJs不起作用 45 | 46 | 47 | 48 | ## 参考 49 | 50 | SRS HTTPCallBack https://github.com/ossrs/srs/wiki/v3_CN_HTTPCallback 51 | 52 | LayUI http://www.layui.com/ 53 | 54 | -------------------------------------------------------------------------------- /assets/1528423684326.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/assets/1528423684326.png -------------------------------------------------------------------------------- /assets/kiwi theater 首页.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/assets/kiwi theater 首页.png -------------------------------------------------------------------------------- /assets/localhost 8080 play roomid 9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/assets/localhost 8080 play roomid 9.png -------------------------------------------------------------------------------- /assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/assets/logo.png -------------------------------------------------------------------------------- /kiwi-im/.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /kiwi-im/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /kiwi-im/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM java:8-alpine 2 | 3 | MAINTAINER nnkwrik 16t2133h@shinshu-u.ac.jp 4 | 5 | ADD target/*-jar-with-dependencies.jar app.jar 6 | 7 | EXPOSE 2333 8 | 9 | #ENTRYPOINT ["java","-jar","/app.jar"] 10 | 11 | ENTRYPOINT ["java","-cp","/app.jar","im.ImWebsocketServer"] 12 | 13 | -------------------------------------------------------------------------------- /kiwi-im/docker_build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #打包 包括依赖的jar 4 | mvn assembly:assembly -Dmaven.test.skip=true -U 5 | 6 | docker build -t nnkwrik/kiwi-im . 7 | 8 | #docker run nnkwrik/kiwi-im 9 | 10 | 11 | #直接命名,减少一次tag的操作 12 | 13 | docker push nnkwrik/kiwi-im -------------------------------------------------------------------------------- /kiwi-im/lib/commons-pool2-2.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-im/lib/commons-pool2-2.3.jar -------------------------------------------------------------------------------- /kiwi-im/lib/jedis-2.8.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-im/lib/jedis-2.8.0.jar -------------------------------------------------------------------------------- /kiwi-im/lib/logback-classic-1.1.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-im/lib/logback-classic-1.1.3.jar -------------------------------------------------------------------------------- /kiwi-im/lib/logback-core-1.1.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-im/lib/logback-core-1.1.3.jar -------------------------------------------------------------------------------- /kiwi-im/lib/netty-all-4.1.6.Final.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-im/lib/netty-all-4.1.6.Final.jar -------------------------------------------------------------------------------- /kiwi-im/lib/protobuf-java-3.5.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-im/lib/protobuf-java-3.5.1.jar -------------------------------------------------------------------------------- /kiwi-im/lib/slf4j-api-1.7.7.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-im/lib/slf4j-api-1.7.7.jar -------------------------------------------------------------------------------- /kiwi-im/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | com.github.nnkwrik 8 | kiwi-im 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 13 | 14 | maven-assembly-plugin 15 | 16 | 17 | 18 | im.ImWebsocketServer 19 | 20 | 21 | 22 | jar-with-dependencies 23 | 24 | 25 | 26 | 27 | 28 | org.apache.maven.plugins 29 | maven-compiler-plugin 30 | 31 | 8 32 | 8 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | com.google.protobuf 43 | protobuf-java 44 | 3.5.1 45 | 46 | 47 | 48 | 49 | redis.clients 50 | jedis 51 | 2.8.0 52 | 53 | 54 | 55 | 56 | io.netty 57 | netty-all 58 | 4.1.6.Final 59 | 60 | 61 | 62 | 63 | org.slf4j 64 | slf4j-api 65 | 1.7.7 66 | 67 | 68 | ch.qos.logback 69 | logback-classic 70 | 1.1.3 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /kiwi-im/src/main/java/im/ImWebSocketServerHandler.java: -------------------------------------------------------------------------------- 1 | package im; 2 | 3 | import im.connection.ImConnectionMap; 4 | import io.netty.channel.ChannelHandlerContext; 5 | import io.netty.channel.SimpleChannelInboundHandler; 6 | import org.slf4j.Logger; 7 | import org.slf4j.LoggerFactory; 8 | 9 | 10 | public class ImWebSocketServerHandler extends SimpleChannelInboundHandler { 11 | 12 | private static final Logger logger = LoggerFactory.getLogger(ImWebSocketServerHandler.class); 13 | 14 | @Override 15 | public void channelActive(ChannelHandlerContext ctx) throws Exception { 16 | } 17 | 18 | @Override 19 | protected void channelRead0(ChannelHandlerContext ctx, ImPto.Im im) throws Exception { 20 | int roomid = im.getRoomid(); 21 | 22 | switch (im.getImType()) { 23 | case ImHandShake: 24 | if (!ImConnectionMap.getViewerMap().containsKey(roomid)) { 25 | logger.info("新的IM roomid :" + roomid); 26 | ImConnectionMap.addRoom(roomid); 27 | } 28 | ImConnectionMap.addViewer(roomid, ctx.channel()); 29 | logger.info("观众进入roomid" + roomid); 30 | break; 31 | case Danmaku: 32 | ImConnectionMap.broadcast(roomid, im); 33 | logger.info("弹幕" + 34 | "[ 房间号 : " + roomid + " , 用户 : " + im.getSendername() + " , 内容 : " + im.getContent() + " ]"); 35 | break; 36 | case Gift: 37 | ImConnectionMap.broadcast(roomid, im); 38 | logger.info("礼物" + 39 | "[ 房间号 : " + roomid + " , 用户 : " + im.getSendername() + " , 内容 : " + im.getContent() + " ]"); 40 | break; 41 | 42 | } 43 | 44 | 45 | } 46 | 47 | //channel be close 刷新or关闭窗口 48 | @Override 49 | public void channelInactive(ChannelHandlerContext ctx) throws Exception { 50 | logger.info("观众离开直播间"); 51 | } 52 | 53 | 54 | } 55 | -------------------------------------------------------------------------------- /kiwi-im/src/main/java/im/connection/ImConnectionMap.java: -------------------------------------------------------------------------------- 1 | package im.connection; 2 | 3 | import im.ImPto; 4 | import io.netty.channel.Channel; 5 | import io.netty.channel.ChannelFuture; 6 | import io.netty.channel.ChannelFutureListener; 7 | import io.netty.channel.group.ChannelGroup; 8 | import io.netty.channel.group.ChannelGroupFuture; 9 | import io.netty.channel.group.DefaultChannelGroup; 10 | import io.netty.util.concurrent.GlobalEventExecutor; 11 | import org.slf4j.Logger; 12 | import org.slf4j.LoggerFactory; 13 | 14 | 15 | import java.util.concurrent.ConcurrentHashMap; 16 | 17 | public class ImConnectionMap { 18 | 19 | private final static Logger log = LoggerFactory.getLogger(ImConnectionMap.class); 20 | 21 | private static ConcurrentHashMap viewerMap = new ConcurrentHashMap<>(); 22 | 23 | //测试用 24 | // static { 25 | // for (int i = 9; i <= 17; i++) { 26 | // 27 | // viewerMap.put(i, new DefaultChannelGroup("room" + i, GlobalEventExecutor.INSTANCE)); 28 | // } 29 | // } 30 | 31 | public static void addRoom(int roomId) { 32 | ChannelGroup channelGroup = new DefaultChannelGroup("room" + roomId, GlobalEventExecutor.INSTANCE); 33 | viewerMap.put(roomId, channelGroup); 34 | } 35 | 36 | public static void addViewer(int roomId, Channel channel) { 37 | viewerMap.get(roomId).add(channel); 38 | } 39 | 40 | public static ConcurrentHashMap getViewerMap() { 41 | return viewerMap; 42 | } 43 | 44 | public static void removeRoom(int roomId) { 45 | 46 | ChannelGroup channelGroup = viewerMap.remove(roomId); 47 | ImPto.Im.Builder builder = ImPto.Im.newBuilder(); 48 | builder.setImType(ImPto.ImType.ImChClose); 49 | builder.setRoomid(roomId); 50 | ImPto.Im im = builder.build(); 51 | 52 | ChannelGroupFuture c = channelGroup.writeAndFlush(im); 53 | c.addListener(new ChannelFutureListener() { 54 | @Override 55 | public void operationComplete(ChannelFuture channelFuture) throws Exception { 56 | channelGroup.close(); 57 | } 58 | }); 59 | 60 | } 61 | 62 | public static void broadcast(int roomId, ImPto.Im im) { 63 | viewerMap.get(roomId).writeAndFlush(im); 64 | } 65 | 66 | public static void broadcastAll(ImPto.Im im) { 67 | viewerMap.forEach((key, value) -> { 68 | value.writeAndFlush(im); 69 | }); 70 | 71 | 72 | } 73 | 74 | 75 | } 76 | -------------------------------------------------------------------------------- /kiwi-im/src/main/java/im/constans/ImConfConstans.java: -------------------------------------------------------------------------------- 1 | package im.constans; 2 | 3 | public class ImConfConstans { 4 | 5 | //FullHttp的最大长度 6 | public static final int MAX_AGGREGATED_CONTENT_LENGTH = 65536; 7 | // 最大协议包长度 8 | public static final int MAX_FRAME_LENGTH = 1024 * 10; // 10k 9 | // //连接空闲时间 10 | // public static final int READ_IDLE_TIME = 60;//秒 11 | // //发送心跳包循环时间 12 | // public static final int WRITE_IDLE_TIME = 40;//秒 13 | } 14 | -------------------------------------------------------------------------------- /kiwi-im/src/main/java/im/radis/RedisHandler.java: -------------------------------------------------------------------------------- 1 | package im.radis; 2 | 3 | import im.ImWebsocketServer; 4 | import im.connection.ImConnectionMap; 5 | import io.netty.channel.group.ChannelGroup; 6 | import org.slf4j.Logger; 7 | import org.slf4j.LoggerFactory; 8 | 9 | import java.util.concurrent.ConcurrentHashMap; 10 | 11 | public class RedisHandler implements Runnable { 12 | 13 | private final static Logger log = LoggerFactory.getLogger(ImWebsocketServer.class); 14 | 15 | 16 | private static final String key = "live"; 17 | private static final long timeInterval = 10000;// 10s 18 | private final RedisPoolManager redisPoolManager = new RedisPoolManager(); 19 | 20 | private final ConcurrentHashMap viewerMap = ImConnectionMap.getViewerMap(); 21 | 22 | @Override 23 | public void run() { 24 | while (true) { 25 | 26 | log.info("=========== 更新观众数量 =============="); 27 | viewerMap.forEach((roomid, channelGroup) -> { 28 | int viewers = channelGroup.size(); 29 | 30 | redisPoolManager.getJedis().hset(key, roomid + "", viewers + ""); 31 | log.info("直播间 : " + roomid + " , 观众 : " + viewers +" 人 "); 32 | 33 | if (viewers == 0) { 34 | log.info("直播间"+roomid+"的观众为 0 ,从IM移除"); 35 | ImConnectionMap.removeRoom(roomid); 36 | } 37 | 38 | }); 39 | 40 | try { 41 | Thread.sleep(timeInterval); 42 | } catch (InterruptedException e) { 43 | e.printStackTrace(); 44 | } 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /kiwi-im/src/main/java/im/radis/RedisPoolManager.java: -------------------------------------------------------------------------------- 1 | package im.radis; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | import redis.clients.jedis.Jedis; 6 | import redis.clients.jedis.JedisPool; 7 | import redis.clients.jedis.JedisPoolConfig; 8 | 9 | /** 10 | * Redis连接池管理器 11 | */ 12 | public class RedisPoolManager { 13 | 14 | private static final Logger logger = LoggerFactory.getLogger(RedisPoolManager.class); 15 | 16 | // public String REDIS_SERVER = "localhost";//192.168.0.6 17 | public String REDIS_SERVER = "192.168.0.6"; 18 | 19 | public int REDIS_PORT = 6379; 20 | 21 | private JedisPool pool = null; 22 | 23 | private JedisPool getInstance() { 24 | 25 | if (pool == null) { 26 | 27 | JedisPoolConfig config = new JedisPoolConfig(); 28 | config.setMaxTotal(1000); 29 | config.setMaxIdle(20); 30 | config.setMaxWaitMillis(10 * 1000l); 31 | config.setTestOnBorrow(true); 32 | config.setTestOnReturn(true); 33 | 34 | pool = new JedisPool(config, REDIS_SERVER, REDIS_PORT, 10); 35 | } 36 | 37 | return pool; 38 | 39 | } 40 | 41 | /** 42 | * 获取jedis 43 | * 44 | * @return 45 | */ 46 | public Jedis getJedis() { 47 | 48 | Jedis jedis = null; 49 | 50 | try { 51 | jedis = getInstance().getResource(); 52 | // jedis.auth(REDIS_AUTH); 53 | } catch (Exception e) { 54 | logger.error(e.getMessage(), e); 55 | } 56 | 57 | return jedis; 58 | 59 | } 60 | 61 | /** 62 | * 返回jedis 63 | * 64 | * @param jedis 65 | */ 66 | public void returnJedis(Jedis jedis) { 67 | try { 68 | 69 | if (jedis != null) { 70 | getInstance().returnResource(jedis); 71 | } 72 | } catch (Exception e) { 73 | logger.error(e.getMessage(), e); 74 | } 75 | 76 | } 77 | 78 | /** 79 | * 返回关闭的redis 80 | * 81 | * @param jedis 82 | */ 83 | public void returnBrokenJedis(Jedis jedis) { 84 | try { 85 | 86 | if (jedis != null) { 87 | getInstance().returnBrokenResource(jedis); 88 | } 89 | } catch (Exception e) { 90 | logger.error(e.getMessage(), e); 91 | } 92 | 93 | } 94 | 95 | /** 96 | * 释放jedis 97 | * 98 | * @param jedis 99 | */ 100 | public void releaseJedis(Jedis jedis) { 101 | pool.returnResource(jedis); 102 | 103 | } 104 | 105 | } -------------------------------------------------------------------------------- /kiwi-ssm/.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /kiwi-ssm/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /kiwi-ssm/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM tomcat:9.0-jre8-alpine 2 | 3 | MAINTAINER nnkwrik 16t2133h@shinshu-u.ac.jp 4 | 5 | COPY target/*.war /usr/local/tomcat/webapps 6 | 7 | COPY setup.sh /usr/local/tomcat/webapps 8 | 9 | CMD ["bash", "/usr/local/tomcat/webapps/setup.sh"] 10 | 11 | 12 | -------------------------------------------------------------------------------- /kiwi-ssm/docker_build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | mvn clean package -Dmaven.test.skip=true -U 4 | 5 | docker build -t nnkwrik/kiwi-ssm . 6 | 7 | #docker run -p 8080:8080 nnkwrik/kiwi-ssm 8 | 9 | docker push nnkwrik/kiwi-ssm 10 | -------------------------------------------------------------------------------- /kiwi-ssm/setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | 4 | catalina.sh run & 5 | 6 | sleep 10 7 | 8 | cd /usr/local/tomcat/webapps 9 | 10 | rm -rf ROOT 11 | 12 | #直接从http://xxx.xxx.xxx.x:8080/ 访问应用 13 | mv kiwi-ssm ROOT 14 | 15 | echo 'current webapps/ROOT, you can access application by http://xxx.xxx.xxx.x:8080/' 16 | ls -l ROOT 17 | 18 | tail -f /dev/null 19 | 20 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/controller/AccountController.java: -------------------------------------------------------------------------------- 1 | package ssm.controller; 2 | 3 | import ssm.exception.CustomException; 4 | import ssm.model.User; 5 | import ssm.service.AccountService; 6 | import org.springframework.beans.factory.annotation.Autowired; 7 | import org.springframework.stereotype.Controller; 8 | import org.springframework.ui.Model; 9 | import org.springframework.web.bind.annotation.RequestMapping; 10 | import org.springframework.web.bind.annotation.RequestMethod; 11 | 12 | import javax.servlet.http.HttpServletRequest; 13 | import javax.servlet.http.HttpSession; 14 | 15 | @Controller 16 | public class AccountController { 17 | 18 | @Autowired 19 | private AccountService accountService; 20 | 21 | @RequestMapping(value = "/signin", method = RequestMethod.GET) 22 | public String signinPage(HttpServletRequest request, HttpSession session) { 23 | //保存上个页面的url 24 | if (session.getAttribute("previousPage")==null){ 25 | 26 | session.setAttribute("previousPage", request.getHeader("Referer")); 27 | } 28 | return "signin"; 29 | } 30 | 31 | @RequestMapping(value = "/signup", method = RequestMethod.GET) 32 | public String signupPage(HttpServletRequest request, HttpSession session) { 33 | //保存上个页面的url 34 | if (session.getAttribute("previousPage")==null){ 35 | 36 | session.setAttribute("previousPage", request.getHeader("Referer")); 37 | } 38 | return "signup"; 39 | } 40 | 41 | @RequestMapping(value = "/signin", method = RequestMethod.POST) 42 | public String signin(Model model, HttpSession session, 43 | String username, String password, boolean rememberme) { 44 | User user = null; 45 | try { 46 | user = accountService.signin(username, password); 47 | } catch (CustomException e) { 48 | model.addAttribute("errorMsg", e.getMessage()); 49 | return "signin"; 50 | } 51 | 52 | if (user != null) { 53 | session.setAttribute("activeUser", user); 54 | String url = (String) session.getAttribute("previousPage"); 55 | 56 | return "redirect:" + ((url != null)?url : "/home"); 57 | } 58 | return "signin"; 59 | } 60 | 61 | @RequestMapping(value = "/signup", method = RequestMethod.POST) 62 | public String signup(Model model, HttpSession session, 63 | String username, String password) { 64 | try { 65 | accountService.checkNamePass(username,password); 66 | } catch (CustomException e) { 67 | model.addAttribute("errorMsg", e.getMessage()); 68 | return "signup"; 69 | } 70 | 71 | User user = accountService.signup(username,password); 72 | 73 | session.setAttribute("activeUser", user); 74 | String url = (String) session.getAttribute("previousPage"); 75 | return "redirect:" + ((url != null)?url : "/home"); 76 | } 77 | 78 | @RequestMapping("/signout") 79 | public String signoff(HttpServletRequest request,HttpSession session){ 80 | session.setAttribute("previousPage",null); 81 | session.setAttribute("activeUser", null); 82 | return "redirect:" + request.getHeader("Referer"); 83 | 84 | } 85 | 86 | } 87 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/controller/CommonController.java: -------------------------------------------------------------------------------- 1 | package ssm.controller; 2 | 3 | 4 | import ssm.model.User; 5 | import ssm.model.Vo; 6 | import ssm.model.constance.StreamAction; 7 | import ssm.model.json.Charge; 8 | import ssm.model.json.Gift; 9 | import ssm.model.json.SrsSteam; 10 | import ssm.redis.RedisHandler; 11 | import ssm.service.CommonService; 12 | import ssm.service.UserService; 13 | import org.springframework.beans.factory.annotation.Autowired; 14 | import org.springframework.stereotype.Controller; 15 | import org.springframework.ui.Model; 16 | import org.springframework.web.bind.annotation.RequestBody; 17 | import org.springframework.web.bind.annotation.RequestMapping; 18 | import org.springframework.web.bind.annotation.ResponseBody; 19 | 20 | import javax.servlet.http.HttpSession; 21 | import java.util.*; 22 | 23 | @Controller 24 | public class CommonController { 25 | 26 | @Autowired 27 | private UserService userService; 28 | 29 | @Autowired 30 | private RedisHandler redisHandler; 31 | 32 | @Autowired 33 | private CommonService commonService; 34 | 35 | @RequestMapping("/home") 36 | public String home(Model model, HttpSession session, String keyword, Integer category) { 37 | User user = (User)session.getAttribute("activeUser"); 38 | if (user!=null){//更新当前用户 39 | 40 | session.setAttribute("activeUser",userService.findUserById(user.getId())); 41 | } 42 | Map liveMap = redisHandler.getAllLiving(); 43 | List liveList = null; 44 | if (keyword != null) { 45 | ArrayList keys = new ArrayList<>(); 46 | for (String key : keyword.split(" ")) { 47 | if (!key.trim().equals("")) { 48 | keys.add(key); 49 | } 50 | } 51 | liveList = commonService.getLiveListByKeys(liveMap, keys); 52 | } else if (category != null) { 53 | liveList = commonService.getLiveListByCate(liveMap, category); 54 | } else { 55 | 56 | liveList = commonService.getLiveListFromMap(liveMap); 57 | } 58 | 59 | if (liveList != null) { 60 | //sort by viewer 61 | Collections.sort(liveList, new Comparator() { 62 | @Override 63 | public int compare(Vo o1, Vo o2) { 64 | if (o1.getViewer() >= o2.getViewer()) { 65 | return -1; 66 | } else { 67 | return 1; 68 | } 69 | } 70 | }); 71 | 72 | model.addAttribute("liveList", liveList); 73 | } 74 | 75 | 76 | return "home"; 77 | } 78 | 79 | 80 | 81 | @RequestMapping("/srs") 82 | @ResponseBody 83 | public Map publishStream(@RequestBody SrsSteam steam) { 84 | HashMap jsonMap = new HashMap(); 85 | switch (steam.getAction()) { 86 | case StreamAction.ON_PULISH: 87 | //register to redis 88 | redisHandler.registerLiveStream(steam); 89 | break; 90 | case StreamAction.ON_UNPULISH: 91 | //delete from redis 92 | redisHandler.deleteLiveStream(steam); 93 | break; 94 | } 95 | 96 | jsonMap.put("code", 0); 97 | return jsonMap; 98 | } 99 | 100 | 101 | @RequestMapping("/charge") 102 | @ResponseBody 103 | public String charge(@RequestBody Charge charge, HttpSession session) { 104 | 105 | User activeUser = (User) session.getAttribute("activeUser"); 106 | activeUser.setCoin( Double.parseDouble(String.format("%.1f",activeUser.getCoin() + charge.getAmount()))); 107 | commonService.charge(activeUser); 108 | 109 | session.setAttribute("activeUser", activeUser); 110 | 111 | return activeUser.getCoin() + ""; 112 | } 113 | 114 | @RequestMapping("/send_gift") 115 | @ResponseBody 116 | public String sendGift(@RequestBody Gift gift, HttpSession session) { 117 | 118 | User activeUser = (User) session.getAttribute("activeUser"); 119 | activeUser = commonService.sendGift(activeUser, gift); 120 | 121 | session.setAttribute("activeUser", activeUser); 122 | 123 | return activeUser.getCoin() + ""; 124 | } 125 | 126 | 127 | } 128 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/controller/RoomController.java: -------------------------------------------------------------------------------- 1 | package ssm.controller; 2 | 3 | 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.stereotype.Controller; 6 | import org.springframework.ui.Model; 7 | import org.springframework.web.bind.annotation.RequestMapping; 8 | import org.springframework.web.bind.annotation.RequestMethod; 9 | import org.springframework.web.multipart.MultipartFile; 10 | import ssm.model.Room; 11 | import ssm.model.User; 12 | import ssm.service.CommonService; 13 | import ssm.service.RoomService; 14 | import ssm.service.UserService; 15 | 16 | import javax.servlet.http.HttpSession; 17 | import java.io.IOException; 18 | 19 | @Controller 20 | public class RoomController { 21 | 22 | @Autowired 23 | private RoomService roomService; 24 | 25 | @Autowired 26 | private UserService userService; 27 | 28 | @Autowired 29 | private CommonService commonService; 30 | 31 | @RequestMapping("/play") 32 | public String playPage(Model model, HttpSession session,Integer roomid) { 33 | User user = (User)session.getAttribute("activeUser"); 34 | if (user!=null){//更新当前用户 35 | session.setAttribute("activeUser",userService.findUserById(user.getId())); 36 | } 37 | 38 | model.addAttribute("roomVo", roomService.showDetailRoomInfo(roomid)); 39 | 40 | return "play"; 41 | } 42 | 43 | @RequestMapping(value = "/editRoomInfo", method = RequestMethod.GET) 44 | public String editRoomInfoPage(Model model, HttpSession session) { 45 | User user = (User) session.getAttribute("activeUser"); 46 | if (user.getRoomid() != null) { 47 | 48 | model.addAttribute("roomInfo", roomService.findRoomById(user.getRoomid())); 49 | } 50 | 51 | return "roomInfo"; 52 | } 53 | 54 | @RequestMapping(value = "/editRoomInfo", method = RequestMethod.POST) 55 | public String editRoomInfo(Model model, Room room, MultipartFile room_img) { 56 | 57 | // 上传图片 58 | // 原始名称 59 | String originalFilename = null; 60 | if (room_img != null) { 61 | room_img.getOriginalFilename(); 62 | } 63 | 64 | if (room_img != null && originalFilename != null && originalFilename.trim().equals("")) { 65 | 66 | try { 67 | room.setImg(commonService.uploadPic("room_img", room_img)); 68 | } catch (IOException e) { 69 | model.addAttribute("errorMsg", e.getMessage()); 70 | return "editRoomInfo"; 71 | } 72 | } 73 | 74 | if (room.getDescription() != null){ 75 | 76 | room.setDescription(room.getDescription().replaceAll("\r\n","
")); 77 | } 78 | //may change roomname , img, category , description 79 | roomService.editRoomInfo(room); 80 | return "misc/success"; 81 | } 82 | 83 | @RequestMapping(value = "/createRoom", method = RequestMethod.GET) 84 | public String createRoomPage(Model model, HttpSession session) { 85 | //not null : id,roomname,anchorid 86 | 87 | User user = (User) session.getAttribute("activeUser"); 88 | //给一个模版 89 | Room room = new Room(); 90 | room.setImg("pic/null_room.jpg"); 91 | room.setRoomname(user.getNickname() + "的直播间"); 92 | 93 | 94 | model.addAttribute("roomInfo", room); 95 | 96 | return "createRoom"; 97 | // return "forward:/editRoomInfo"; 98 | } 99 | 100 | @RequestMapping(value = "/createRoom", method = RequestMethod.POST) 101 | public String createRoom(Model model, HttpSession session, Room room,MultipartFile room_img) { 102 | 103 | // 上传图片 104 | // 原始名称 105 | String originalFilename = null; 106 | if (room_img != null) { 107 | room_img.getOriginalFilename(); 108 | } 109 | 110 | if (room_img != null && originalFilename != null && originalFilename.trim().equals("")) { 111 | 112 | try { 113 | room.setImg(commonService.uploadPic("room_img", room_img)); 114 | } catch (IOException e) { 115 | model.addAttribute("errorMsg", e.getMessage()); 116 | return "createRoom"; 117 | } 118 | } 119 | if (room.getDescription()!=null){ 120 | room.setDescription(room.getDescription().replaceAll("\r\n","
")); 121 | } 122 | 123 | User user = (User)session.getAttribute("activeUser"); 124 | room.setAnchorid(user.getId()); 125 | //insert to room table,update user table 126 | Integer roomid = roomService.createRoom(room).getId(); 127 | 128 | //update session user 129 | 130 | user.setRoomid(roomid); 131 | session.setAttribute("activeUser",user); 132 | 133 | return "misc/success"; 134 | } 135 | 136 | 137 | } 138 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/controller/UserController.java: -------------------------------------------------------------------------------- 1 | package ssm.controller; 2 | 3 | import ssm.model.User; 4 | import ssm.service.UserService; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.stereotype.Controller; 7 | import org.springframework.web.bind.annotation.RequestMapping; 8 | import org.springframework.web.bind.annotation.RequestMethod; 9 | 10 | import javax.servlet.http.HttpSession; 11 | 12 | @Controller 13 | public class UserController { 14 | 15 | @Autowired 16 | private UserService userService; 17 | 18 | @RequestMapping(value = "/editUserInfo",method = RequestMethod.GET) 19 | public String editUserInfoPage(HttpSession session) { 20 | User user = (User) session.getAttribute("activeUser"); 21 | if (user.getId()!=null){ 22 | //避免登录之后可能改变了个人情报(消费,收藏),重新搜索 23 | User updatedUser = userService.findUserById(user.getId()); 24 | if (!user.equals(updatedUser)) { 25 | session.setAttribute("activeUser",user); 26 | } 27 | } 28 | 29 | return "userInfo"; 30 | 31 | } 32 | 33 | @RequestMapping(value = "/editUserInfo",method = RequestMethod.POST) 34 | public String editUserInfo(HttpSession session,User user){ 35 | //may update username and avatar 36 | User sessionUser = (User) session.getAttribute("activeUser"); 37 | sessionUser.setNickname(user.getNickname()); 38 | sessionUser.setAvatar(user.getAvatar()); 39 | 40 | userService.updateUserInfo(sessionUser); 41 | 42 | session.setAttribute("activeUser",sessionUser); 43 | 44 | return "misc/success"; 45 | } 46 | 47 | 48 | 49 | 50 | 51 | } 52 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/dao/CommonMapper.java: -------------------------------------------------------------------------------- 1 | package ssm.dao; 2 | 3 | import ssm.model.User; 4 | import ssm.model.Vo; 5 | 6 | import java.util.List; 7 | 8 | public interface CommonMapper { 9 | List findSimpleVoListByRooomIds(List roomid); 10 | 11 | List findSimpleVoListByKeys(List keywords); 12 | List findSimpleVoListByCate(Integer category); 13 | void updateCoin(User user); 14 | 15 | 16 | 17 | 18 | } 19 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/dao/CommonMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | SELECT room.id room_id, 27 | room.roomname, 28 | room.img, 29 | room.category, 30 | `user`.id user_id, 31 | `user`.nickname, 32 | `user`.avatar 33 | 34 | FROM room,`user` 35 | 36 | 37 | 42 | 43 | 48 | 49 | 54 | 55 | update user set coin=#{coin},usedcoin=#{usedcoin} where id=#{id} 56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/dao/RoomMapper.java: -------------------------------------------------------------------------------- 1 | package ssm.dao; 2 | 3 | import ssm.model.Room; 4 | 5 | import java.util.List; 6 | 7 | 8 | public interface RoomMapper { 9 | 10 | Room findRoomById(Integer roomId); 11 | 12 | void updateRoomInfo(Room room); 13 | 14 | void createRoom(Room room); 15 | 16 | List findSimpleRoomListById(List id); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/dao/RoomMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 13 | 14 | 15 | 16 | UPDATE room 17 | SET roomname = #{roomname}, category = #{category} 18 | , img = #{img} 19 | , description = #{description} 20 | WHERE id = #{id} 21 | 22 | 23 | 24 | 25 | 26 | SELECT LAST_INSERT_ID() 27 | 28 | 29 | INSERT INTO room (roomname,anchorid,category 30 | , img 31 | , description 32 | ) 33 | VALUES (#{roomname},#{anchorid},#{category} 34 | , #{img} 35 | , #{description} 36 | ) 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/dao/UserMapper.java: -------------------------------------------------------------------------------- 1 | package ssm.dao; 2 | 3 | import ssm.model.Room; 4 | import ssm.model.User; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | public interface UserMapper { 8 | User signin(@Param("username") String username, @Param("password") String password); 9 | 10 | Integer checkName(String username); 11 | 12 | void signup(User user); 13 | 14 | User findUserById(Integer id); 15 | 16 | User findSimpleUserById(Integer id); 17 | 18 | void updateUserInfo(User user); 19 | 20 | void registerAnchor(Room room); 21 | 22 | // List findSimpleUserListById(List id); 23 | } 24 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/dao/UserMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 27 | 28 | 31 | 32 | 33 | 34 | 39 | 40 | SELECT LAST_INSERT_ID() 41 | 42 | 43 | INSERT INTO `user` (username,nickname,password) VALUES (#{username},#{nickname},#{password}) 44 | 45 | 46 | 49 | 50 | 51 | 52 | 55 | 56 | 57 | 58 | UPDATE `user` 59 | SET nickname = #{nickname} 60 | , avatar = #{avatar} 61 | WHERE id = #{id} 62 | 63 | 64 | 65 | UPDATE `user` SET roomid = #{id} WHERE id = #{anchorid} 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/exception/CustomException.java: -------------------------------------------------------------------------------- 1 | package ssm.exception; 2 | 3 | 4 | public class CustomException extends Exception { 5 | private String message; 6 | 7 | public CustomException(String message) { 8 | super(message); 9 | this.message = message; 10 | } 11 | 12 | @Override 13 | public String getMessage() { 14 | return message; 15 | } 16 | 17 | public void setMessage(String message) { 18 | this.message = message; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/model/Room.java: -------------------------------------------------------------------------------- 1 | package ssm.model; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class Room { 7 | private Integer id; 8 | 9 | private String roomname; 10 | 11 | private Integer anchorid; 12 | 13 | private String img; 14 | 15 | private String description; 16 | 17 | private Integer category; 18 | 19 | private Boolean living; 20 | 21 | } 22 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/model/User.java: -------------------------------------------------------------------------------- 1 | package ssm.model; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 用户PO类 7 | */ 8 | @Data 9 | public class User { 10 | private Integer id; 11 | 12 | private String username; 13 | 14 | private String nickname;//默认username 15 | 16 | private String password;//md5,32 17 | 18 | private String avatar; 19 | 20 | private Double coin; 21 | 22 | private Double usedcoin; 23 | 24 | private String like; 25 | 26 | private Integer roomid; //有自己的直播间时房间号,否则null 27 | 28 | } 29 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/model/Vo.java: -------------------------------------------------------------------------------- 1 | package ssm.model; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class Vo { 7 | 8 | User user; 9 | Room room; 10 | 11 | Integer viewer; 12 | 13 | } 14 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/model/constance/LiveCategory.java: -------------------------------------------------------------------------------- 1 | package ssm.model.constance; 2 | 3 | public class LiveCategory { 4 | public static final int COMEDY = 1; 5 | public static final int ANIME = 2; 6 | public static final int ACTION = 3; 7 | public static final int LOVE = 4; 8 | public static final int HORROR = 5; 9 | } 10 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/model/constance/StreamAction.java: -------------------------------------------------------------------------------- 1 | package ssm.model.constance; 2 | 3 | public class StreamAction { 4 | 5 | //push stream 6 | public static final String ON_PULISH = "on_publish"; 7 | public static final String ON_UNPULISH = "on_unpublish"; 8 | 9 | //play in browser 10 | // public static final String ON_PLAY = "on_play"; 11 | // public static final String ON_STOP = "on_stop"; 12 | 13 | } 14 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/model/json/Charge.java: -------------------------------------------------------------------------------- 1 | package ssm.model.json; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 充值 7 | */ 8 | @Data 9 | public class Charge { 10 | 11 | // private Integer userid; 12 | 13 | private Double amount; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/model/json/Gift.java: -------------------------------------------------------------------------------- 1 | package ssm.model.json; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class Gift { 7 | 8 | private Integer anchorid; 9 | 10 | 11 | private Double giftValue; 12 | } 13 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/model/json/SrsSteam.java: -------------------------------------------------------------------------------- 1 | package ssm.model.json; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 从srs RTMP Server传json回调 7 | * 推流/拉流地址 : rtmp://127.0.0.1:1935/live/房间号 8 | */ 9 | @Data 10 | public class SrsSteam { 11 | //HTTP callback from srs server (RTMP server) 12 | //https://github.com/ossrs/srs/wiki/v3_CN_HTTPCallback 13 | 14 | // on_publish { 15 | // "action": "on_publish", 16 | // "client_id": 1985, 17 | // "ip": "192.168.1.10", 18 | // "vhost": "video.test.com", 19 | // "app": "live", 20 | // "stream": "livestream" 21 | // } 当客户端发布流时,譬如flash/FMLE方式推流到服务器 22 | 23 | // 在docker hub 中找到的版本多包含了以下项 24 | // "tcUrl":"rtmp://192.168.0.6:1935/live", 25 | 26 | // on_unpublish { 27 | // "action": "on_unpublish", 28 | // "client_id": 1985, 29 | // "ip": "192.168.1.10", 30 | // "vhost": "video.test.com", 31 | // "app": "live", 32 | // "stream": "livestream" 33 | // } 当客户端停止发布流时 34 | 35 | // on_play { 36 | // "action": "on_play", 37 | // "client_id": 1985, 38 | // "ip": "192.168.1.10", 39 | // "vhost": "video.test.com", 40 | // "app": "live", 41 | // "stream": "livestream", 42 | // "pageUrl": "http://www.test.com/live.html" 43 | // } 当客户端开始播放流时 44 | 45 | // on_stop { 46 | // "action": "on_stop", 47 | // "client_id": 1985, 48 | // "ip": "192.168.1.10", 49 | // "vhost": "video.test.com", 50 | // "app": "live", 51 | // "stream": "livestream" 52 | // } 当客户端停止播放时。备注:停止播放可能不会关闭连接,还能再继续播放。 53 | 54 | 55 | private String action; 56 | 57 | private Integer client_id; 58 | 59 | private String ip; 60 | 61 | private String vhost; 62 | 63 | private String app; 64 | 65 | private String stream;//房间号 66 | 67 | private String tcUrl; 68 | 69 | private String pageUrl; 70 | 71 | } 72 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/redis/RedisHandler.java: -------------------------------------------------------------------------------- 1 | package ssm.redis; 2 | 3 | import ssm.model.json.SrsSteam; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.stereotype.Component; 6 | import redis.clients.jedis.Jedis; 7 | 8 | import java.util.Map; 9 | 10 | @Component 11 | public class RedisHandler { 12 | 13 | public static final String KEYLIVE = "live"; 14 | 15 | @Autowired 16 | private RedisPoolManager redisPoolManager; 17 | 18 | public void registerLiveStream(SrsSteam srsSteam) { 19 | Jedis jedis = redisPoolManager.getJedis(); 20 | if (!jedis.hexists("live", srsSteam.getStream())) { 21 | 22 | jedis.hset(KEYLIVE, srsSteam.getStream(), "0"); 23 | } 24 | } 25 | 26 | public void deleteLiveStream(SrsSteam srsSteam) { 27 | Jedis jedis = redisPoolManager.getJedis(); 28 | jedis.hdel(KEYLIVE, srsSteam.getStream()); 29 | } 30 | 31 | public void updateViewer() { 32 | 33 | } 34 | 35 | public Map getAllLiving() { 36 | Jedis jedis = redisPoolManager.getJedis(); 37 | 38 | //{filed1=value1, filed2=value2} 39 | return jedis.hgetAll(KEYLIVE); 40 | 41 | } 42 | 43 | public String getLiveViewers(String roomId){ 44 | 45 | return redisPoolManager.getJedis().hget(KEYLIVE,roomId); 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/redis/RedisPoolManager.java: -------------------------------------------------------------------------------- 1 | package ssm.redis; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | import org.springframework.stereotype.Component; 6 | import redis.clients.jedis.Jedis; 7 | import redis.clients.jedis.JedisPool; 8 | import redis.clients.jedis.JedisPoolConfig; 9 | 10 | /** 11 | * Redis连接池管理器 12 | */ 13 | @Component 14 | public class RedisPoolManager { 15 | 16 | private static final Logger logger = LoggerFactory.getLogger(RedisPoolManager.class); 17 | 18 | public String REDIS_SERVER = "192.168.0.6"; 19 | 20 | public int REDIS_PORT = 6379; 21 | 22 | private JedisPool pool = null; 23 | 24 | private JedisPool getInstance() { 25 | 26 | if (pool == null) { 27 | 28 | JedisPoolConfig config = new JedisPoolConfig(); 29 | config.setMaxTotal(1000); 30 | config.setMaxIdle(20); 31 | config.setMaxWaitMillis(10 * 1000l); 32 | config.setTestOnBorrow(true); 33 | config.setTestOnReturn(true); 34 | 35 | pool = new JedisPool(config, REDIS_SERVER, REDIS_PORT, 10); 36 | } 37 | 38 | return pool; 39 | 40 | } 41 | 42 | /** 43 | * 获取jedis 44 | * 45 | * @return 46 | */ 47 | public Jedis getJedis() { 48 | 49 | Jedis jedis = null; 50 | 51 | try { 52 | jedis = getInstance().getResource(); 53 | // jedis.auth(REDIS_AUTH); 54 | } catch (Exception e) { 55 | logger.error(e.getMessage(), e); 56 | } 57 | 58 | return jedis; 59 | 60 | } 61 | 62 | /** 63 | * 返回jedis 64 | * 65 | * @param jedis 66 | */ 67 | public void returnJedis(Jedis jedis) { 68 | try { 69 | 70 | if (jedis != null) { 71 | getInstance().returnResource(jedis); 72 | } 73 | } catch (Exception e) { 74 | logger.error(e.getMessage(), e); 75 | } 76 | 77 | } 78 | 79 | /** 80 | * 返回关闭的redis 81 | * 82 | * @param jedis 83 | */ 84 | public void returnBrokenJedis(Jedis jedis) { 85 | try { 86 | 87 | if (jedis != null) { 88 | getInstance().returnBrokenResource(jedis); 89 | } 90 | } catch (Exception e) { 91 | logger.error(e.getMessage(), e); 92 | } 93 | 94 | } 95 | 96 | /** 97 | * 释放jedis 98 | * 99 | * @param jedis 100 | */ 101 | public void releaseJedis(Jedis jedis) { 102 | pool.returnResource(jedis); 103 | 104 | } 105 | 106 | } -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/service/AccountService.java: -------------------------------------------------------------------------------- 1 | package ssm.service; 2 | 3 | import ssm.exception.CustomException; 4 | import ssm.model.User; 5 | 6 | public interface AccountService { 7 | User signin(String username, String password) throws CustomException; 8 | 9 | void checkNamePass(String username, String password) throws CustomException; 10 | 11 | User signup(String username, String password); 12 | } 13 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/service/CommonService.java: -------------------------------------------------------------------------------- 1 | package ssm.service; 2 | 3 | 4 | import ssm.model.User; 5 | import ssm.model.Vo; 6 | import ssm.model.json.Gift; 7 | import org.springframework.web.multipart.MultipartFile; 8 | 9 | import java.io.IOException; 10 | import java.util.List; 11 | import java.util.Map; 12 | 13 | public interface CommonService { 14 | 15 | List getLiveListFromMap(Map liveMap); 16 | 17 | List getLiveListByKeys(Map liveMap, List keywords); 18 | 19 | List getLiveListByCate(Map liveMap, Integer category); 20 | 21 | String uploadPic(String dir, MultipartFile pic) throws IOException; 22 | 23 | void charge(User user); 24 | 25 | User sendGift(User self, Gift gift); 26 | } 27 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/service/RoomService.java: -------------------------------------------------------------------------------- 1 | package ssm.service; 2 | 3 | import ssm.model.Room; 4 | import ssm.model.Vo; 5 | 6 | public interface RoomService { 7 | Vo showDetailRoomInfo(Integer roomid); 8 | 9 | Room findRoomById(Integer userid); 10 | 11 | void editRoomInfo(Room room); 12 | 13 | Room createRoom(Room room); 14 | 15 | 16 | } 17 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/service/UserService.java: -------------------------------------------------------------------------------- 1 | package ssm.service; 2 | 3 | import ssm.model.User; 4 | 5 | public interface UserService { 6 | 7 | User findUserById(Integer userid); 8 | 9 | void updateUserInfo(User user); 10 | } 11 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/service/impl/AccountServiceImpl.java: -------------------------------------------------------------------------------- 1 | package ssm.service.impl; 2 | 3 | import ssm.dao.UserMapper; 4 | import ssm.exception.CustomException; 5 | import ssm.model.User; 6 | import ssm.service.AccountService; 7 | import ssm.utils.MD5; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.stereotype.Service; 10 | 11 | @Service 12 | public class AccountServiceImpl implements AccountService { 13 | 14 | @Autowired 15 | private UserMapper userMapper; 16 | 17 | public User signin(String username, String password) throws CustomException { 18 | if (username == null || password == null || 19 | username.trim().equals("")|| password.trim().equals("")) { 20 | throw new CustomException("登录信息不完整"); 21 | } 22 | User user = userMapper.signin(username, MD5.MD5(password)); 23 | if (user == null) { 24 | throw new CustomException("用户名或密码错误"); 25 | } 26 | 27 | return user; 28 | } 29 | 30 | public void checkNamePass(String username,String password) throws CustomException { 31 | if (username == null || password == null || 32 | username.trim().equals("") || password.trim().equals("")) { 33 | throw new CustomException("登录信息不完整"); 34 | } 35 | if (userMapper.checkName(username) > 0) { 36 | throw new CustomException("该用户名已被注册"); 37 | } 38 | } 39 | 40 | public User signup(String username, String password) { 41 | User user = new User(); 42 | user.setUsername(username); 43 | user.setNickname(username); //默认与username相同 44 | user.setPassword(MD5.MD5(password)); 45 | //自动注入id 46 | userMapper.signup(user); 47 | 48 | //删除前端不需要的情报 49 | user.setCoin(5.0);//注册时免费获得5块 50 | user.setUsername(null); 51 | user.setPassword(null); 52 | 53 | return user; 54 | } 55 | 56 | } 57 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/service/impl/CommonServiceImpl.java: -------------------------------------------------------------------------------- 1 | package ssm.service.impl; 2 | 3 | import ssm.dao.CommonMapper; 4 | import ssm.dao.UserMapper; 5 | import ssm.model.User; 6 | import ssm.model.Vo; 7 | import ssm.model.json.Gift; 8 | import ssm.service.CommonService; 9 | import org.springframework.beans.factory.annotation.Autowired; 10 | import org.springframework.stereotype.Service; 11 | import org.springframework.web.multipart.MultipartFile; 12 | 13 | import java.io.File; 14 | import java.io.IOException; 15 | import java.util.ArrayList; 16 | import java.util.List; 17 | import java.util.Map; 18 | import java.util.UUID; 19 | 20 | @Service 21 | public class CommonServiceImpl implements CommonService { 22 | 23 | @Autowired 24 | private CommonMapper commonMapper; 25 | 26 | @Autowired 27 | private UserMapper userMapper; 28 | 29 | 30 | public List getLiveListFromMap(Map liveMap) { 31 | if (liveMap.size() < 1) return null; 32 | 33 | //mybatis 不接受set 34 | ArrayList roomids = new ArrayList<>(); 35 | for (String strId : liveMap.keySet()) { 36 | roomids.add(Integer.parseInt(strId)); 37 | } 38 | 39 | List liveVos = commonMapper.findSimpleVoListByRooomIds(roomids); 40 | 41 | return filterVo(liveMap, liveVos); 42 | } 43 | 44 | public List getLiveListByKeys(Map liveMap, List keywords) { 45 | List liveVos = commonMapper.findSimpleVoListByKeys(keywords); 46 | return filterVo(liveMap, liveVos); 47 | } 48 | 49 | public List getLiveListByCate(Map liveMap, Integer category) { 50 | 51 | List liveVos = commonMapper.findSimpleVoListByCate(category); 52 | return filterVo(liveMap, liveVos); 53 | } 54 | 55 | private static List filterVo(Map liveMap, List liveVos) { 56 | ArrayList finalVos = new ArrayList<>(); 57 | 58 | for (Vo vo : liveVos) { 59 | String viewer = liveMap.get(vo.getRoom().getId() + ""); 60 | if (viewer != null) { 61 | vo.setViewer(Integer.parseInt(viewer)); 62 | finalVos.add(vo); 63 | } 64 | 65 | } 66 | return finalVos; 67 | } 68 | 69 | // 上传图片 70 | public String uploadPic(String dir, MultipartFile pic) throws IOException { 71 | 72 | // 上传图片 73 | // 原始名称 74 | String originalFilename = pic.getOriginalFilename(); 75 | 76 | // 存储图片的物理路径 77 | String pic_path = "pic/" + dir + "/"; 78 | 79 | // 新的图片名称 : 随机数 + 扩展名 80 | String newfileNStringame = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf(".")); 81 | 82 | // 新图片 83 | File newfile = new File(pic_path + newfileNStringame); 84 | 85 | // 将内存中的数据写入磁盘 86 | 87 | pic.transferTo(newfile); 88 | 89 | 90 | return newfileNStringame; 91 | 92 | } 93 | 94 | public void charge(User user) { 95 | commonMapper.updateCoin(user); 96 | } 97 | 98 | public User sendGift(User self, Gift gift) { 99 | //TODO 事务 100 | User anchor = userMapper.findUserById(gift.getAnchorid()); 101 | anchor.setCoin( Double.parseDouble(String.format("%.1f",anchor.getCoin() + gift.getGiftValue()))); 102 | self.setCoin( Double.parseDouble(String.format("%.1f",self.getCoin() - gift.getGiftValue()))); 103 | self.setUsedcoin( Double.parseDouble(String.format("%.1f",self.getUsedcoin() + gift.getGiftValue()))); 104 | commonMapper.updateCoin(anchor); 105 | commonMapper.updateCoin(self); 106 | 107 | return self; 108 | 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/service/impl/RoomServiceImpl.java: -------------------------------------------------------------------------------- 1 | package ssm.service.impl; 2 | 3 | import ssm.dao.CommonMapper; 4 | import ssm.dao.RoomMapper; 5 | import ssm.dao.UserMapper; 6 | import ssm.model.Room; 7 | import ssm.model.Vo; 8 | import ssm.redis.RedisHandler; 9 | import ssm.service.RoomService; 10 | import org.springframework.beans.factory.annotation.Autowired; 11 | import org.springframework.stereotype.Service; 12 | 13 | @Service 14 | public class RoomServiceImpl implements RoomService { 15 | 16 | @Autowired 17 | private UserMapper userMapper; 18 | 19 | @Autowired 20 | private RoomMapper roomMapper; 21 | 22 | @Autowired 23 | private CommonMapper commonMapper; 24 | 25 | @Autowired 26 | private RedisHandler redisHandler; 27 | 28 | public Vo showDetailRoomInfo(Integer roomid){ 29 | Vo vo = new Vo(); 30 | //TODO 应该封装成一个mapper 31 | Room room = roomMapper.findRoomById(roomid); 32 | vo.setRoom(room); 33 | vo.setUser(userMapper.findSimpleUserById(room.getAnchorid())); 34 | 35 | //TODO 从redis取viewer,需要事务 36 | String viewer = redisHandler.getLiveViewers(roomid+""); 37 | vo.setViewer(Integer.parseInt(viewer)); 38 | return vo; 39 | } 40 | 41 | public Room findRoomById(Integer roomid) { 42 | 43 | return roomMapper.findRoomById(roomid); 44 | } 45 | 46 | public void editRoomInfo(Room room) { 47 | 48 | roomMapper.updateRoomInfo(room); 49 | } 50 | 51 | public Room createRoom(Room room) { 52 | 53 | //插入并注入roomid 54 | roomMapper.createRoom(room); 55 | 56 | //update user table 57 | userMapper.registerAnchor(room); 58 | 59 | return room; 60 | 61 | } 62 | 63 | 64 | } 65 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/service/impl/UserServiceImpl.java: -------------------------------------------------------------------------------- 1 | package ssm.service.impl; 2 | 3 | import ssm.dao.RoomMapper; 4 | import ssm.dao.UserMapper; 5 | import ssm.model.User; 6 | import ssm.service.UserService; 7 | import org.springframework.beans.factory.annotation.Autowired; 8 | import org.springframework.stereotype.Service; 9 | 10 | @Service 11 | public class UserServiceImpl implements UserService { 12 | 13 | @Autowired 14 | private UserMapper userMapper; 15 | 16 | @Autowired 17 | private RoomMapper roomMapper; 18 | 19 | public User findUserById(Integer userid){ 20 | 21 | return userMapper.findUserById(userid); 22 | } 23 | 24 | public void updateUserInfo(User user){ 25 | userMapper.updateUserInfo(user); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/java/ssm/utils/MD5.java: -------------------------------------------------------------------------------- 1 | package ssm.utils; 2 | 3 | import java.security.MessageDigest; 4 | 5 | public class MD5 { 6 | public static String MD5(String key) { 7 | char hexDigits[] = { 8 | '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' 9 | }; 10 | try { 11 | byte[] btInput = key.getBytes(); 12 | // 获得MD5摘要算法的 MessageDigest 对象 13 | MessageDigest mdInst = MessageDigest.getInstance("MD5"); 14 | // 使用指定的字节更新摘要 15 | mdInst.update(btInput); 16 | // 获得密文 17 | byte[] md = mdInst.digest(); 18 | // 把密文转换成十六进制的字符串形式 19 | int j = md.length; 20 | char str[] = new char[j * 2]; 21 | int k = 0; 22 | for (int i = 0; i < j; i++) { 23 | byte byte0 = md[i]; 24 | str[k++] = hexDigits[byte0 >>> 4 & 0xf]; 25 | str[k++] = hexDigits[byte0 & 0xf]; 26 | } 27 | return new String(str); 28 | } catch (Exception e) { 29 | return null; 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/resources/db.properties: -------------------------------------------------------------------------------- 1 | jdbc.driver=com.mysql.jdbc.Driver 2 | jdbc.url=jdbc:mysql://192.168.0.6:3306/kiwitheater?characterEncoding=utf-8 3 | jdbc.username=root 4 | jdbc.password=1234 5 | jdbc.initialSize=3 6 | jdbc.maxActive=20 7 | jdbc.minIdle=1 8 | jdbc.maxWait=60000 9 | 10 | jdbc.logAbandoned=false 11 | jdbc.filters=stat -------------------------------------------------------------------------------- /kiwi-ssm/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | log4j.rootLogger=DEBUG, Console 2 | ### Console output... 3 | log4j.appender.Console=org.apache.log4j.ConsoleAppender 4 | log4j.appender.Console.layout=org.apache.log4j.PatternLayout 5 | log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n -------------------------------------------------------------------------------- /kiwi-ssm/src/main/resources/mybatis/mybatisConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/resources/spring/applicationContext-dao.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/resources/spring/springmvc.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/WEB-INF/jsp/createRoom.jsp: -------------------------------------------------------------------------------- 1 | <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 2 | <%@ page language="java" contentType="text/html; charset=utf-8" %> 3 | 4 | 5 | 6 | 7 | kiwi-theater-创建直播间 8 | 9 | 10 | 11 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 |
23 |

24 |
25 | 26 | 28 | 29 |
30 |
31 | 32 | 33 | 34 |
35 | 创建直播间 36 |
37 | 38 | 39 |
40 | 42 | 45 |

46 |
47 | 48 | 49 | 50 | 51 |
53 | 54 | 55 | 56 |
57 | 58 |
59 | 62 |
63 |
64 | 65 | 66 |
67 | 68 |
69 | 77 |
78 |
79 | 80 | 81 |
82 | 83 |
84 | 86 |
87 |
88 |
89 | 90 |
91 |
92 | 93 | 94 |
95 | 96 | 97 | 145 | 146 | 147 | 148 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/WEB-INF/jsp/misc/404.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | Created by IntelliJ IDEA. 3 | User: user 4 | Date: 18/05/13 5 | Time: 19:51 6 | To change this template use File | Settings | File Templates. 7 | --%> 8 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> 9 | 10 | 11 | kiwi-theater 12 | 13 | 14 |

404

15 | 16 | 17 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/WEB-INF/jsp/misc/500.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | Created by IntelliJ IDEA. 3 | User: user 4 | Date: 18/05/13 5 | Time: 19:51 6 | To change this template use File | Settings | File Templates. 7 | --%> 8 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> 9 | 10 | 11 | kiwi-theater 12 | 13 | 14 |

500

15 | 16 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/WEB-INF/jsp/misc/success.jsp: -------------------------------------------------------------------------------- 1 | <%-- 2 | Created by IntelliJ IDEA. 3 | User: user 4 | Date: 18/05/13 5 | Time: 19:51 6 | To change this template use File | Settings | File Templates. 7 | --%> 8 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> 9 | 10 | 11 | kiwi-theater 12 | 13 | 14 |

更新成功!

15 | 返回主页 16 | 17 | 18 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/WEB-INF/jsp/signin.jsp: -------------------------------------------------------------------------------- 1 | <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 2 | <%@ page language="java" contentType="text/html; charset=utf-8" %> 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 |
20 |

21 |
22 | 23 | 25 | 26 |
27 |
28 | 29 | 30 |
32 |

登录

33 |
34 |
35 | 36 |
37 | 39 |
40 |
41 |
42 | 43 |
44 | 46 |
47 |
48 | 49 |

${errorMsg}

50 |
51 |
52 |
53 | 54 |
55 |
56 |
57 |
58 | 59 |  没有帐号? 60 | 注册 61 |
62 |
63 | 64 |
65 | 66 |
67 | 68 | 69 | 70 | 83 | 84 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/WEB-INF/jsp/signup.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=utf-8" %> 2 | <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 3 | 4 | 5 | 6 | 7 | kiwi-theater-注册 8 | 9 | 10 | 11 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 |
21 |

22 |
23 | 24 | 26 | 27 |
28 |
29 | 30 | 31 |
33 |

注册

34 |
35 |
36 | 37 |
38 | 40 |
41 |
42 |
43 | 44 |
45 | 47 |
48 | 49 |
50 | 51 |

${errorMsg}

52 |
53 | 54 |
55 |
56 | 57 |  已有帐号? 58 | 登录 59 |
60 |
61 | 62 |
63 | 64 |
65 | 66 | 67 | 80 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/WEB-INF/jsp/userInfo.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=utf-8" %> 2 | <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 3 | 4 | 5 | 6 | 7 | kiwi-theater-编辑资料 8 | 9 | 10 | 11 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 |
21 |

22 |
23 | 24 | 26 | 27 |
28 |
29 | 30 | 31 | 32 |
33 | 编辑个人资料 34 |
35 | 36 | 37 |
38 | 40 | 43 |

44 |
45 | 46 | 47 | 48 | 49 |
50 |
51 | 52 |
53 | 55 | 56 |
57 |
58 | 59 |
60 |
61 | 62 |
63 | 64 | 65 | 66 | 67 | 68 | 69 | 72 | 73 |
74 | 75 | 76 | 77 | 121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | Archetype Created Web Application 9 | 10 | 11 | /home 12 | /index.jsp 13 | 14 | 15 | 16 | 17 | contextConfigLocation 18 | classpath:spring/applicationContext-*.xml 19 | 20 | 21 | org.springframework.web.context.ContextLoaderListener 22 | 23 | 24 | 25 | 26 | SpringMVC-Dispatcher 27 | org.springframework.web.servlet.DispatcherServlet 28 | 29 | contextConfigLocation 30 | classpath:spring/springmvc.xml 31 | 32 | 1 33 | 34 | 35 | SpringMVC-Dispatcher 36 | 37 | / 38 | 39 | 40 | 41 | 404 42 | /WEB-INF/jsp/misc/404.jsp 43 | 44 | 45 | 500 46 | /WEB-INF/jsp/misc/500.jsp 47 | 48 | 49 | 50 | 51 | CharacterEncodingFilter 52 | org.springframework.web.filter.CharacterEncodingFilter 53 | 54 | encoding 55 | utf-8 56 | 57 | 58 | 59 | CharacterEncodingFilter 60 | /* 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/img/fruit-icons/icons8-avocado-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/img/fruit-icons/icons8-avocado-100.png -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/img/fruit-icons/icons8-cherry-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/img/fruit-icons/icons8-cherry-100.png -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/img/fruit-icons/icons8-citrus-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/img/fruit-icons/icons8-citrus-100.png -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/img/fruit-icons/icons8-coconut-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/img/fruit-icons/icons8-coconut-100.png -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/img/fruit-icons/icons8-grapes-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/img/fruit-icons/icons8-grapes-100.png -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/img/fruit-icons/icons8-greens-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/img/fruit-icons/icons8-greens-100.png -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/img/fruit-icons/icons8-kiwi-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/img/fruit-icons/icons8-kiwi-100.png -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/img/fruit-icons/icons8-orange-2-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/img/fruit-icons/icons8-orange-2-100.png -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/img/fruit-icons/icons8-pears-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/img/fruit-icons/icons8-pears-100.png -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/img/fruit-icons/icons8-sweet-banana-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/img/fruit-icons/icons8-sweet-banana-100.png -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/img/fruit-icons/icons8-tomato-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/img/fruit-icons/icons8-tomato-100.png -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/img/fruit-icons/icons8-watermelon-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/img/fruit-icons/icons8-watermelon-100.png -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/img/logo/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/img/logo/icon.png -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/img/logo/icons8-kiwi-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/img/logo/icons8-kiwi-64.png -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/img/logo/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/img/logo/logo.png -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/img/logo/logo.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/img/logo/logo.psd -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/img/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/img/play.png -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/img/play2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/img/play2.png -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/js/charge.js: -------------------------------------------------------------------------------- 1 | 2 | var curPath=window.document.location.href; 3 | var pathName=window.document.location.pathname; 4 | var pos=curPath.indexOf(pathName); 5 | var localhostPath=curPath.substring(0,pos); 6 | var path=localhostPath + pathName.substring(0,pathName.substr(1).indexOf('/')+1); 7 | 8 | function charge() { 9 | layer.closeAll('dialog'); 10 | layer.open({ 11 | type: 1, 12 | skin: 'layui-layer-rim', //加上边框 13 | area: ['420px', '200px'], //宽高 14 | content: '
' + 15 | '

选择充值金额

' + 16 | '' + 17 | '' + 18 | '' + 19 | '' + 20 | '' + 21 | '
' 22 | }); 23 | 24 | 25 | } 26 | 27 | function postCharge(amount) { 28 | layer.closeAll(); 29 | layer.load(2); 30 | $.ajax({ 31 | type: "post", 32 | url: "/charge", 33 | data: '{"amount":' + amount + '}', 34 | contentType: "application/json;charset=utf-8", 35 | success: function (data) { 36 | setTimeout(function () { 37 | layer.closeAll('loading'); 38 | }, 2000); 39 | // $("#coin").html('余额:'+data); 40 | $("#coin").html(data); 41 | layer.msg('充值成功! 当前余额:'+data, {icon: 1}); 42 | 43 | } 44 | }); 45 | } -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/layui/css/modules/code.css: -------------------------------------------------------------------------------- 1 | /** layui-v2.2.6 MIT License By https://www.layui.com */ 2 | html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #e2e2e2;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:32px;line-height:32px;border-bottom:1px solid #e2e2e2}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none} -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/layui/css/modules/layer/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/layui/css/modules/layer/default/icon-ext.png -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/layui/css/modules/layer/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/layui/css/modules/layer/default/icon.png -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/layui/css/modules/layer/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/layui/css/modules/layer/default/loading-0.gif -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/layui/css/modules/layer/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/layui/css/modules/layer/default/loading-1.gif -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/layui/css/modules/layer/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/layui/css/modules/layer/default/loading-2.gif -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/layui/font/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/layui/font/iconfont.eot -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/layui/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/layui/font/iconfont.ttf -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/layui/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/layui/font/iconfont.woff -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/layui/lay/modules/carousel.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.2.6 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var i=layui.$,n=(layui.hint(),layui.device(),{config:{},set:function(e){var n=this;return n.config=i.extend({},n.config,e),n},on:function(e,i){return layui.onevent.call(this,t,e,i)}}),t="carousel",a="layui-this",l=">*[carousel-item]>*",o="layui-carousel-left",r="layui-carousel-right",d="layui-carousel-prev",s="layui-carousel-next",u="layui-carousel-arrow",c="layui-carousel-ind",m=function(e){var t=this;t.config=i.extend({},t.config,n.config,e),t.render()};m.prototype.config={width:"600px",height:"280px",full:!1,arrow:"hover",indicator:"inside",autoplay:!0,interval:3e3,anim:"",trigger:"click",index:0},m.prototype.render=function(){var e=this,n=e.config;n.elem=i(n.elem),n.elem[0]&&(e.elemItem=n.elem.find(l),n.index<0&&(n.index=0),n.index>=e.elemItem.length&&(n.index=e.elemItem.length-1),n.interval<800&&(n.interval=800),n.full?n.elem.css({position:"fixed",width:"100%",height:"100%",zIndex:9999}):n.elem.css({width:n.width,height:n.height}),n.elem.attr("lay-anim",n.anim),e.elemItem.eq(n.index).addClass(a),e.elemItem.length<=1||(e.indicator(),e.arrow(),e.autoplay(),e.events()))},m.prototype.reload=function(e){var n=this;clearInterval(n.timer),n.config=i.extend({},n.config,e),n.render()},m.prototype.prevIndex=function(){var e=this,i=e.config,n=i.index-1;return n<0&&(n=e.elemItem.length-1),n},m.prototype.nextIndex=function(){var e=this,i=e.config,n=i.index+1;return n>=e.elemItem.length&&(n=0),n},m.prototype.addIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index+e,n.index>=i.elemItem.length&&(n.index=0)},m.prototype.subIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index-e,n.index<0&&(n.index=i.elemItem.length-1)},m.prototype.autoplay=function(){var e=this,i=e.config;i.autoplay&&(e.timer=setInterval(function(){e.slide()},i.interval))},m.prototype.arrow=function(){var e=this,n=e.config,t=i(['",'"].join(""));n.elem.attr("lay-arrow",n.arrow),n.elem.find("."+u)[0]&&n.elem.find("."+u).remove(),n.elem.append(t),t.on("click",function(){var n=i(this),t=n.attr("lay-type");e.slide(t)})},m.prototype.indicator=function(){var e=this,n=e.config,t=e.elemInd=i(['
    ',function(){var i=[];return layui.each(e.elemItem,function(e){i.push("")}),i.join("")}(),"
"].join(""));n.elem.attr("lay-indicator",n.indicator),n.elem.find("."+c)[0]&&n.elem.find("."+c).remove(),n.elem.append(t),"updown"===n.anim&&t.css("margin-top",-(t.height()/2)),t.find("li").on("hover"===n.trigger?"mouseover":n.trigger,function(){var t=i(this),a=t.index();a>n.index?e.slide("add",a-n.index):a/g,">").replace(/'/g,"'").replace(/"/g,""")),c.html('
  1. '+o.replace(/[\r\t\n]+/g,"
  2. ")+"
"),c.find(">.layui-code-h3")[0]||c.prepend('

'+(c.attr("lay-title")||e.title||"code")+(e.about?'layui.code':"")+"

");var d=c.find(">.layui-code-ol");c.addClass("layui-box layui-code-view"),(c.attr("lay-skin")||e.skin)&&c.addClass("layui-code-"+(c.attr("lay-skin")||e.skin)),(d.find("li").length/100|0)>0&&d.css("margin-left",(d.find("li").length/100|0)+"px"),(c.attr("lay-height")||e.height)&&d.css("max-height",c.attr("lay-height")||e.height)})})}).addcss("modules/code.css","skincodecss"); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/layui/lay/modules/flow.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.2.6 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var l=layui.$,o=function(e){},t='';o.prototype.load=function(e){var o,i,n,r,a=this,c=0;e=e||{};var f=l(e.elem);if(f[0]){var m=l(e.scrollElem||document),u=e.mb||50,s=!("isAuto"in e)||e.isAuto,v=e.end||"没有更多了",y=e.scrollElem&&e.scrollElem!==document,d="加载更多",h=l('");f.find(".layui-flow-more")[0]||f.append(h);var p=function(e,t){e=l(e),h.before(e),t=0==t||null,t?h.html(v):h.find("a").html(d),i=t,o=null,n&&n()},g=function(){o=!0,h.find("a").html(t),"function"==typeof e.done&&e.done(++c,p)};if(g(),h.find("a").on("click",function(){l(this);i||o||g()}),e.isLazyimg)var n=a.lazyimg({elem:e.elem+" img",scrollElem:e.scrollElem});return s?(m.on("scroll",function(){var e=l(this),t=e.scrollTop();r&&clearTimeout(r),i||(r=setTimeout(function(){var i=y?e.height():l(window).height(),n=y?e.prop("scrollHeight"):document.documentElement.scrollHeight;n-t-i<=u&&(o||g())},100))}),a):a}},o.prototype.lazyimg=function(e){var o,t=this,i=0;e=e||{};var n=l(e.scrollElem||document),r=e.elem||"img",a=e.scrollElem&&e.scrollElem!==document,c=function(e,l){var o=n.scrollTop(),r=o+l,c=a?function(){return e.offset().top-n.offset().top+o}():e.offset().top;if(c>=o&&c<=r&&!e.attr("src")){var m=e.attr("lay-src");layui.img(m,function(){var l=t.lazyimg.elem.eq(i);e.attr("src",m).removeAttr("lay-src"),l[0]&&f(l),i++})}},f=function(e,o){var f=a?(o||n).height():l(window).height(),m=n.scrollTop(),u=m+f;if(t.lazyimg.elem=l(r),e)c(e,f);else for(var s=0;su)break}};if(f(),!o){var m;n.on("scroll",function(){var e=l(this);m&&clearTimeout(m),m=setTimeout(function(){f(null,e)},50)}),o=!0}return f},e("flow",new o)}); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/layui/lay/modules/laypage.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.2.6 MIT License By https://www.layui.com */ 2 | ;layui.define(function(e){"use strict";var a=document,t="getElementById",n="getElementsByTagName",i="laypage",r="layui-disabled",u=function(e){var a=this;a.config=e||{},a.config.index=++s.index,a.render(!0)};u.prototype.type=function(){var e=this.config;if("object"==typeof e.elem)return void 0===e.elem.length?2:3},u.prototype.view=function(){var e=this,a=e.config,t=a.groups="groups"in a?0|a.groups:5;a.layout="object"==typeof a.layout?a.layout:["prev","page","next"],a.count=0|a.count,a.curr=0|a.curr||1,a.limits="object"==typeof a.limits?a.limits:[10,20,30,40,50],a.limit=0|a.limit||10,a.pages=Math.ceil(a.count/a.limit)||1,a.curr>a.pages&&(a.curr=a.pages),t<0?t=1:t>a.pages&&(t=a.pages),a.prev="prev"in a?a.prev:"上一页",a.next="next"in a?a.next:"下一页";var n=a.pages>t?Math.ceil((a.curr+(t>1?1:0))/(t>0?t:1)):1,i={prev:function(){return a.prev?''+a.prev+"":""}(),page:function(){var e=[];if(a.count<1)return"";n>1&&a.first!==!1&&0!==t&&e.push(''+(a.first||1)+"");var i=Math.floor((t-1)/2),r=n>1?a.curr-i:1,u=n>1?function(){var e=a.curr+(t-i-1);return e>a.pages?a.pages:e}():t;for(u-r2&&e.push('');r<=u;r++)r===a.curr?e.push('"+r+""):e.push(''+r+"");return a.pages>t&&a.pages>u&&a.last!==!1&&(u+1…'),0!==t&&e.push(''+(a.last||a.pages)+"")),e.join("")}(),next:function(){return a.next?''+a.next+"":""}(),count:'共 '+a.count+" 条",limit:function(){var e=['"}(),skip:function(){return['到第','','页',""].join("")}()};return['
',function(){var e=[];return layui.each(a.layout,function(a,t){i[t]&&e.push(i[t])}),e.join("")}(),"
"].join("")},u.prototype.jump=function(e,a){if(e){var t=this,i=t.config,r=e.children,u=e[n]("button")[0],l=e[n]("input")[0],p=e[n]("select")[0],c=function(){var e=0|l.value.replace(/\s|\D/g,"");e&&(i.curr=e,t.render())};if(a)return c();for(var o=0,y=r.length;oi.pages||(i.curr=e,t.render())});p&&s.on(p,"change",function(){var e=this.value;i.curr*e>i.count&&(i.curr=Math.ceil(i.count/e)),i.limit=e,t.render()}),u&&s.on(u,"click",function(){c()})}},u.prototype.skip=function(e){if(e){var a=this,t=e[n]("input")[0];t&&s.on(t,"keyup",function(t){var n=this.value,i=t.keyCode;/^(37|38|39|40)$/.test(i)||(/\D/.test(n)&&(this.value=n.replace(/\D/,"")),13===i&&a.jump(e,!0))})}},u.prototype.render=function(e){var n=this,i=n.config,r=n.type(),u=n.view();2===r?i.elem&&(i.elem.innerHTML=u):3===r?i.elem.html(u):a[t](i.elem)&&(a[t](i.elem).innerHTML=u),i.jump&&i.jump(i,e);var s=a[t]("layui-laypage-"+i.index);n.jump(s),i.hash&&!e&&(location.hash="!"+i.hash+"="+i.curr),n.skip(s)};var s={render:function(e){var a=new u(e);return a.index},index:layui.laypage?layui.laypage.index+1e4:0,on:function(e,a,t){return e.attachEvent?e.attachEvent("on"+a,function(a){a.target=a.srcElement,t.call(e,a)}):e.addEventListener(a,t,!1),this}};e(i,s)}); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/layui/lay/modules/laytpl.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.2.6 MIT License By https://www.layui.com */ 2 | ;layui.define(function(e){"use strict";var r={open:"{{",close:"}}"},c={exp:function(e){return new RegExp(e,"g")},query:function(e,c,t){var o=["#([\\s\\S])+?","([^{#}])*?"][e||0];return n((c||"")+r.open+o+r.close+(t||""))},escape:function(e){return String(e||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")},error:function(e,r){var c="Laytpl Error:";return"object"==typeof console&&console.error(c+e+"\n"+(r||"")),c+e}},n=c.exp,t=function(e){this.tpl=e};t.pt=t.prototype,window.errors=0,t.pt.parse=function(e,t){var o=this,p=e,a=n("^"+r.open+"#",""),l=n(r.close+"$","");e=e.replace(/\s+|\r|\t|\n/g," ").replace(n(r.open+"#"),r.open+"# ").replace(n(r.close+"}"),"} "+r.close).replace(/\\/g,"\\\\").replace(n(r.open+"!(.+?)!"+r.close),function(e){return e=e.replace(n("^"+r.open+"!"),"").replace(n("!"+r.close),"").replace(n(r.open+"|"+r.close),function(e){return e.replace(/(.)/g,"\\$1")})}).replace(/(?="|')/g,"\\").replace(c.query(),function(e){return e=e.replace(a,"").replace(l,""),'";'+e.replace(/\\/g,"")+';view+="'}).replace(c.query(1),function(e){var c='"+(';return e.replace(/\s/g,"")===r.open+r.close?"":(e=e.replace(n(r.open+"|"+r.close),""),/^=/.test(e)&&(e=e.replace(/^=/,""),c='"+_escape_('),c+e.replace(/\\/g,"")+')+"')}),e='"use strict";var view = "'+e+'";return view;';try{return o.cache=e=new Function("d, _escape_",e),e(t,c.escape)}catch(u){return delete o.cache,c.error(u,p)}},t.pt.render=function(e,r){var n,t=this;return e?(n=t.cache?t.cache(e,c.escape):t.parse(t.tpl,e),r?void r(n):n):c.error("no data")};var o=function(e){return"string"!=typeof e?c.error("Template not found"):new t(e)};o.config=function(e){e=e||{};for(var c in e)r[c]=e[c]},o.v="1.2.0",e("laytpl",o)}); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/layui/lay/modules/tree.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.2.6 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var o=layui.$,a=layui.hint(),i="layui-tree-enter",r=function(e){this.options=e},t={arrow:["",""],checkbox:["",""],radio:["",""],branch:["",""],leaf:""};r.prototype.init=function(e){var o=this;e.addClass("layui-box layui-tree"),o.options.skin&&e.addClass("layui-tree-skin-"+o.options.skin),o.tree(e),o.on(e)},r.prototype.tree=function(e,a){var i=this,r=i.options,n=a||r.nodes;layui.each(n,function(a,n){var l=n.children&&n.children.length>0,c=o('
    '),s=o(["
  • ",function(){return l?''+(n.spread?t.arrow[1]:t.arrow[0])+"":""}(),function(){return r.check?''+("checkbox"===r.check?t.checkbox[0]:"radio"===r.check?t.radio[0]:"")+"":""}(),function(){return'"+(''+(l?n.spread?t.branch[1]:t.branch[0]:t.leaf)+"")+(""+(n.name||"未命名")+"")}(),"
  • "].join(""));l&&(s.append(c),i.tree(c,n.children)),e.append(s),"function"==typeof r.click&&i.click(s,n),i.spread(s,n),r.drag&&i.drag(s,n)})},r.prototype.click=function(e,o){var a=this,i=a.options;e.children("a").on("click",function(e){layui.stope(e),i.click(o)})},r.prototype.spread=function(e,o){var a=this,i=(a.options,e.children(".layui-tree-spread")),r=e.children("ul"),n=e.children("a"),l=function(){e.data("spread")?(e.data("spread",null),r.removeClass("layui-show"),i.html(t.arrow[0]),n.find(".layui-icon").html(t.branch[0])):(e.data("spread",!0),r.addClass("layui-show"),i.html(t.arrow[1]),n.find(".layui-icon").html(t.branch[1]))};r[0]&&(i.on("click",l),n.on("dblclick",l))},r.prototype.on=function(e){var a=this,r=a.options,t="layui-tree-drag";e.find("i").on("selectstart",function(e){return!1}),r.drag&&o(document).on("mousemove",function(e){var i=a.move;if(i.from){var r=(i.to,o('
    '));e.preventDefault(),o("."+t)[0]||o("body").append(r);var n=o("."+t)[0]?o("."+t):r;n.addClass("layui-show").html(i.from.elem.children("a").html()),n.css({left:e.pageX+10,top:e.pageY+10})}}).on("mouseup",function(){var e=a.move;e.from&&(e.from.elem.children("a").removeClass(i),e.to&&e.to.elem.children("a").removeClass(i),a.move={},o("."+t).remove())})},r.prototype.move={},r.prototype.drag=function(e,a){var r=this,t=(r.options,e.children("a")),n=function(){var t=o(this),n=r.move;n.from&&(n.to={item:a,elem:e},t.addClass(i))};t.on("mousedown",function(){var o=r.move;o.from={item:a,elem:e}}),t.on("mouseenter",n).on("mousemove",n).on("mouseleave",function(){var e=o(this),a=r.move;a.from&&(delete a.to,e.removeClass(i))})},e("tree",function(e){var i=new r(e=e||{}),t=o(e.elem);return t[0]?void i.init(t):a.error("layui.tree 没有找到"+e.elem+"元素")})}); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/layui/lay/modules/util.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.2.6 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var t=layui.$,i={fixbar:function(e){var i,o,a="layui-fixbar",r="layui-fixbar-top",n=t(document),l=t("body");e=t.extend({showHeight:200},e),e.bar1=e.bar1===!0?"":e.bar1,e.bar2=e.bar2===!0?"":e.bar2,e.bgcolor=e.bgcolor?"background-color:"+e.bgcolor:"";var c=[e.bar1,e.bar2,""],g=t(['
      ',e.bar1?'
    • '+c[0]+"
    • ":"",e.bar2?'
    • '+c[1]+"
    • ":"",'
    • '+c[2]+"
    • ","
    "].join("")),s=g.find("."+r),u=function(){var t=n.scrollTop();t>=e.showHeight?i||(s.show(),i=1):i&&(s.hide(),i=0)};t("."+a)[0]||("object"==typeof e.css&&g.css(e.css),l.append(g),u(),g.find("li").on("click",function(){var i=t(this),o=i.attr("lay-type");"top"===o&&t("html,body").animate({scrollTop:0},200),e.click&&e.click.call(this,o)}),n.on("scroll",function(){clearTimeout(o),o=setTimeout(function(){u()},100)}))},countdown:function(e,t,i){var o=this,a="function"==typeof t,r=new Date(e).getTime(),n=new Date(!t||a?(new Date).getTime():t).getTime(),l=r-n,c=[Math.floor(l/864e5),Math.floor(l/36e5)%24,Math.floor(l/6e4)%60,Math.floor(l/1e3)%60];a&&(i=t);var g=setTimeout(function(){o.countdown(e,n+1e3,i)},1e3);return i&&i(l>0?c:[0,0,0,0],t,g),l<=0&&clearTimeout(g),g},timeAgo:function(e,t){var i=this,o=[[],[]],a=(new Date).getTime()-new Date(e).getTime();return a>6912e5?(a=new Date(e),o[0][0]=i.digit(a.getFullYear(),4),o[0][1]=i.digit(a.getMonth()+1),o[0][2]=i.digit(a.getDate()),t||(o[1][0]=i.digit(a.getHours()),o[1][1]=i.digit(a.getMinutes()),o[1][2]=i.digit(a.getSeconds())),o[0].join("-")+" "+o[1].join(":")):a>=864e5?(a/1e3/60/60/24|0)+"天前":a>=36e5?(a/1e3/60/60|0)+"小时前":a>=12e4?(a/1e3/60|0)+"分钟前":a<0?"未来":"刚刚"},digit:function(e,t){var i="";e=String(e),t=t||2;for(var o=e.length;o0;r--)if("interactive"===n[r].readyState){e=n[r].src;break}return e||n[o].src}();return e.substring(0,e.lastIndexOf("/")+1)}(),a=function(t){e.console&&console.error&&console.error("Layui hint: "+t)},i="undefined"!=typeof opera&&"[object Opera]"===opera.toString(),u={layer:"modules/layer",laydate:"modules/laydate",laypage:"modules/laypage",laytpl:"modules/laytpl",layim:"modules/layim",layedit:"modules/layedit",form:"modules/form",upload:"modules/upload",tree:"modules/tree",table:"modules/table",element:"modules/element",util:"modules/util",flow:"modules/flow",carousel:"modules/carousel",code:"modules/code",jquery:"modules/jquery",mobile:"modules/mobile","layui.all":"../layui.all"};o.prototype.cache=n,o.prototype.define=function(e,t){var o=this,r="function"==typeof e,a=function(){var e=function(e,t){layui[e]=t,n.status[e]=!0};return"function"==typeof t&&t(function(o,r){e(o,r),n.callback[o]=function(){t(e)}}),this};return r&&(t=e,e=[]),layui["layui.all"]||!layui["layui.all"]&&layui["layui.mobile"]?a.call(o):(o.use(e,a),o)},o.prototype.use=function(e,o,l){function s(e,t){var o="PLaySTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/;("load"===e.type||o.test((e.currentTarget||e.srcElement).readyState))&&(n.modules[f]=t,d.removeChild(v),function r(){return++m>1e3*n.timeout/4?a(f+" is not a valid module"):void(n.status[f]?c():setTimeout(r,4))}())}function c(){l.push(layui[f]),e.length>1?y.use(e.slice(1),o,l):"function"==typeof o&&o.apply(layui,l)}var y=this,p=n.dir=n.dir?n.dir:r,d=t.getElementsByTagName("head")[0];e="string"==typeof e?[e]:e,window.jQuery&&jQuery.fn.on&&(y.each(e,function(t,n){"jquery"===n&&e.splice(t,1)}),layui.jquery=layui.$=jQuery);var f=e[0],m=0;if(l=l||[],n.host=n.host||(p.match(/\/\/([\s\S]+?)\//)||["//"+location.host+"/"])[0],0===e.length||layui["layui.all"]&&u[f]||!layui["layui.all"]&&layui["layui.mobile"]&&u[f])return c(),y;if(n.modules[f])!function g(){return++m>1e3*n.timeout/4?a(f+" is not a valid module"):void("string"==typeof n.modules[f]&&n.status[f]?c():setTimeout(g,4))}();else{var v=t.createElement("script"),h=(u[f]?p+"lay/":/^\{\/\}/.test(y.modules[f])?"":n.base||"")+(y.modules[f]||f)+".js";h=h.replace(/^\{\/\}/,""),v.async=!0,v.charset="utf-8",v.src=h+function(){var e=n.version===!0?n.v||(new Date).getTime():n.version||"";return e?"?v="+e:""}(),d.appendChild(v),!v.attachEvent||v.attachEvent.toString&&v.attachEvent.toString().indexOf("[native code")<0||i?v.addEventListener("load",function(e){s(e,h)},!1):v.attachEvent("onreadystatechange",function(e){s(e,h)}),n.modules[f]=h}return y},o.prototype.getStyle=function(t,n){var o=t.currentStyle?t.currentStyle:e.getComputedStyle(t,null);return o[o.getPropertyValue?"getPropertyValue":"getAttribute"](n)},o.prototype.link=function(e,o,r){var i=this,u=t.createElement("link"),l=t.getElementsByTagName("head")[0];"string"==typeof o&&(r=o);var s=(r||e).replace(/\.|\//g,""),c=u.id="layuicss-"+s,y=0;return u.rel="stylesheet",u.href=e+(n.debug?"?v="+(new Date).getTime():""),u.media="all",t.getElementById(c)||l.appendChild(u),"function"!=typeof o?i:(function p(){return++y>1e3*n.timeout/100?a(e+" timeout"):void(1989===parseInt(i.getStyle(t.getElementById(c),"width"))?function(){o()}():setTimeout(p,100))}(),i)},n.callback={},o.prototype.factory=function(e){if(layui[e])return"function"==typeof n.callback[e]?n.callback[e]:null},o.prototype.addcss=function(e,t,o){return layui.link(n.dir+"css/"+e,t,o)},o.prototype.img=function(e,t,n){var o=new Image;return o.src=e,o.complete?t(o):(o.onload=function(){o.onload=null,t(o)},void(o.onerror=function(e){o.onerror=null,n(e)}))},o.prototype.config=function(e){e=e||{};for(var t in e)n[t]=e[t];return this},o.prototype.modules=function(){var e={};for(var t in u)e[t]=u[t];return e}(),o.prototype.extend=function(e){var t=this;e=e||{};for(var n in e)t[n]||t.modules[n]?a("模块名 "+n+" 已被占用"):t.modules[n]=e[n];return t},o.prototype.router=function(e){var t=this,e=e||location.hash,n={path:[],search:{},hash:(e.match(/[^#](#.*$)/)||[])[1]||""};return/^#\//.test(e)?(e=e.replace(/^#\//,""),n.href="/"+e,e=e.replace(/([^#])(#.*$)/,"$1").split("/")||[],t.each(e,function(e,t){/^\w+=/.test(t)?function(){t=t.split("="),n.search[t[0]]=t[1]}():n.path.push(t)}),n):n},o.prototype.data=function(t,n,o){if(t=t||"layui",o=o||localStorage,e.JSON&&e.JSON.parse){if(null===n)return delete o[t];n="object"==typeof n?n:{key:n};try{var r=JSON.parse(o[t])}catch(a){var r={}}return"value"in n&&(r[n.key]=n.value),n.remove&&delete r[n.key],o[t]=JSON.stringify(r),n.key?r[n.key]:r}},o.prototype.sessionData=function(e,t){return this.data(e,t,sessionStorage)},o.prototype.device=function(t){var n=navigator.userAgent.toLowerCase(),o=function(e){var t=new RegExp(e+"/([^\\s\\_\\-]+)");return e=(n.match(t)||[])[1],e||!1},r={os:function(){return/windows/.test(n)?"windows":/linux/.test(n)?"linux":/iphone|ipod|ipad|ios/.test(n)?"ios":/mac/.test(n)?"mac":void 0}(),ie:function(){return!!(e.ActiveXObject||"ActiveXObject"in e)&&((n.match(/msie\s(\d+)/)||[])[1]||"11")}(),weixin:o("micromessenger")};return t&&!r[t]&&(r[t]=o(t)),r.android=/android/.test(n),r.ios="ios"===r.os,r},o.prototype.hint=function(){return{error:a}},o.prototype.each=function(e,t){var n,o=this;if("function"!=typeof t)return o;if(e=e||[],e.constructor===Object){for(n in e)if(t.call(e[n],n,e[n]))break}else for(n=0;na?1:r 00:00:18.625 5 | ...إلى... إلى الشمال يمكن أن نرى 6 | ...يمكن أن نرى الـ 7 | 8 | 2 9 | 00:00:18.750 --> 00:00:20.958 10 | ...إلى اليمين يمكن أن نرى الـ 11 | 12 | 3 13 | 00:00:21.000 --> 00:00:23.125 14 | طاحنات الرؤوس... 15 | 16 | 4 17 | 00:00:23.208 --> 00:00:25.208 18 | كل شيئ آمن 19 | آمن كلية 20 | 21 | 5 22 | 00:00:26.333 --> 00:00:28.333 23 | إيمو ؟ 24 | 25 | 6 26 | 00:00:28.875 --> 00:00:30.958 27 | ! حذاري 28 | 29 | 7 30 | 00:00:47.125 --> 00:00:49.167 31 | هل أصبت ؟ 32 | 33 | 8 34 | 00:00:52.125 --> 00:00:54.833 35 | ...لا أظن ذلك 36 | وأنت ؟ 37 | 38 | 9 39 | 00:00:55.625 --> 00:00:57.625 40 | أنا بخير 41 | 42 | 10 43 | 00:00:57.667 --> 00:01:01.667 44 | ،قم يا إيمو 45 | المكان هنا غير آمن 46 | 47 | 11 48 | 00:01:02.208 --> 00:01:04.083 49 | لنذهب 50 | 51 | 12 52 | 00:01:04.167 --> 00:01:06.167 53 | وماذا بعد ؟ 54 | 55 | 13 56 | 00:01:06.167 --> 00:01:08.583 57 | ...سترى... سترى 58 | 59 | 14 60 | 00:01:16.167 --> 00:01:18.375 61 | إيمو، من هنا 62 | 63 | 15 64 | 00:01:34.958 --> 00:01:37.000 65 | ! إتبعني 66 | 67 | 16 68 | 00:02:11.125 --> 00:02:13.625 69 | ! أسرع يا إيمو 70 | 71 | 17 72 | 00:02:48.375 --> 00:02:50.375 73 | ! لست منتبها 74 | 75 | 18 76 | 00:02:50.750 --> 00:02:54.500 77 | ...أريد فقط أن أجيب الـ 78 | الهاتف... 79 | 80 | 19 81 | 00:02:55.000 --> 00:02:58.500 82 | ،إيمو، أنظر 83 | أقصد أنصت 84 | 85 | 20 86 | 00:02:59.750 --> 00:03:03.292 87 | عليك أن تتعلم الإصغاء 88 | 89 | 21 90 | 00:03:03.625 --> 00:03:05.917 91 | هذا ليس ضربا من اللهو 92 | 93 | 22 94 | 00:03:06.083 --> 00:03:09.958 95 | ...إنك 96 | أقصد إننا قد نموت بسهولة في هذا المكان 97 | 98 | 23 99 | 00:03:10.208 --> 00:03:14.125 100 | ...أنصت 101 | أنصت إلى أصوات الآلة 102 | 103 | 24 104 | 00:03:18.333 --> 00:03:20.417 105 | أنصت إلى نَفَسِك 106 | 107 | 25 108 | 00:04:27.208 --> 00:04:29.250 109 | ألا تمل أبدا من هذا ؟ 110 | 111 | 26 112 | 00:04:29.583 --> 00:04:31.583 113 | أمل ؟!؟ 114 | نعم - 115 | 116 | 27 117 | 00:04:31.750 --> 00:04:34.667 118 | إيمو؛ الآلة في دقتها... مثل الساعة 119 | 120 | 28 121 | 00:04:35.500 --> 00:04:37.708 122 | ...حركة ناشزة واحدة قد 123 | 124 | 29 125 | 00:04:37.833 --> 00:04:39.875 126 | تطرحك معجونا 127 | 128 | 30 129 | 00:04:41.042 --> 00:04:43.083 130 | ...أو ليست 131 | 132 | 31 133 | 00:04:43.125 --> 00:04:46.542 134 | ! عجينة يا إيمو 135 | أ هذا ما تريد ؟ أن تصبح عجينة ؟ 136 | 137 | 32 138 | 00:04:48.083 --> 00:04:50.083 139 | أيمو، أ هذا هدفك في الحياة ؟ 140 | 141 | 33 142 | 00:04:50.583 --> 00:04:52.667 143 | أن تصير عجينة ؟ 144 | 145 | 34 146 | 00:05:41.833 --> 00:05:43.875 147 | إيمو، أغمض عينيك 148 | 149 | 35 150 | 00:05:44.917 --> 00:05:47.000 151 | لماذا ؟ 152 | ! الآن - 153 | 154 | 36 155 | 00:05:53.750 --> 00:05:56.042 156 | حسن 157 | 158 | 37 159 | 00:05:59.542 --> 00:06:02.792 160 | ماذا ترى إلى شمالك يا إيمو ؟ 161 | 162 | 38 163 | 00:06:04.417 --> 00:06:06.500 164 | لا شيئ 165 | حقا ؟ - 166 | 167 | 39 168 | 00:06:06.542 --> 00:06:08.625 169 | لا، لا شيئ البتة 170 | 171 | 40 172 | 00:06:08.625 --> 00:06:12.417 173 | وماذا ترى إلى جهتك اليمنى يا إيمو ؟ 174 | 175 | 41 176 | 00:06:13.667 --> 00:06:17.833 177 | ،نفس الشيئ يا بروغ 178 | ! نفس الشيئ بالضبط؛ لا شيئ 179 | 180 | 42 181 | 00:06:17.875 --> 00:06:19.917 182 | عظيم 183 | 184 | 43 185 | 00:06:40.625 --> 00:06:42.958 186 | أنصت يا بروغ ! هل تسمع ذلك ؟ 187 | 188 | 44 189 | 00:06:43.625 --> 00:06:45.625 190 | هل نستطيع الذهاب إلى هناك ؟ 191 | 192 | 45 193 | 00:06:45.708 --> 00:06:47.792 194 | هناك ؟ 195 | نعم - 196 | 197 | 46 198 | 00:06:47.833 --> 00:06:49.833 199 | إنه غير آمن يا إيمو 200 | 201 | 47 202 | 00:06:49.917 --> 00:06:52.500 203 | صدقني، إنه غير آمن 204 | 205 | 48 206 | 00:06:53.292 --> 00:06:55.375 207 | ...لكن لعلي أستطيع 208 | 209 | 49 210 | 00:06:55.417 --> 00:06:57.417 211 | ...لكن 212 | ! لا - 213 | 214 | 50 215 | 00:06:57.667 --> 00:06:59.667 216 | ! لا 217 | 218 | 51 219 | 00:07:00.875 --> 00:07:03.750 220 | هل من أسئلة أخرى يا إيمو ؟ 221 | 222 | 52 223 | 00:07:04.250 --> 00:07:06.333 224 | لا 225 | 226 | 53 227 | 00:07:09.458 --> 00:07:11.542 228 | ...إيمو 229 | نعم - 230 | 231 | 54 232 | 00:07:11.875 --> 00:07:13.958 233 | ...لماذا يا إيمو... لماذا 234 | 235 | 55 236 | 00:07:15.292 --> 00:07:18.792 237 | لماذا لا تستطيع أن ترى حُسْن هذا المكان 238 | 239 | 56 240 | 00:07:18.833 --> 00:07:20.833 241 | ...والطريقة التي يعمل بها 242 | 243 | 57 244 | 00:07:20.875 --> 00:07:24.000 245 | وكيف... وكيف أنه غاية في الكمال 246 | 247 | 58 248 | 00:07:24.083 --> 00:07:27.417 249 | ! لا يا بروغ، لا أرى ذلك 250 | 251 | 59 252 | 00:07:27.542 --> 00:07:30.333 253 | لا أرى ذلك لأنه لا يوجد شيئ هناك 254 | 255 | 60 256 | 00:07:31.500 --> 00:07:35.333 257 | ثم لماذا يجب علي أن أسلم حياتي 258 | لشيئ لا وجود له ؟ 259 | 260 | 61 261 | 00:07:35.583 --> 00:07:37.625 262 | هل يمكنك أن تخبرني ؟ 263 | 264 | 62 265 | 00:07:37.708 --> 00:07:39.750 266 | ! أجبني 267 | 268 | 63 269 | 00:07:43.208 --> 00:07:47.333 270 | ...بروغ 271 | ! أنت معتوه يا هذا 272 | 273 | 64 274 | 00:07:47.375 --> 00:07:49.417 275 | ! إبعد عني 276 | 277 | 65 278 | 00:07:52.583 --> 00:07:55.083 279 | ! لا يا إيمو ! إنه فخ 280 | 281 | 66 282 | 00:07:55.833 --> 00:07:57.875 283 | ...إنه فخ 284 | 285 | 67 286 | 00:07:57.917 --> 00:08:01.750 287 | إلى جنبك الأيسر يمكنك أن ترى 288 | حدائق بابل المعلقة 289 | 290 | 68 291 | 00:08:02.250 --> 00:08:04.292 292 | هل تعجبك كفخ ؟ 293 | 294 | 69 295 | 00:08:05.458 --> 00:08:07.542 296 | لا يا أيمو 297 | 298 | 70 299 | 00:08:09.417 --> 00:08:12.792 300 | ...إلى جنبك الأيمن يمكنك رؤية 301 | حزر ماذا ؟ 302 | 303 | 71 304 | 00:08:13.000 --> 00:08:15.042 305 | ! عملاق رودس 306 | 307 | 72 308 | 00:08:15.125 --> 00:08:16.417 309 | ! لا 310 | 311 | 73 312 | 00:08:16.458 --> 00:08:20.500 313 | ،عملاق رودس 314 | وهو هنا خصيصا من أجلك يا بروغ 315 | 316 | 74 317 | 00:08:20.583 --> 00:08:22.583 318 | فقط من أجلك 319 | 320 | 75 321 | 00:08:51.333 --> 00:08:53.375 322 | إنه هناك 323 | 324 | 76 325 | 00:08:53.417 --> 00:08:55.500 326 | أنا أؤكد لك... إيمو 327 | 328 | 77 329 | 00:08:57.333 --> 00:09:00.000 330 | ...إنه 331 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/examples/elephantsdream/captions.en.vtt: -------------------------------------------------------------------------------- 1 | WEBVTT 2 | 3 | 1 4 | 00:00:15.000 --> 00:00:17.951 5 | At the left we can see... 6 | 7 | 2 8 | 00:00:18.166 --> 00:00:20.083 9 | At the right we can see the... 10 | 11 | 3 12 | 00:00:20.119 --> 00:00:21.962 13 | ...the head-snarlers 14 | 15 | 4 16 | 00:00:21.999 --> 00:00:24.368 17 | Everything is safe. 18 | Perfectly safe. 19 | 20 | 5 21 | 00:00:24.582 --> 00:00:27.035 22 | Emo? 23 | 24 | 6 25 | 00:00:28.206 --> 00:00:29.996 26 | Watch out! 27 | 28 | 7 29 | 00:00:47.037 --> 00:00:48.494 30 | Are you hurt? 31 | 32 | 8 33 | 00:00:51.994 --> 00:00:53.949 34 | I don't think so. 35 | You? 36 | 37 | 9 38 | 00:00:55.160 --> 00:00:56.985 39 | I'm Ok. 40 | 41 | 10 42 | 00:00:57.118 --> 00:01:01.111 43 | Get up. 44 | Emo. it's not safe here. 45 | 46 | 11 47 | 00:01:02.034 --> 00:01:03.573 48 | Let's go. 49 | 50 | 12 51 | 00:01:03.610 --> 00:01:05.114 52 | What's next? 53 | 54 | 13 55 | 00:01:05.200 --> 00:01:09.146 56 | You'll see! 57 | 58 | 14 59 | 00:01:16.032 --> 00:01:18.022 60 | Emo. 61 | This way. 62 | 63 | 15 64 | 00:01:34.237 --> 00:01:35.481 65 | Follow me! 66 | 67 | 16 68 | 00:02:11.106 --> 00:02:12.480 69 | Hurry Emo! 70 | 71 | 17 72 | 00:02:48.059 --> 00:02:49.930 73 | You're not paying attention! 74 | 75 | 18 76 | 00:02:50.142 --> 00:02:54.052 77 | I just want to answer the... 78 | ...phone. 79 | 80 | 19 81 | 00:02:54.974 --> 00:02:57.972 82 | Emo. look. 83 | I mean listen. 84 | 85 | 20 86 | 00:02:59.140 --> 00:03:02.008 87 | You have to learn to listen. 88 | 89 | 21 90 | 00:03:03.140 --> 00:03:04.965 91 | This is not some game. 92 | 93 | 22 94 | 00:03:05.056 --> 00:03:09.345 95 | You. I mean we. 96 | we could easily die out here. 97 | 98 | 23 99 | 00:03:10.014 --> 00:03:13.959 100 | Listen. 101 | listen to the sounds of the machine. 102 | 103 | 24 104 | 00:03:18.054 --> 00:03:20.009 105 | Listen to your breathing. 106 | 107 | 25 108 | 00:04:27.001 --> 00:04:28.956 109 | Well. don't you ever get tired of this? 110 | 111 | 26 112 | 00:04:29.084 --> 00:04:30.909 113 | Tired?!? 114 | 115 | 27 116 | 00:04:31.126 --> 00:04:34.491 117 | Emo. the machine is like clockwork. 118 | 119 | 28 120 | 00:04:35.083 --> 00:04:37.074 121 | One move out of place... 122 | 123 | 29 124 | 00:04:37.166 --> 00:04:39.121 125 | ...and you're ground to a pulp. 126 | 127 | 30 128 | 00:04:40.958 --> 00:04:42.004 129 | But isn't it - 130 | 131 | 31 132 | 00:04:42.041 --> 00:04:46.034 133 | Pulp. Emo! 134 | Is that what you want. pulp? 135 | 136 | 32 137 | 00:04:47.040 --> 00:04:48.995 138 | Emo. your goal in life... 139 | 140 | 33 141 | 00:04:50.081 --> 00:04:51.953 142 | ...pulp? 143 | 144 | 34 145 | 00:05:41.156 --> 00:05:43.028 146 | Emo. close your eyes. 147 | 148 | 35 149 | 00:05:44.156 --> 00:05:46.027 150 | Why? 151 | - Now! 152 | 153 | 36 154 | 00:05:51.155 --> 00:05:52.102 155 | Ok. 156 | 157 | 37 158 | 00:05:53.113 --> 00:05:54.688 159 | Good. 160 | 161 | 38 162 | 00:05:59.070 --> 00:06:02.103 163 | What do you see at your left side. Emo? 164 | 165 | 39 166 | 00:06:04.028 --> 00:06:05.899 167 | Nothing. 168 | - Really? 169 | 170 | 40 171 | 00:06:06.027 --> 00:06:07.105 172 | No. nothing at all. 173 | 174 | 41 175 | 00:06:07.944 --> 00:06:11.984 176 | And at your right. 177 | what do you see at your right side. Emo? 178 | 179 | 42 180 | 00:06:13.151 --> 00:06:16.102 181 | The same Proog. exactly the same... 182 | 183 | 43 184 | 00:06:16.942 --> 00:06:19.098 185 | ...nothing! 186 | - Great. 187 | 188 | 44 189 | 00:06:40.105 --> 00:06:42.724 190 | Listen Proog! Do you hear that! 191 | 192 | 45 193 | 00:06:43.105 --> 00:06:44.894 194 | Can we go here? 195 | 196 | 46 197 | 00:06:44.979 --> 00:06:47.894 198 | There? 199 | It isn't safe. Emo. 200 | 201 | 47 202 | 00:06:49.145 --> 00:06:52.013 203 | But... 204 | - Trust me. it's not. 205 | 206 | 48 207 | 00:06:53.020 --> 00:06:54.145 208 | Maybe I could... 209 | 210 | 49 211 | 00:06:54.181 --> 00:06:55.969 212 | No. 213 | 214 | 50 215 | 00:06:57.102 --> 00:06:59.934 216 | NO! 217 | 218 | 51 219 | 00:07:00.144 --> 00:07:03.058 220 | Any further questions. Emo? 221 | 222 | 52 223 | 00:07:03.976 --> 00:07:05.090 224 | No. 225 | 226 | 53 227 | 00:07:09.059 --> 00:07:10.089 228 | Emo? 229 | 230 | 54 231 | 00:07:11.142 --> 00:07:13.058 232 | Emo. why... 233 | 234 | 55 235 | 00:07:13.095 --> 00:07:14.022 236 | Emo... 237 | 238 | 56 239 | 00:07:14.058 --> 00:07:18.003 240 | ...why can't you see 241 | the beauty of this place? 242 | 243 | 57 244 | 00:07:18.141 --> 00:07:20.048 245 | The way it works. 246 | 247 | 58 248 | 00:07:20.140 --> 00:07:23.895 249 | How perfect it is. 250 | 251 | 59 252 | 00:07:23.932 --> 00:07:26.964 253 | No. Proog. I don't see. 254 | 255 | 60 256 | 00:07:27.056 --> 00:07:29.970 257 | I don't see because there's nothing there. 258 | 259 | 61 260 | 00:07:31.055 --> 00:07:34.965 261 | And why should I trust my 262 | life to something that isn't there? 263 | 264 | 62 265 | 00:07:35.055 --> 00:07:36.926 266 | Well can you tell me that? 267 | 268 | 63 269 | 00:07:37.054 --> 00:07:38.926 270 | Answer me! 271 | 272 | 64 273 | 00:07:42.970 --> 00:07:44.000 274 | Proog... 275 | 276 | 65 277 | 00:07:45.053 --> 00:07:46.985 278 | ...you're a sick man! 279 | 280 | 66 281 | 00:07:47.022 --> 00:07:48.918 282 | Stay away from me! 283 | 284 | 67 285 | 00:07:52.052 --> 00:07:54.884 286 | No! Emo! It's a trap! 287 | 288 | 68 289 | 00:07:55.135 --> 00:07:56.931 290 | Hah. it's a trap. 291 | 292 | 69 293 | 00:07:56.968 --> 00:08:01.043 294 | At the left side you can see 295 | the hanging gardens of Babylon! 296 | 297 | 70 298 | 00:08:01.967 --> 00:08:03.957 299 | How's that for a trap? 300 | 301 | 71 302 | 00:08:05.050 --> 00:08:06.922 303 | No. Emo. 304 | 305 | 72 306 | 00:08:09.008 --> 00:08:12.088 307 | At the right side you can see... 308 | ...well guess what... 309 | 310 | 73 311 | 00:08:12.924 --> 00:08:14.665 312 | ...the colossus of Rhodes! 313 | 314 | 74 315 | 00:08:15.132 --> 00:08:16.053 316 | No! 317 | 318 | 75 319 | 00:08:16.090 --> 00:08:21.919 320 | The colossus of Rhodes 321 | and it is here just for you Proog. 322 | 323 | 76 324 | 00:08:51.001 --> 00:08:52.923 325 | It is there... 326 | 327 | 77 328 | 00:08:52.959 --> 00:08:56.040 329 | I'm telling you. 330 | Emo... 331 | 332 | 78 333 | 00:08:57.000 --> 00:08:59.867 334 | ...it is. -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/examples/elephantsdream/captions.ja.vtt: -------------------------------------------------------------------------------- 1 | WEBVTT 2 | 3 | 1 4 | 00:00:15.042 --> 00:00:18.042 5 | 左に見えるのは… 6 | 7 | 2 8 | 00:00:18.750 --> 00:00:20.333 9 | 右に見えるのは… 10 | 11 | 3 12 | 00:00:20.417 --> 00:00:21.917 13 | …首刈り機 14 | 15 | 4 16 | 00:00:22.000 --> 00:00:24.625 17 | すべて安全 18 | 完璧に安全だ 19 | 20 | 5 21 | 00:00:26.333 --> 00:00:27.333 22 | イーモ? 23 | 24 | 6 25 | 00:00:28.875 --> 00:00:30.250 26 | 危ない! 27 | 28 | 7 29 | 00:00:47.125 --> 00:00:48.250 30 | ケガはないか? 31 | 32 | 8 33 | 00:00:51.917 --> 00:00:53.917 34 | ええ、多分… 35 | あなたは? 36 | 37 | 9 38 | 00:00:55.625 --> 00:00:57.125 39 | わしは平気だ 40 | 41 | 10 42 | 00:00:57.583 --> 00:01:01.667 43 | 起きてくれイーモ 44 | ここは危ない 45 | 46 | 11 47 | 00:01:02.208 --> 00:01:03.667 48 | 行こう 49 | 50 | 12 51 | 00:01:03.750 --> 00:01:04.917 52 | どこに? 53 | 54 | 13 55 | 00:01:05.875 --> 00:01:07.875 56 | すぐにわかるさ! 57 | 58 | 14 59 | 00:01:16.167 --> 00:01:18.375 60 | イーモ、こっちだ 61 | 62 | 15 63 | 00:01:34.958 --> 00:01:36.958 64 | ついて来るんだ! 65 | 66 | 16 67 | 00:02:11.583 --> 00:02:12.792 68 | イーモ、早く! 69 | 70 | 17 71 | 00:02:48.375 --> 00:02:50.083 72 | むやみにさわるな! 73 | 74 | 18 75 | 00:02:50.750 --> 00:02:54.500 76 | 僕はただ、電話に 77 | …出ようと 78 | 79 | 19 80 | 00:02:55.000 --> 00:02:58.208 81 | イーモ、見るんだ… 82 | いや、聞いてくれ 83 | 84 | 20 85 | 00:02:59.750 --> 00:03:02.292 86 | 君は「聞き方」を知る必要がある 87 | 88 | 21 89 | 00:03:03.625 --> 00:03:05.125 90 | これは遊びじゃない 91 | 92 | 22 93 | 00:03:06.167 --> 00:03:10.417 94 | 我々はここでは 95 | たやすく死ぬ 96 | 97 | 23 98 | 00:03:11.208 --> 00:03:14.125 99 | 機械の声を聞くんだ 100 | 101 | 24 102 | 00:03:18.333 --> 00:03:22.417 103 | 君の息づかいを聞くんだ 104 | 105 | 25 106 | 00:04:27.208 --> 00:04:29.250 107 | そんなことして疲れない? 108 | 109 | 26 110 | 00:04:29.583 --> 00:04:31.083 111 | 疲れる?! 112 | 113 | 27 114 | 00:04:31.750 --> 00:04:34.667 115 | この機械は非常に正確で 116 | 117 | 28 118 | 00:04:35.500 --> 00:04:37.708 119 | 一つ間違えば… 120 | 121 | 29 122 | 00:04:37.833 --> 00:04:40.792 123 | …地面に落ちてバラバラだ 124 | 125 | 30 126 | 00:04:41.042 --> 00:04:42.375 127 | え、でも― 128 | 129 | 31 130 | 00:04:42.417 --> 00:04:46.542 131 | バラバラだぞ、イーモ! 132 | それでいいのか? 133 | 134 | 32 135 | 00:04:48.083 --> 00:04:50.000 136 | バラバラで死ぬんだぞ? 137 | 138 | 33 139 | 00:04:50.583 --> 00:04:52.250 140 | バラバラだ! 141 | 142 | 34 143 | 00:05:41.833 --> 00:05:43.458 144 | イーモ、目を閉じるんだ 145 | 146 | 35 147 | 00:05:44.917 --> 00:05:46.583 148 | なぜ? 149 | ―早く! 150 | 151 | 36 152 | 00:05:53.750 --> 00:05:56.042 153 | それでいい 154 | 155 | 37 156 | 00:05:59.542 --> 00:06:03.792 157 | 左に見えるものは何だ、イーモ? 158 | 159 | 38 160 | 00:06:04.417 --> 00:06:06.000 161 | え…何も 162 | ―本当か? 163 | 164 | 39 165 | 00:06:06.333 --> 00:06:07.917 166 | 全く何も 167 | 168 | 40 169 | 00:06:08.042 --> 00:06:12.833 170 | では右は 171 | 何か見えるか、イーモ? 172 | 173 | 41 174 | 00:06:13.875 --> 00:06:16.917 175 | 同じだよプルーグ、全く同じ… 176 | 177 | 42 178 | 00:06:17.083 --> 00:06:18.583 179 | 何もない! 180 | 181 | 43 182 | 00:06:40.625 --> 00:06:43.208 183 | プルーグ!何か聞こえない? 184 | 185 | 44 186 | 00:06:43.625 --> 00:06:45.042 187 | あそこに行かないか? 188 | 189 | 45 190 | 00:06:45.208 --> 00:06:48.042 191 | あそこ? 192 | …安全じゃない 193 | 194 | 46 195 | 00:06:49.917 --> 00:06:52.500 196 | でも… 197 | ―本当に危ないぞ 198 | 199 | 47 200 | 00:06:53.292 --> 00:06:54.792 201 | 大丈夫だよ… 202 | 203 | 48 204 | 00:06:54.833 --> 00:06:56.333 205 | だめだ 206 | 207 | 49 208 | 00:06:57.667 --> 00:07:00.167 209 | だめだ! 210 | 211 | 50 212 | 00:07:00.875 --> 00:07:03.750 213 | まだ続ける気か、イーモ? 214 | 215 | 51 216 | 00:07:04.250 --> 00:07:05.917 217 | いいえ… 218 | 219 | 52 220 | 00:07:09.458 --> 00:07:10.833 221 | イーモ? 222 | 223 | 53 224 | 00:07:11.875 --> 00:07:13.542 225 | イーモ、なぜ… 226 | 227 | 54 228 | 00:07:13.583 --> 00:07:14.458 229 | イーモ… 230 | 231 | 55 232 | 00:07:14.500 --> 00:07:18.500 233 | …なぜここの美しさが 234 | 見えない? 235 | 236 | 56 237 | 00:07:18.833 --> 00:07:20.750 238 | 仕組みがこんなに… 239 | 240 | 57 241 | 00:07:20.875 --> 00:07:24.000 242 | こんなに完全なのに 243 | 244 | 58 245 | 00:07:24.083 --> 00:07:27.417 246 | もういいよ!プルーグ! 247 | 248 | 59 249 | 00:07:27.542 --> 00:07:30.333 250 | そこには何もないんだから 251 | 252 | 60 253 | 00:07:31.500 --> 00:07:35.333 254 | なぜ命を「ない」物に 255 | ゆだねなきゃ? 256 | 257 | 61 258 | 00:07:35.583 --> 00:07:37.125 259 | 教えてくれないか? 260 | 261 | 62 262 | 00:07:37.500 --> 00:07:39.167 263 | さあ! 264 | 265 | 63 266 | 00:07:43.208 --> 00:07:44.583 267 | プルーグ… 268 | 269 | 64 270 | 00:07:45.500 --> 00:07:47.333 271 | あなたは病気なんだ 272 | 273 | 65 274 | 00:07:47.375 --> 00:07:49.208 275 | 僕から離れてくれ 276 | 277 | 66 278 | 00:07:52.583 --> 00:07:55.083 279 | いかん!イーモ!ワナだ! 280 | 281 | 67 282 | 00:07:55.833 --> 00:07:57.167 283 | ワナだ? ふーん 284 | 285 | 68 286 | 00:07:57.208 --> 00:08:01.750 287 | 左に何が見える? 288 | バビロンの空中庭園! 289 | 290 | 69 291 | 00:08:02.250 --> 00:08:04.292 292 | これがワナとでも? 293 | 294 | 70 295 | 00:08:05.458 --> 00:08:07.125 296 | だめだ、イーモ 297 | 298 | 71 299 | 00:08:09.417 --> 00:08:12.792 300 | 右にあるのは… 301 | …すごい!… 302 | 303 | 72 304 | 00:08:13.000 --> 00:08:14.750 305 | …ロードス島の巨像だ! 306 | 307 | 73 308 | 00:08:15.833 --> 00:08:16.708 309 | やめろ! 310 | 311 | 74 312 | 00:08:16.750 --> 00:08:22.167 313 | この巨像はあなたの物 314 | プルーグ、あなたのだよ 315 | 316 | 75 317 | 00:08:51.333 --> 00:08:53.167 318 | いってるじゃないか… 319 | 320 | 76 321 | 00:08:53.208 --> 00:08:55.500 322 | そこにあるって、イーモ… 323 | 324 | 77 325 | 00:08:57.333 --> 00:09:00.000 326 | …あるって -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/examples/elephantsdream/chapters.en.vtt: -------------------------------------------------------------------------------- 1 | WEBVTT 2 | 3 | NOTE Created by Owen Edwards 2015. http://creativecommons.org/licenses/by/2.5/ 4 | NOTE Based on 'finalbreakdown.rtf', part of the prepoduction notes, which are: 5 | NOTE (c) Copyright 2006, Blender Foundation / 6 | NOTE Netherlands Media Art Institute / 7 | NOTE www.elephantsdream.org 8 | 9 | 1 10 | 00:00:00.000 --> 00:00:27.500 11 | Prologue 12 | 13 | 2 14 | 00:00:27.500 --> 00:01:10.000 15 | Switchboard trap 16 | 17 | 3 18 | 00:01:10.000 --> 00:03:25.000 19 | Telephone/Lecture 20 | 21 | 4 22 | 00:03:25.000 --> 00:04:52.000 23 | Typewriter 24 | 25 | 5 26 | 00:04:52.000 --> 00:06:19.500 27 | Proog shows Emo stuff 28 | 29 | 6 30 | 00:06:19.500 --> 00:07:09.000 31 | Which way 32 | 33 | 7 34 | 00:07:09.000 --> 00:07:45.000 35 | Emo flips out 36 | 37 | 8 38 | 00:07:45.000 --> 00:09:25.000 39 | Emo creates 40 | 41 | 9 42 | 00:09:25.000 --> 00:10:53.000 43 | Closing credits 44 | 45 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/examples/elephantsdream/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Video.js Text Descriptions, Chapters & Captions Example 6 | 7 | 8 | 9 | 10 | 11 | 12 | 19 | 20 | 21 | 22 |

    This page demonstrates a text descriptions track (intended primarily for blind and visually impaired consumers of visual media)

    23 | 24 | 28 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/examples/shared/example-captions.vtt: -------------------------------------------------------------------------------- 1 | WEBVTT 2 | 3 | 00:00.700 --> 00:04.110 4 | Captions describe all relevant audio for the hearing impaired. 5 | [ Heroic music playing for a seagull ] 6 | 7 | 00:04.500 --> 00:05.000 8 | [ Splash!!! ] 9 | 10 | 00:05.100 --> 00:06.000 11 | [ Sploosh!!! ] 12 | 13 | 00:08.000 --> 00:09.225 14 | [ Splash...splash...splash splash splash ] 15 | 16 | 00:10.525 --> 00:11.255 17 | [ Splash, Sploosh again ] 18 | 19 | 00:13.500 --> 00:14.984 20 | Dolphin: eeeEEEEEeeee! 21 | 22 | 00:14.984 --> 00:16.984 23 | Dolphin: Squawk! eeeEEE? 24 | 25 | 00:25.000 --> 00:28.284 26 | [ A whole ton of splashes ] 27 | 28 | 00:29.500 --> 00:31.000 29 | Mine. Mine. Mine. 30 | 31 | 00:34.300 --> 00:36.000 32 | Shark: Chomp 33 | 34 | 00:36.800 --> 00:37.900 35 | Shark: CHOMP!!! 36 | 37 | 00:37.861 --> 00:41.193 38 | EEEEEEOOOOOOOOOOWHALENOISE 39 | 40 | 00:42.593 --> 00:45.611 41 | [ BIG SPLASH ] -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/examples/simple-embed/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Video.js | HTML5 Video Player 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/font/VideoJS.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/font/VideoJS.eot -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/font/VideoJS.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/font/VideoJS.ttf -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/font/VideoJS.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/font/VideoJS.woff -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/ar.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("ar",{ 2 | "Play": "تشغيل", 3 | "Pause": "ايقاف", 4 | "Current Time": "الوقت الحالي", 5 | "Duration Time": "Dauer", 6 | "Remaining Time": "الوقت المتبقي", 7 | "Stream Type": "نوع التيار", 8 | "LIVE": "مباشر", 9 | "Loaded": "تم التحميل", 10 | "Progress": "التقدم", 11 | "Fullscreen": "ملء الشاشة", 12 | "Non-Fullscreen": "غير ملء الشاشة", 13 | "Mute": "صامت", 14 | "Unmute": "غير الصامت", 15 | "Playback Rate": "معدل التشغيل", 16 | "Subtitles": "الترجمة", 17 | "subtitles off": "ايقاف الترجمة", 18 | "Captions": "التعليقات", 19 | "captions off": "ايقاف التعليقات", 20 | "Chapters": "فصول", 21 | "You aborted the media playback": "لقد ألغيت تشغيل الفيديو", 22 | "A network error caused the media download to fail part-way.": "تسبب خطأ في الشبكة بفشل تحميل الفيديو بالكامل.", 23 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "لا يمكن تحميل الفيديو بسبب فشل في الخادم أو الشبكة ، أو فشل بسبب عدم امكانية قراءة تنسيق الفيديو.", 24 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "تم ايقاف تشغيل الفيديو بسبب مشكلة فساد أو لأن الفيديو المستخدم يستخدم ميزات غير مدعومة من متصفحك.", 25 | "No compatible source was found for this media.": "فشل العثور على أي مصدر متوافق مع هذا الفيديو.", 26 | "Play Video": "تشغيل الفيديو", 27 | "Close": "أغلق", 28 | "Modal Window": "نافذة مشروطة", 29 | "This is a modal window": "هذه نافذة مشروطة", 30 | "This modal can be closed by pressing the Escape key or activating the close button.": "يمكن غلق هذه النافذة المشروطة عن طريق الضغط على زر الخروج أو تفعيل زر الإغلاق", 31 | ", opens captions settings dialog": ", تفتح نافذة خيارات التعليقات", 32 | ", opens subtitles settings dialog": ", تفتح نافذة خيارات الترجمة", 33 | ", selected": ", مختار" 34 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/ba.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("ba",{ 2 | "Play": "Pusti", 3 | "Pause": "Pauza", 4 | "Current Time": "Trenutno vrijeme", 5 | "Duration Time": "Vrijeme trajanja", 6 | "Remaining Time": "Preostalo vrijeme", 7 | "Stream Type": "Način strimovanja", 8 | "LIVE": "UŽIVO", 9 | "Loaded": "Učitan", 10 | "Progress": "Progres", 11 | "Fullscreen": "Puni ekran", 12 | "Non-Fullscreen": "Mali ekran", 13 | "Mute": "Prigušen", 14 | "Unmute": "Ne-prigušen", 15 | "Playback Rate": "Stopa reprodukcije", 16 | "Subtitles": "Podnaslov", 17 | "subtitles off": "Podnaslov deaktiviran", 18 | "Captions": "Titlovi", 19 | "captions off": "Titlovi deaktivirani", 20 | "Chapters": "Poglavlja", 21 | "You aborted the media playback": "Isključili ste reprodukciju videa.", 22 | "A network error caused the media download to fail part-way.": "Video se prestao preuzimati zbog greške na mreži.", 23 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Video se ne može reproducirati zbog servera, greške u mreži ili je format ne podržan.", 24 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Reprodukcija videa je zaustavljenja zbog greške u formatu ili zbog verzije vašeg pretraživača.", 25 | "No compatible source was found for this media.": "Nije nađen nijedan kompatibilan izvor ovog videa." 26 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/bg.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("bg",{ 2 | "Play": "Възпроизвеждане", 3 | "Pause": "Пауза", 4 | "Current Time": "Текущо време", 5 | "Duration Time": "Продължителност", 6 | "Remaining Time": "Оставащо време", 7 | "Stream Type": "Тип на потока", 8 | "LIVE": "НА ЖИВО", 9 | "Loaded": "Заредено", 10 | "Progress": "Прогрес", 11 | "Fullscreen": "Цял екран", 12 | "Non-Fullscreen": "Спиране на цял екран", 13 | "Mute": "Без звук", 14 | "Unmute": "Със звук", 15 | "Playback Rate": "Скорост на възпроизвеждане", 16 | "Subtitles": "Субтитри", 17 | "subtitles off": "Спряни субтитри", 18 | "Captions": "Аудио надписи", 19 | "captions off": "Спряни аудио надписи", 20 | "Chapters": "Глави", 21 | "You aborted the media playback": "Спряхте възпроизвеждането на видеото", 22 | "A network error caused the media download to fail part-way.": "Грешка в мрежата провали изтеглянето на видеото.", 23 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Видеото не може да бъде заредено заради проблем със сървъра или мрежата или защото този формат не е поддържан.", 24 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Възпроизвеждането на видеото беше прекъснато заради проблем с файла или защото видеото използва опции които браузърът Ви не поддържа.", 25 | "No compatible source was found for this media.": "Не беше намерен съвместим източник за това видео." 26 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/ca.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("ca",{ 2 | "Play": "Reproducció", 3 | "Pause": "Pausa", 4 | "Current Time": "Temps reproduït", 5 | "Duration Time": "Durada total", 6 | "Remaining Time": "Temps restant", 7 | "Stream Type": "Tipus de seqüència", 8 | "LIVE": "EN DIRECTE", 9 | "Loaded": "Carregat", 10 | "Progress": "Progrés", 11 | "Fullscreen": "Pantalla completa", 12 | "Non-Fullscreen": "Pantalla no completa", 13 | "Mute": "Silencia", 14 | "Unmute": "Amb so", 15 | "Playback Rate": "Velocitat de reproducció", 16 | "Subtitles": "Subtítols", 17 | "subtitles off": "Subtítols desactivats", 18 | "Captions": "Llegendes", 19 | "captions off": "Llegendes desactivades", 20 | "Chapters": "Capítols", 21 | "You aborted the media playback": "Heu interromput la reproducció del vídeo.", 22 | "A network error caused the media download to fail part-way.": "Un error de la xarxa ha interromput la baixada del vídeo.", 23 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "No s'ha pogut carregar el vídeo perquè el servidor o la xarxa han fallat, o bé perquè el seu format no és compatible.", 24 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "La reproducció de vídeo s'ha interrumput per un problema de corrupció de dades o bé perquè el vídeo demanava funcions que el vostre navegador no ofereix.", 25 | "No compatible source was found for this media.": "No s'ha trobat cap font compatible amb el vídeo." 26 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/cs.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("cs",{ 2 | "Play": "Přehrát", 3 | "Pause": "Pauza", 4 | "Current Time": "Aktuální čas", 5 | "Duration Time": "Doba trvání", 6 | "Remaining Time": "Zbývající čas", 7 | "Stream Type": "Stream Type", 8 | "LIVE": "ŽIVĚ", 9 | "Loaded": "Načteno", 10 | "Progress": "Stav", 11 | "Fullscreen": "Celá obrazovka", 12 | "Non-Fullscreen": "Zmenšená obrazovka", 13 | "Mute": "Ztlumit zvuk", 14 | "Unmute": "Přehrát zvuk", 15 | "Playback Rate": "Rychlost přehrávání", 16 | "Subtitles": "Titulky", 17 | "subtitles off": "Titulky vypnuty", 18 | "Captions": "Popisky", 19 | "captions off": "Popisky vypnuty", 20 | "Chapters": "Kapitoly", 21 | "You aborted the media playback": "Přehrávání videa je přerušeno.", 22 | "A network error caused the media download to fail part-way.": "Video nemohlo být načteno, kvůli chybě v síti.", 23 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Video nemohlo být načteno, buď kvůli chybě serveru nebo sítě nebo proto, že daný formát není podporován.", 24 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Váš prohlížeč nepodporuje formát videa.", 25 | "No compatible source was found for this media.": "Špatně zadaný zdroj videa." 26 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/da.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("da",{ 2 | "Play": "Afspil", 3 | "Pause": "Pause", 4 | "Current Time": "Aktuel tid", 5 | "Duration Time": "Varighed", 6 | "Remaining Time": "Resterende tid", 7 | "Stream Type": "Stream-type", 8 | "LIVE": "LIVE", 9 | "Loaded": "Indlæst", 10 | "Progress": "Status", 11 | "Fullscreen": "Fuldskærm", 12 | "Non-Fullscreen": "Luk fuldskærm", 13 | "Mute": "Uden lyd", 14 | "Unmute": "Med lyd", 15 | "Playback Rate": "Afspilningsrate", 16 | "Subtitles": "Undertekster", 17 | "subtitles off": "Uden undertekster", 18 | "Captions": "Undertekster for hørehæmmede", 19 | "captions off": "Uden undertekster for hørehæmmede", 20 | "Chapters": "Kapitler", 21 | "You aborted the media playback": "Du afbrød videoafspilningen.", 22 | "A network error caused the media download to fail part-way.": "En netværksfejl fik download af videoen til at fejle.", 23 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Videoen kunne ikke indlæses, enten fordi serveren eller netværket fejlede, eller fordi formatet ikke er understøttet.", 24 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Videoafspilningen blev afbrudt på grund af ødelagte data eller fordi videoen benyttede faciliteter som din browser ikke understøtter.", 25 | "No compatible source was found for this media.": "Fandt ikke en kompatibel kilde for denne media." 26 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/de.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("de",{ 2 | "Play": "Wiedergabe", 3 | "Pause": "Pause", 4 | "Current Time": "Aktueller Zeitpunkt", 5 | "Duration Time": "Dauer", 6 | "Remaining Time": "Verbleibende Zeit", 7 | "Stream Type": "Streamtyp", 8 | "LIVE": "LIVE", 9 | "Loaded": "Geladen", 10 | "Progress": "Status", 11 | "Fullscreen": "Vollbild", 12 | "Non-Fullscreen": "Kein Vollbild", 13 | "Mute": "Ton aus", 14 | "Unmute": "Ton ein", 15 | "Playback Rate": "Wiedergabegeschwindigkeit", 16 | "Subtitles": "Untertitel", 17 | "subtitles off": "Untertitel aus", 18 | "Captions": "Untertitel", 19 | "captions off": "Untertitel aus", 20 | "Chapters": "Kapitel", 21 | "You aborted the media playback": "Sie haben die Videowiedergabe abgebrochen.", 22 | "A network error caused the media download to fail part-way.": "Der Videodownload ist aufgrund eines Netzwerkfehlers fehlgeschlagen.", 23 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Das Video konnte nicht geladen werden, da entweder ein Server- oder Netzwerkfehler auftrat oder das Format nicht unterstützt wird.", 24 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Die Videowiedergabe wurde entweder wegen eines Problems mit einem beschädigten Video oder wegen verwendeten Funktionen, die vom Browser nicht unterstützt werden, abgebrochen.", 25 | "No compatible source was found for this media.": "Für dieses Video wurde keine kompatible Quelle gefunden.", 26 | "Play Video": "Video abspielen", 27 | "Close": "Schließen", 28 | "Modal Window": "Modales Fenster", 29 | "This is a modal window": "Dies ist ein modales Fenster", 30 | "This modal can be closed by pressing the Escape key or activating the close button.": "Durch Drücken der Esc-Taste bzw. Betätigung der Schaltfläche \"Schließen\" wird dieses modale Fenster geschlossen.", 31 | ", opens captions settings dialog": ", öffnet Einstellungen für Untertitel", 32 | ", opens subtitles settings dialog": ", öffnet Einstellungen für Untertitel", 33 | ", selected": ", ausgewählt", 34 | "Close Modal Dialog": "Modales Fenster schließen", 35 | "Descriptions": "Beschreibungen", 36 | "descriptions off": "Beschreibungen aus", 37 | "The media is encrypted and we do not have the keys to decrypt it.": "Die Entschlüsselungsschlüssel für den verschlüsselten Medieninhalt sind nicht verfügbar.", 38 | ", opens descriptions settings dialog": ", öffnet Einstellungen für Beschreibungen", 39 | "Audio Track": "Tonspur" 40 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/el.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("el",{ 2 | "Play": "Aναπαραγωγή", 3 | "Pause": "Παύση", 4 | "Current Time": "Τρέχων χρόνος", 5 | "Duration Time": "Συνολικός χρόνος", 6 | "Remaining Time": "Υπολοιπόμενος χρόνος", 7 | "Stream Type": "Τύπος ροής", 8 | "LIVE": "ΖΩΝΤΑΝΑ", 9 | "Loaded": "Φόρτωση επιτυχής", 10 | "Progress": "Πρόοδος", 11 | "Fullscreen": "Πλήρης οθόνη", 12 | "Non-Fullscreen": "Έξοδος από πλήρη οθόνη", 13 | "Mute": "Σίγαση", 14 | "Unmute": "Kατάργηση σίγασης", 15 | "Playback Rate": "Ρυθμός αναπαραγωγής", 16 | "Subtitles": "Υπότιτλοι", 17 | "subtitles off": "απόκρυψη υπότιτλων", 18 | "Captions": "Λεζάντες", 19 | "captions off": "απόκρυψη λεζάντων", 20 | "Chapters": "Κεφάλαια", 21 | "Close Modal Dialog": "Κλείσιμο παραθύρου", 22 | "Descriptions": "Περιγραφές", 23 | "descriptions off": "απόκρυψη περιγραφών", 24 | "Audio Track": "Ροή ήχου", 25 | "You aborted the media playback": "Ακυρώσατε την αναπαραγωγή", 26 | "A network error caused the media download to fail part-way.": "Ένα σφάλμα δικτύου προκάλεσε την αποτυχία μεταφόρτωσης του αρχείου προς αναπαραγωγή.", 27 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Το αρχείο προς αναπαραγωγή δεν ήταν δυνατό να φορτωθεί είτε γιατί υπήρξε σφάλμα στον διακομιστή ή το δίκτυο, είτε γιατί ο τύπος του αρχείου δεν υποστηρίζεται.", 28 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Η αναπαραγωγή ακυρώθηκε είτε λόγω κατεστραμμένου αρχείου, είτε γιατί το αρχείο απαιτεί λειτουργίες που δεν υποστηρίζονται από το πρόγραμμα περιήγησης που χρησιμοποιείτε.", 29 | "No compatible source was found for this media.": "Δεν βρέθηκε συμβατή πηγή αναπαραγωγής για το συγκεκριμένο αρχείο.", 30 | "The media is encrypted and we do not have the keys to decrypt it.": "Το αρχείο προς αναπαραγωγή είναι κρυπτογραφημένo και δεν υπάρχουν τα απαραίτητα κλειδιά αποκρυπτογράφησης.", 31 | "Play Video": "Αναπαραγωγή βίντεο", 32 | "Close": "Κλείσιμο", 33 | "Modal Window": "Aναδυόμενο παράθυρο", 34 | "This is a modal window": "Το παρών είναι ένα αναδυόμενο παράθυρο", 35 | "This modal can be closed by pressing the Escape key or activating the close button.": "Αυτό το παράθυρο μπορεί να εξαφανιστεί πατώντας το πλήκτρο Escape ή πατώντας το κουμπί κλεισίματος.", 36 | ", opens captions settings dialog": ", εμφανίζει τις ρυθμίσεις για τις λεζάντες", 37 | ", opens subtitles settings dialog": ", εμφανίζει τις ρυθμίσεις για τους υπότιτλους", 38 | ", opens descriptions settings dialog": ", εμφανίζει τις ρυθμίσεις για τις περιγραφές", 39 | ", selected": ", επιλεγμένο" 40 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/en.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("en",{ 2 | "Play": "Play", 3 | "Pause": "Pause", 4 | "Current Time": "Current Time", 5 | "Duration Time": "Duration Time", 6 | "Remaining Time": "Remaining Time", 7 | "Stream Type": "Stream Type", 8 | "LIVE": "LIVE", 9 | "Loaded": "Loaded", 10 | "Progress": "Progress", 11 | "Fullscreen": "Fullscreen", 12 | "Non-Fullscreen": "Non-Fullscreen", 13 | "Mute": "Mute", 14 | "Unmute": "Unmute", 15 | "Playback Rate": "Playback Rate", 16 | "Subtitles": "Subtitles", 17 | "subtitles off": "subtitles off", 18 | "Captions": "Captions", 19 | "captions off": "captions off", 20 | "Chapters": "Chapters", 21 | "Close Modal Dialog": "Close Modal Dialog", 22 | "Descriptions": "Descriptions", 23 | "descriptions off": "descriptions off", 24 | "Audio Track": "Audio Track", 25 | "You aborted the media playback": "You aborted the media playback", 26 | "A network error caused the media download to fail part-way.": "A network error caused the media download to fail part-way.", 27 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "The media could not be loaded, either because the server or network failed or because the format is not supported.", 28 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.", 29 | "No compatible source was found for this media.": "No compatible source was found for this media.", 30 | "The media is encrypted and we do not have the keys to decrypt it.": "The media is encrypted and we do not have the keys to decrypt it.", 31 | "Play Video": "Play Video", 32 | "Close": "Close", 33 | "Modal Window": "Modal Window", 34 | "This is a modal window": "This is a modal window", 35 | "This modal can be closed by pressing the Escape key or activating the close button.": "This modal can be closed by pressing the Escape key or activating the close button.", 36 | ", opens captions settings dialog": ", opens captions settings dialog", 37 | ", opens subtitles settings dialog": ", opens subtitles settings dialog", 38 | ", opens descriptions settings dialog": ", opens descriptions settings dialog", 39 | ", selected": ", selected" 40 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/es.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("es",{ 2 | "Play": "Reproducción", 3 | "Pause": "Pausa", 4 | "Current Time": "Tiempo reproducido", 5 | "Duration Time": "Duración total", 6 | "Remaining Time": "Tiempo restante", 7 | "Stream Type": "Tipo de secuencia", 8 | "LIVE": "DIRECTO", 9 | "Loaded": "Cargado", 10 | "Progress": "Progreso", 11 | "Fullscreen": "Pantalla completa", 12 | "Non-Fullscreen": "Pantalla no completa", 13 | "Mute": "Silenciar", 14 | "Unmute": "No silenciado", 15 | "Playback Rate": "Velocidad de reproducción", 16 | "Subtitles": "Subtítulos", 17 | "subtitles off": "Subtítulos desactivados", 18 | "Captions": "Subtítulos especiales", 19 | "captions off": "Subtítulos especiales desactivados", 20 | "Chapters": "Capítulos", 21 | "You aborted the media playback": "Ha interrumpido la reproducción del vídeo.", 22 | "A network error caused the media download to fail part-way.": "Un error de red ha interrumpido la descarga del vídeo.", 23 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "No se ha podido cargar el vídeo debido a un fallo de red o del servidor o porque el formato es incompatible.", 24 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "La reproducción de vídeo se ha interrumpido por un problema de corrupción de datos o porque el vídeo precisa funciones que su navegador no ofrece.", 25 | "No compatible source was found for this media.": "No se ha encontrado ninguna fuente compatible con este vídeo." 26 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/fa.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("fa",{ 2 | "Play": "پخش", 3 | "Pause": "وقفه", 4 | "Current Time": "زمان کنونی", 5 | "Duration Time": "مدت زمان", 6 | "Remaining Time": "زمان باقیمانده", 7 | "Stream Type": "نوع استریم", 8 | "LIVE": "زنده", 9 | "Loaded": "فراخوانی شده", 10 | "Progress": "پیشرفت", 11 | "Fullscreen": "تمام صفحه", 12 | "Non-Fullscreen": "نمایش عادی", 13 | "Mute": "بی صدا", 14 | "Unmute": "بهمراه صدا", 15 | "Playback Rate": "سرعت پخش", 16 | "Subtitles": "زیرنویس", 17 | "subtitles off": "بدون زیرنویس", 18 | "Captions": "عنوان", 19 | "captions off": "بدون عنوان", 20 | "Chapters": "فصل", 21 | "You aborted the media playback": "شما پخش را متوقف کردید.", 22 | "A network error caused the media download to fail part-way.": "مشکل در دریافت ویدئو ...", 23 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "فرمت پشتیبانی نمیشود یا خطایی روی داده است.", 24 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "مشکل در دریافت ویدئو ...", 25 | "No compatible source was found for this media.": "هیچ ورودی ای برای این رسانه شناسایی نشد." 26 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/fi.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("fi",{ 2 | "Play": "Toisto", 3 | "Pause": "Tauko", 4 | "Current Time": "Tämänhetkinen aika", 5 | "Duration Time": "Kokonaisaika", 6 | "Remaining Time": "Jäljellä oleva aika", 7 | "Stream Type": "Lähetystyyppi", 8 | "LIVE": "LIVE", 9 | "Loaded": "Ladattu", 10 | "Progress": "Edistyminen", 11 | "Fullscreen": "Koko näyttö", 12 | "Non-Fullscreen": "Koko näyttö pois", 13 | "Mute": "Ääni pois", 14 | "Unmute": "Ääni päällä", 15 | "Playback Rate": "Toistonopeus", 16 | "Subtitles": "Tekstitys", 17 | "subtitles off": "Tekstitys pois", 18 | "Captions": "Tekstitys", 19 | "captions off": "Tekstitys pois", 20 | "Chapters": "Kappaleet", 21 | "You aborted the media playback": "Olet keskeyttänyt videotoiston.", 22 | "A network error caused the media download to fail part-way.": "Verkkovirhe keskeytti videon latauksen.", 23 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Videon lataus ei onnistunut joko palvelin- tai verkkovirheestä tai väärästä formaatista johtuen.", 24 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Videon toisto keskeytyi, koska media on vaurioitunut tai käyttää käyttää toimintoja, joita selaimesi ei tue.", 25 | "No compatible source was found for this media.": "Tälle videolle ei löytynyt yhteensopivaa lähdettä." 26 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/fr.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("fr",{ 2 | "Play": "Lecture", 3 | "Pause": "Pause", 4 | "Current Time": "Temps actuel", 5 | "Duration Time": "Durée", 6 | "Remaining Time": "Temps restant", 7 | "Stream Type": "Type de flux", 8 | "LIVE": "EN DIRECT", 9 | "Loaded": "Chargé", 10 | "Progress": "Progression", 11 | "Fullscreen": "Plein écran", 12 | "Non-Fullscreen": "Fenêtré", 13 | "Mute": "Sourdine", 14 | "Unmute": "Son activé", 15 | "Playback Rate": "Vitesse de lecture", 16 | "Subtitles": "Sous-titres", 17 | "subtitles off": "Sous-titres désactivés", 18 | "Captions": "Sous-titres transcrits", 19 | "captions off": "Sous-titres transcrits désactivés", 20 | "Chapters": "Chapitres", 21 | "Close Modal Dialog": "Fermer la boîte de dialogue modale", 22 | "Descriptions": "Descriptions", 23 | "descriptions off": "descriptions désactivées", 24 | "Audio Track": "Piste audio", 25 | "You aborted the media playback": "Vous avez interrompu la lecture de la vidéo.", 26 | "A network error caused the media download to fail part-way.": "Une erreur de réseau a interrompu le téléchargement de la vidéo.", 27 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Cette vidéo n'a pas pu être chargée, soit parce que le serveur ou le réseau a échoué ou parce que le format n'est pas reconnu.", 28 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "La lecture de la vidéo a été interrompue à cause d'un problème de corruption ou parce que la vidéo utilise des fonctionnalités non prises en charge par votre navigateur.", 29 | "No compatible source was found for this media.": "Aucune source compatible n'a été trouvée pour cette vidéo.", 30 | "The media is encrypted and we do not have the keys to decrypt it.": "Le média est chiffré et nous n'avons pas les clés pour le déchiffrer.", 31 | "Play Video": "Lire la vidéo", 32 | "Close": "Fermer", 33 | "Modal Window": "Fenêtre modale", 34 | "This is a modal window": "Ceci est une fenêtre modale", 35 | "This modal can be closed by pressing the Escape key or activating the close button.": "Ce modal peut être fermé en appuyant sur la touche Échap ou activer le bouton de fermeture.", 36 | ", opens captions settings dialog": ", ouvrir les paramètres des sous-titres transcrits", 37 | ", opens subtitles settings dialog": ", ouvrir les paramètres des sous-titres", 38 | ", opens descriptions settings dialog": ", ouvrir les paramètres des descriptions", 39 | ", selected": ", sélectionné" 40 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/hr.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("hr",{ 2 | "Play": "Pusti", 3 | "Pause": "Pauza", 4 | "Current Time": "Trenutno vrijeme", 5 | "Duration Time": "Vrijeme trajanja", 6 | "Remaining Time": "Preostalo vrijeme", 7 | "Stream Type": "Način strimovanja", 8 | "LIVE": "UŽIVO", 9 | "Loaded": "Učitan", 10 | "Progress": "Progres", 11 | "Fullscreen": "Puni ekran", 12 | "Non-Fullscreen": "Mali ekran", 13 | "Mute": "Prigušen", 14 | "Unmute": "Ne-prigušen", 15 | "Playback Rate": "Stopa reprodukcije", 16 | "Subtitles": "Podnaslov", 17 | "subtitles off": "Podnaslov deaktiviran", 18 | "Captions": "Titlovi", 19 | "captions off": "Titlovi deaktivirani", 20 | "Chapters": "Poglavlja", 21 | "You aborted the media playback": "Isključili ste reprodukciju videa.", 22 | "A network error caused the media download to fail part-way.": "Video se prestao preuzimati zbog greške na mreži.", 23 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Video se ne može reproducirati zbog servera, greške u mreži ili je format ne podržan.", 24 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Reprodukcija videa je zaustavljenja zbog greške u formatu ili zbog verzije vašeg pretraživača.", 25 | "No compatible source was found for this media.": "Nije nađen nijedan kompatibilan izvor ovog videa." 26 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/hu.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("hu",{ 2 | "Play": "Lejátszás", 3 | "Pause": "Szünet", 4 | "Current Time": "Aktuális időpont", 5 | "Duration Time": "Hossz", 6 | "Remaining Time": "Hátralévő idő", 7 | "Stream Type": "Adatfolyam típusa", 8 | "LIVE": "ÉLŐ", 9 | "Loaded": "Betöltve", 10 | "Progress": "Állapot", 11 | "Fullscreen": "Teljes képernyő", 12 | "Non-Fullscreen": "Normál méret", 13 | "Mute": "Némítás", 14 | "Unmute": "Némítás kikapcsolva", 15 | "Playback Rate": "Lejátszási sebesség", 16 | "Subtitles": "Feliratok", 17 | "subtitles off": "Feliratok kikapcsolva", 18 | "Captions": "Magyarázó szöveg", 19 | "captions off": "Magyarázó szöveg kikapcsolva", 20 | "Chapters": "Fejezetek", 21 | "You aborted the media playback": "Leállította a lejátszást", 22 | "A network error caused the media download to fail part-way.": "Hálózati hiba miatt a videó részlegesen töltődött le.", 23 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "A videó nem tölthető be hálózati vagy kiszolgálói hiba miatt, vagy a formátuma nem támogatott.", 24 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "A lejátszás adatsérülés miatt leállt, vagy a videó egyes tulajdonságait a böngészője nem támogatja.", 25 | "No compatible source was found for this media.": "Nincs kompatibilis forrás ehhez a videóhoz." 26 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/it.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("it",{ 2 | "Play": "Play", 3 | "Pause": "Pausa", 4 | "Current Time": "Orario attuale", 5 | "Duration Time": "Durata", 6 | "Remaining Time": "Tempo rimanente", 7 | "Stream Type": "Tipo del Streaming", 8 | "LIVE": "LIVE", 9 | "Loaded": "Caricato", 10 | "Progress": "Stato", 11 | "Fullscreen": "Schermo intero", 12 | "Non-Fullscreen": "Chiudi schermo intero", 13 | "Mute": "Muto", 14 | "Unmute": "Audio", 15 | "Playback Rate": "Tasso di riproduzione", 16 | "Subtitles": "Sottotitoli", 17 | "subtitles off": "Senza sottotitoli", 18 | "Captions": "Sottotitoli non udenti", 19 | "captions off": "Senza sottotitoli non udenti", 20 | "Chapters": "Capitolo", 21 | "You aborted the media playback": "La riproduzione del filmato è stata interrotta.", 22 | "A network error caused the media download to fail part-way.": "Il download del filmato è stato interrotto a causa di un problema rete.", 23 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Il filmato non può essere caricato a causa di un errore nel server o nella rete o perché il formato non viene supportato.", 24 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "La riproduzione del filmato è stata interrotta a causa di un file danneggiato o per l’utilizzo di impostazioni non supportate dal browser.", 25 | "No compatible source was found for this media.": "Non ci sono fonti compatibili per questo filmato." 26 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/ja.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("ja",{ 2 | "Play": "再生", 3 | "Pause": "一時停止", 4 | "Current Time": "現在の時間", 5 | "Duration Time": "長さ", 6 | "Remaining Time": "残りの時間", 7 | "Stream Type": "ストリームの種類", 8 | "LIVE": "ライブ", 9 | "Loaded": "ロード済み", 10 | "Progress": "進行状況", 11 | "Fullscreen": "フルスクリーン", 12 | "Non-Fullscreen": "フルスクリーン以外", 13 | "Mute": "ミュート", 14 | "Unmute": "ミュート解除", 15 | "Playback Rate": "再生レート", 16 | "Subtitles": "サブタイトル", 17 | "subtitles off": "サブタイトル オフ", 18 | "Captions": "キャプション", 19 | "captions off": "キャプション オフ", 20 | "Chapters": "チャプター", 21 | "You aborted the media playback": "動画再生を中止しました", 22 | "A network error caused the media download to fail part-way.": "ネットワーク エラーにより動画のダウンロードが途中で失敗しました", 23 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "サーバーまたはネットワークのエラー、またはフォーマットがサポートされていないため、動画をロードできませんでした", 24 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "破損の問題、またはお使いのブラウザがサポートしていない機能が動画に使用されていたため、動画の再生が中止されました", 25 | "No compatible source was found for this media.": "この動画に対して互換性のあるソースが見つかりませんでした" 26 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/ko.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("ko",{ 2 | "Play": "재생", 3 | "Pause": "일시중지", 4 | "Current Time": "현재 시간", 5 | "Duration Time": "지정 기간", 6 | "Remaining Time": "남은 시간", 7 | "Stream Type": "스트리밍 유형", 8 | "LIVE": "라이브", 9 | "Loaded": "로드됨", 10 | "Progress": "진행", 11 | "Fullscreen": "전체 화면", 12 | "Non-Fullscreen": "전체 화면 해제", 13 | "Mute": "음소거", 14 | "Unmute": "음소거 해제", 15 | "Playback Rate": "재생 비율", 16 | "Subtitles": "서브타이틀", 17 | "subtitles off": "서브타이틀 끄기", 18 | "Captions": "자막", 19 | "captions off": "자막 끄기", 20 | "Chapters": "챕터", 21 | "You aborted the media playback": "비디오 재생을 취소했습니다.", 22 | "A network error caused the media download to fail part-way.": "네트워크 오류로 인하여 비디오 일부를 다운로드하지 못 했습니다.", 23 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "비디오를 로드할 수 없습니다. 서버 혹은 네트워크 오류 때문이거나 지원되지 않는 형식 때문일 수 있습니다.", 24 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "비디오 재생이 취소됐습니다. 비디오가 손상되었거나 비디오가 사용하는 기능을 브라우저에서 지원하지 않는 것 같습니다.", 25 | "No compatible source was found for this media.": "비디오에 호환되지 않는 소스가 있습니다." 26 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/nb.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("nb",{ 2 | "Play": "Spill", 3 | "Pause": "Pause", 4 | "Current Time": "Aktuell tid", 5 | "Duration Time": "Varighet", 6 | "Remaining Time": "Gjenstående tid", 7 | "Stream Type": "Type strøm", 8 | "LIVE": "DIREKTE", 9 | "Loaded": "Lastet inn", 10 | "Progress": "Status", 11 | "Fullscreen": "Fullskjerm", 12 | "Non-Fullscreen": "Lukk fullskjerm", 13 | "Mute": "Lyd av", 14 | "Unmute": "Lyd på", 15 | "Playback Rate": "Avspillingsrate", 16 | "Subtitles": "Undertekst på", 17 | "subtitles off": "Undertekst av", 18 | "Captions": "Undertekst for hørselshemmede på", 19 | "captions off": "Undertekst for hørselshemmede av", 20 | "Chapters": "Kapitler", 21 | "You aborted the media playback": "Du avbrøt avspillingen.", 22 | "A network error caused the media download to fail part-way.": "En nettverksfeil avbrøt nedlasting av videoen.", 23 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Videoen kunne ikke lastes ned, på grunn av nettverksfeil eller serverfeil, eller fordi formatet ikke er støttet.", 24 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Videoavspillingen ble avbrudt på grunn av ødelagte data eller fordi videoen ville gjøre noe som nettleseren din ikke har støtte for.", 25 | "No compatible source was found for this media.": "Fant ikke en kompatibel kilde for dette mediainnholdet." 26 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/nl.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("nl",{ 2 | "Play": "Afspelen", 3 | "Pause": "Pauze", 4 | "Current Time": "Huidige tijd", 5 | "Duration Time": "Looptijd", 6 | "Remaining Time": "Resterende tijd", 7 | "Stream Type": "Streamtype", 8 | "LIVE": "LIVE", 9 | "Loaded": "Geladen", 10 | "Progress": "Status", 11 | "Fullscreen": "Volledig scherm", 12 | "Non-Fullscreen": "Geen volledig scherm", 13 | "Mute": "Geluid uit", 14 | "Unmute": "Geluid aan", 15 | "Playback Rate": "Weergavesnelheid", 16 | "Subtitles": "Ondertiteling", 17 | "subtitles off": "ondertiteling uit", 18 | "Captions": "Bijschriften", 19 | "captions off": "bijschriften uit", 20 | "Chapters": "Hoofdstukken", 21 | "Descriptions": "Beschrijvingen", 22 | "descriptions off": "beschrijvingen off", 23 | "You aborted the media playback": "U hebt de mediaweergave afgebroken.", 24 | "A network error caused the media download to fail part-way.": "De mediadownload is mislukt door een netwerkfout.", 25 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "De media kon niet worden geladen, vanwege een server- of netwerkfout of doordat het formaat niet wordt ondersteund.", 26 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "De mediaweergave is afgebroken vanwege beschadigde data of het mediabestand gebruikt functies die niet door uw browser worden ondersteund.", 27 | "No compatible source was found for this media.": "Voor deze media is geen ondersteunde bron gevonden.", 28 | "Play Video": "Video Afspelen", 29 | "Close": "Sluiten", 30 | "Modal Window": "Modal Venster", 31 | "This is a modal window": "Dit is een modaal venster", 32 | "This modal can be closed by pressing the Escape key or activating the close button.": "Dit modaal venster kan gesloten worden door op Escape te drukken of de 'sluiten' knop te activeren.", 33 | ", opens captions settings dialog": ", opent bijschriften instellingen venster", 34 | ", opens subtitles settings dialog": ", opent ondertiteling instellingen venster", 35 | ", opens descriptions settings dialog": ", opent beschrijvingen instellingen venster", 36 | ", selected": ", selected" 37 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/nn.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("nn",{ 2 | "Play": "Spel", 3 | "Pause": "Pause", 4 | "Current Time": "Aktuell tid", 5 | "Duration Time": "Varigheit", 6 | "Remaining Time": "Tid attende", 7 | "Stream Type": "Type straum", 8 | "LIVE": "DIREKTE", 9 | "Loaded": "Lasta inn", 10 | "Progress": "Status", 11 | "Fullscreen": "Fullskjerm", 12 | "Non-Fullscreen": "Stenga fullskjerm", 13 | "Mute": "Ljod av", 14 | "Unmute": "Ljod på", 15 | "Playback Rate": "Avspelingsrate", 16 | "Subtitles": "Teksting på", 17 | "subtitles off": "Teksting av", 18 | "Captions": "Teksting for høyrselshemma på", 19 | "captions off": "Teksting for høyrselshemma av", 20 | "Chapters": "Kapitel", 21 | "You aborted the media playback": "Du avbraut avspelinga.", 22 | "A network error caused the media download to fail part-way.": "Ein nettverksfeil avbraut nedlasting av videoen.", 23 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Videoen kunne ikkje lastas ned, på grunn av ein nettverksfeil eller serverfeil, eller av di formatet ikkje er stoda.", 24 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Videoavspelinga blei broten på grunn av øydelagde data eller av di videoen ville gjera noe som nettlesaren din ikkje stodar.", 25 | "No compatible source was found for this media.": "Fant ikke en kompatibel kilde for dette mediainnholdet." 26 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/pl.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("pl",{ 2 | "Play": "Odtwarzaj", 3 | "Pause": "Pauza", 4 | "Current Time": "Aktualny czas", 5 | "Duration Time": "Czas trwania", 6 | "Remaining Time": "Pozostały czas", 7 | "Stream Type": "Typ strumienia", 8 | "LIVE": "NA ŻYWO", 9 | "Loaded": "Załadowany", 10 | "Progress": "Status", 11 | "Fullscreen": "Pełny ekran", 12 | "Non-Fullscreen": "Pełny ekran niedostępny", 13 | "Mute": "Wyłącz dźwięk", 14 | "Unmute": "Włącz dźwięk", 15 | "Playback Rate": "Szybkość odtwarzania", 16 | "Subtitles": "Napisy", 17 | "subtitles off": "Napisy wyłączone", 18 | "Captions": "Transkrypcja", 19 | "captions off": "Transkrypcja wyłączona", 20 | "Chapters": "Rozdziały", 21 | "You aborted the media playback": "Odtwarzanie zostało przerwane", 22 | "A network error caused the media download to fail part-way.": "Problemy z siecią spowodowały błąd przy pobieraniu materiału wideo.", 23 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Materiał wideo nie może być załadowany, ponieważ wystąpił problem z siecią lub format nie jest obsługiwany", 24 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Odtwarzanie materiału wideo zostało przerwane z powodu uszkodzonego pliku wideo lub z powodu błędu funkcji, które nie są wspierane przez przeglądarkę.", 25 | "No compatible source was found for this media.": "Dla tego materiału wideo nie znaleziono kompatybilnego źródła.", 26 | "Play video": "Odtwarzaj wideo", 27 | "Close": "Zamknij", 28 | "Modal Window": "Okno Modala", 29 | "This is a modal window": "To jest okno modala", 30 | "This modal can be closed by pressing the Escape key or activating the close button.": "Ten modal możesz zamknąć naciskając przycisk Escape albo wybierając przycisk Zamknij.", 31 | ", opens captions settings dialog": ", otwiera okno dialogowe ustawień transkrypcji", 32 | ", opens subtitles settings dialog": ", otwiera okno dialogowe napisów", 33 | ", selected": ", zaznaczone" 34 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/pt-BR.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("pt-BR",{ 2 | "Play": "Tocar", 3 | "Pause": "Pausar", 4 | "Current Time": "Tempo", 5 | "Duration Time": "Duração", 6 | "Remaining Time": "Tempo Restante", 7 | "Stream Type": "Tipo de Stream", 8 | "LIVE": "AO VIVO", 9 | "Loaded": "Carregado", 10 | "Progress": "Progresso", 11 | "Fullscreen": "Tela Cheia", 12 | "Non-Fullscreen": "Tela Normal", 13 | "Mute": "Mudo", 14 | "Unmute": "Habilitar Som", 15 | "Playback Rate": "Velocidade", 16 | "Subtitles": "Legendas", 17 | "subtitles off": "Sem Legendas", 18 | "Captions": "Anotações", 19 | "captions off": "Sem Anotações", 20 | "Chapters": "Capítulos", 21 | "You aborted the media playback": "Você parou a execução do vídeo.", 22 | "A network error caused the media download to fail part-way.": "Um erro na rede fez o vídeo parar parcialmente.", 23 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "O vídeo não pode ser carregado, ou porque houve um problema com sua rede ou pelo formato do vídeo não ser suportado.", 24 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "A execução foi interrompida por um problema com o vídeo ou por seu navegador não dar suporte ao seu formato.", 25 | "No compatible source was found for this media.": "Não foi encontrada fonte de vídeo compatível." 26 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/ru.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("ru",{ 2 | "Play": "Воспроизвести", 3 | "Pause": "Приостановить", 4 | "Current Time": "Текущее время", 5 | "Duration Time": "Продолжительность", 6 | "Remaining Time": "Оставшееся время", 7 | "Stream Type": "Тип потока", 8 | "LIVE": "ОНЛАЙН", 9 | "Loaded": "Загрузка", 10 | "Progress": "Прогресс", 11 | "Fullscreen": "Полноэкранный режим", 12 | "Non-Fullscreen": "Неполноэкранный режим", 13 | "Mute": "Без звука", 14 | "Unmute": "Со звуком", 15 | "Playback Rate": "Скорость воспроизведения", 16 | "Subtitles": "Субтитры", 17 | "subtitles off": "Субтитры выкл.", 18 | "Captions": "Подписи", 19 | "captions off": "Подписи выкл.", 20 | "Chapters": "Главы", 21 | "Close Modal Dialog": "Закрыть модальное окно", 22 | "Descriptions": "Описания", 23 | "descriptions off": "описания выкл.", 24 | "Audio Track": "Звуковая дорожка", 25 | "You aborted the media playback": "Вы прервали воспроизведение видео", 26 | "A network error caused the media download to fail part-way.": "Ошибка сети вызвала сбой во время загрузки видео.", 27 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Невозможно загрузить видео из-за сетевого или серверного сбоя либо формат не поддерживается.", 28 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Воспроизведение видео было приостановлено из-за повреждения либо в связи с тем, что видео использует функции, неподдерживаемые вашим браузером.", 29 | "No compatible source was found for this media.": "Совместимые источники для этого видео отсутствуют.", 30 | "The media is encrypted and we do not have the keys to decrypt it.": "Видео в зашифрованном виде, и у нас нет ключей для расшифровки.", 31 | "Play Video": "Воспроизвести видео", 32 | "Close": "Закрыть", 33 | "Modal Window": "Модальное окно", 34 | "This is a modal window": "Это модальное окно.", 35 | "This modal can be closed by pressing the Escape key or activating the close button.": "Модальное окно можно закрыть нажав Esc или кнопку закрытия окна.", 36 | ", opens captions settings dialog": ", откроется диалог настройки подписей", 37 | ", opens subtitles settings dialog": ", откроется диалог настройки субтитров", 38 | ", opens descriptions settings dialog": ", откроется диалог настройки описаний", 39 | ", selected": ", выбрано" 40 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/sr.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("sr",{ 2 | "Play": "Pusti", 3 | "Pause": "Pauza", 4 | "Current Time": "Trenutno vrijeme", 5 | "Duration Time": "Vrijeme trajanja", 6 | "Remaining Time": "Preostalo vrijeme", 7 | "Stream Type": "Način strimovanja", 8 | "LIVE": "UŽIVO", 9 | "Loaded": "Učitan", 10 | "Progress": "Progres", 11 | "Fullscreen": "Puni ekran", 12 | "Non-Fullscreen": "Mali ekran", 13 | "Mute": "Prigušen", 14 | "Unmute": "Ne-prigušen", 15 | "Playback Rate": "Stopa reprodukcije", 16 | "Subtitles": "Podnaslov", 17 | "subtitles off": "Podnaslov deaktiviran", 18 | "Captions": "Titlovi", 19 | "captions off": "Titlovi deaktivirani", 20 | "Chapters": "Poglavlja", 21 | "You aborted the media playback": "Isključili ste reprodukciju videa.", 22 | "A network error caused the media download to fail part-way.": "Video se prestao preuzimati zbog greške na mreži.", 23 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Video se ne može reproducirati zbog servera, greške u mreži ili je format ne podržan.", 24 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Reprodukcija videa je zaustavljenja zbog greške u formatu ili zbog verzije vašeg pretraživača.", 25 | "No compatible source was found for this media.": "Nije nađen nijedan kompatibilan izvor ovog videa." 26 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/sv.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("sv",{ 2 | "Play": "Spela", 3 | "Pause": "Pausa", 4 | "Current Time": "Aktuell tid", 5 | "Duration Time": "Total tid", 6 | "Remaining Time": "Återstående tid", 7 | "Stream Type": "Strömningstyp", 8 | "LIVE": "LIVE", 9 | "Loaded": "Laddad", 10 | "Progress": "Förlopp", 11 | "Fullscreen": "Fullskärm", 12 | "Non-Fullscreen": "Ej fullskärm", 13 | "Mute": "Ljud av", 14 | "Unmute": "Ljud på", 15 | "Playback Rate": "Uppspelningshastighet", 16 | "Subtitles": "Text på", 17 | "subtitles off": "Text av", 18 | "Captions": "Text på", 19 | "captions off": "Text av", 20 | "Chapters": "Kapitel", 21 | "You aborted the media playback": "Du har avbrutit videouppspelningen.", 22 | "A network error caused the media download to fail part-way.": "Ett nätverksfel gjorde att nedladdningen av videon avbröts.", 23 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Det gick inte att ladda videon, antingen på grund av ett server- eller nätverksfel, eller för att formatet inte stöds.", 24 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Uppspelningen avbröts på grund av att videon är skadad, eller också för att videon använder funktioner som din webbläsare inte stöder.", 25 | "No compatible source was found for this media.": "Det gick inte att hitta någon kompatibel källa för den här videon." 26 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/tr.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("tr",{ 2 | "Play": "Oynat", 3 | "Pause": "Duraklat", 4 | "Current Time": "Süre", 5 | "Duration Time": "Toplam Süre", 6 | "Remaining Time": "Kalan Süre", 7 | "Stream Type": "Yayın Tipi", 8 | "LIVE": "CANLI", 9 | "Loaded": "Yüklendi", 10 | "Progress": "Yükleniyor", 11 | "Fullscreen": "Tam Ekran", 12 | "Non-Fullscreen": "Küçük Ekran", 13 | "Mute": "Ses Kapa", 14 | "Unmute": "Ses Aç", 15 | "Playback Rate": "Oynatma Hızı", 16 | "Subtitles": "Altyazı", 17 | "subtitles off": "Altyazı Kapalı", 18 | "Captions": "Ek Açıklamalar", 19 | "captions off": "Ek Açıklamalar Kapalı", 20 | "Chapters": "Bölümler", 21 | "You aborted the media playback": "Video oynatmayı iptal ettiniz", 22 | "A network error caused the media download to fail part-way.": "Video indirilirken bağlantı sorunu oluştu.", 23 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Video oynatılamadı, ağ ya da sunucu hatası veya belirtilen format desteklenmiyor.", 24 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Tarayıcınız desteklemediği için videoda hata oluştu.", 25 | "No compatible source was found for this media.": "Video için kaynak bulunamadı.", 26 | "Play Video": "Videoyu Oynat", 27 | "Close": "Kapat", 28 | "Modal Window": "Modal Penceresi", 29 | "This is a modal window": "Bu bir modal penceresidir", 30 | "This modal can be closed by pressing the Escape key or activating the close button.": "Bu modal ESC tuşuna basarak ya da kapata tıklanarak kapatılabilir.", 31 | ", opens captions settings dialog": ", ek açıklama ayarları menüsünü açar", 32 | ", opens subtitles settings dialog": ", altyazı ayarları menüsünü açar", 33 | ", selected": ", seçildi" 34 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/uk.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("uk",{ 2 | "Play": "Відтворити", 3 | "Pause": "Призупинити", 4 | "Current Time": "Поточний час", 5 | "Duration Time": "Тривалість", 6 | "Remaining Time": "Час, що залишився", 7 | "Stream Type": "Тип потоку", 8 | "LIVE": "НАЖИВО", 9 | "Loaded": "Завантаження", 10 | "Progress": "Прогрес", 11 | "Fullscreen": "Повноекранний режим", 12 | "Non-Fullscreen": "Неповноекранний режим", 13 | "Mute": "Без звуку", 14 | "Unmute": "Зі звуком", 15 | "Playback Rate": "Швидкість відтворення", 16 | "Subtitles": "Субтитри", 17 | "subtitles off": "Без субтитрів", 18 | "Captions": "Підписи", 19 | "captions off": "Без підписів", 20 | "Chapters": "Розділи", 21 | "Close Modal Dialog": "Закрити модальний діалог", 22 | "Descriptions": "Описи", 23 | "descriptions off": "Без описів", 24 | "Audio Track": "Аудіодоріжка", 25 | "You aborted the media playback": "Ви припинили відтворення відео", 26 | "A network error caused the media download to fail part-way.": "Помилка мережі викликала збій під час завантаження відео.", 27 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Неможливо завантажити відео через мережевий чи серверний збій або формат не підтримується.", 28 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Відтворення відео було припинено через пошкодження або у зв'язку з тим, що відео використовує функції, які не підтримуються вашим браузером.", 29 | "No compatible source was found for this media.": "Сумісні джерела для цього відео відсутні.", 30 | "The media is encrypted and we do not have the keys to decrypt it.": "Відео в зашифрованому вигляді, і ми не маємо ключі для розшифровки.", 31 | "Play Video": "Відтворити відео", 32 | "Close": "Закрити", 33 | "Modal Window": "Модальне вікно", 34 | "This is a modal window": "Це модальне вікно.", 35 | "This modal can be closed by pressing the Escape key or activating the close button.": "Модальне вікно можна закрити, натиснувши клавішу Esc або кнопку закриття вікна.", 36 | ", opens captions settings dialog": ", відкриється діалогове вікно налаштування підписів", 37 | ", opens subtitles settings dialog": ", відкриється діалогове вікно налаштування субтитрів", 38 | ", opens descriptions settings dialog": ", відкриється діалогове вікно налаштування описів", 39 | ", selected": ", обраний" 40 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/vi.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("vi",{ 2 | "Play": "Phát", 3 | "Pause": "Tạm dừng", 4 | "Current Time": "Thời gian hiện tại", 5 | "Duration Time": "Độ dài", 6 | "Remaining Time": "Thời gian còn lại", 7 | "Stream Type": "Kiểu Stream", 8 | "LIVE": "TRỰC TIẾP", 9 | "Loaded": "Đã tải", 10 | "Progress": "Tiến trình", 11 | "Fullscreen": "Toàn màn hình", 12 | "Non-Fullscreen": "Thoát toàn màn hình", 13 | "Mute": "Tắt tiếng", 14 | "Unmute": "Bật âm thanh", 15 | "Playback Rate": "Tốc độ phát", 16 | "Subtitles": "Phụ đề", 17 | "subtitles off": "Tắt phụ đề", 18 | "Captions": "Chú thích", 19 | "captions off": "Tắt chú thích", 20 | "Chapters": "Chương", 21 | "You aborted the media playback": "Bạn đã hủy việc phát media.", 22 | "A network error caused the media download to fail part-way.": "Một lỗi mạng dẫn đến việc tải media bị lỗi.", 23 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "Video không tải được, mạng hay server có lỗi hoặc định dạng không được hỗ trợ.", 24 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "Phát media đã bị hủy do một sai lỗi hoặc media sử dụng những tính năng trình duyệt không hỗ trợ.", 25 | "No compatible source was found for this media.": "Không có nguồn tương thích cho media này." 26 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/zh-CN.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("zh-CN",{ 2 | "Play": "播放", 3 | "Pause": "暂停", 4 | "Current Time": "当前时间", 5 | "Duration Time": "时长", 6 | "Remaining Time": "剩余时间", 7 | "Stream Type": "媒体流类型", 8 | "LIVE": "直播", 9 | "Loaded": "加载完毕", 10 | "Progress": "进度", 11 | "Fullscreen": "全屏", 12 | "Non-Fullscreen": "退出全屏", 13 | "Mute": "静音", 14 | "Unmute": "取消静音", 15 | "Playback Rate": "播放码率", 16 | "Subtitles": "字幕", 17 | "subtitles off": "字幕关闭", 18 | "Captions": "内嵌字幕", 19 | "captions off": "内嵌字幕关闭", 20 | "Chapters": "节目段落", 21 | "You aborted the media playback": "视频播放被终止", 22 | "A network error caused the media download to fail part-way.": "网络错误导致视频下载中途失败。", 23 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "视频因格式不支持或者服务器或网络的问题无法加载。", 24 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "由于视频文件损坏或是该视频使用了你的浏览器不支持的功能,播放终止。", 25 | "No compatible source was found for this media.": "无法找到此视频兼容的源。", 26 | "The media is encrypted and we do not have the keys to decrypt it.": "视频已加密,无法解密。" 27 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/lang/zh-TW.js: -------------------------------------------------------------------------------- 1 | videojs.addLanguage("zh-TW",{ 2 | "Play": "播放", 3 | "Pause": "暫停", 4 | "Current Time": "目前時間", 5 | "Duration Time": "總共時間", 6 | "Remaining Time": "剩餘時間", 7 | "Stream Type": "串流類型", 8 | "LIVE": "直播", 9 | "Loaded": "載入完畢", 10 | "Progress": "進度", 11 | "Fullscreen": "全螢幕", 12 | "Non-Fullscreen": "退出全螢幕", 13 | "Mute": "靜音", 14 | "Unmute": "取消靜音", 15 | "Playback Rate": " 播放速率", 16 | "Subtitles": "字幕", 17 | "subtitles off": "關閉字幕", 18 | "Captions": "內嵌字幕", 19 | "captions off": "關閉內嵌字幕", 20 | "Chapters": "章節", 21 | "Close Modal Dialog": "關閉對話框", 22 | "Descriptions": "描述", 23 | "descriptions off": "關閉描述", 24 | "Audio Track": "音軌", 25 | "You aborted the media playback": "影片播放已終止", 26 | "A network error caused the media download to fail part-way.": "網路錯誤導致影片下載失敗。", 27 | "The media could not be loaded, either because the server or network failed or because the format is not supported.": "影片因格式不支援或者伺服器或網路的問題無法載入。", 28 | "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "由於影片檔案損毀或是該影片使用了您的瀏覽器不支援的功能,播放終止。", 29 | "No compatible source was found for this media.": "無法找到相容此影片的來源。", 30 | "The media is encrypted and we do not have the keys to decrypt it.": "影片已加密,無法解密。", 31 | "Play Video": "播放影片", 32 | "Close": "關閉", 33 | "Modal Window": "對話框", 34 | "This is a modal window": "這是一個對話框", 35 | "This modal can be closed by pressing the Escape key or activating the close button.": "可以按ESC按鍵或啟用關閉按鈕來關閉此對話框。", 36 | ", opens captions settings dialog": ", 開啟標題設定對話框", 37 | ", opens subtitles settings dialog": ", 開啟字幕設定對話框", 38 | ", opens descriptions settings dialog": ", 開啟描述設定對話框", 39 | ", selected": ", 選擇" 40 | }); -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/video-js.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/front-resources/videojs-5.20.5/video-js.swf -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/index.jsp: -------------------------------------------------------------------------------- 1 | 2 | 3 |

    Hello World!

    4 | 5 | 6 | -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/pic/null_room.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/pic/null_room.jpg -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/pic/null_user.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nnkwrik/KiwiTheater/dbbf0610f760a0f61eb57d58c655c07e4b2d2395/kiwi-ssm/src/main/webapp/pic/null_user.jpg -------------------------------------------------------------------------------- /kiwi-ssm/src/main/webapp/sql/kiwitheater.sql: -------------------------------------------------------------------------------- 1 | -- MySQL dump 10.13 Distrib 5.7.22, for Linux (x86_64) 2 | -- 3 | -- Host: localhost Database: kiwitheater 4 | -- ------------------------------------------------------ 5 | -- Server version 5.7.22-0ubuntu0.16.04.1 6 | 7 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; 8 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; 9 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; 10 | /*!40101 SET NAMES utf8 */; 11 | /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; 12 | /*!40103 SET TIME_ZONE='+00:00' */; 13 | /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; 14 | /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; 15 | /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; 16 | /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; 17 | 18 | -- 19 | -- Table structure for table `room` 20 | -- 21 | 22 | -- 测试用户密码均为 1234 23 | 24 | DROP TABLE IF EXISTS `room`; 25 | /*!40101 SET @saved_cs_client = @@character_set_client */; 26 | /*!40101 SET character_set_client = utf8 */; 27 | CREATE TABLE `room` ( 28 | `id` int(11) NOT NULL AUTO_INCREMENT, 29 | `roomname` varchar(20) NOT NULL, 30 | `anchorid` int(11) NOT NULL, 31 | `img` varchar(32) DEFAULT 'pic/null_room.jpg', 32 | `description` text, 33 | `category` int(11) DEFAULT NULL, 34 | `living` tinyint(1) DEFAULT '0', 35 | PRIMARY KEY (`id`) 36 | ) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8; 37 | /*!40101 SET character_set_client = @saved_cs_client */; 38 | 39 | -- 40 | -- Dumping data for table `room` 41 | -- 42 | 43 | LOCK TABLES `room` WRITE; 44 | /*!40000 ALTER TABLE `room` DISABLE KEYS */; 45 | INSERT INTO `room` VALUES (9,'room1',1,'pic/null_room.jpg','欢迎来到
    anchor1

    的直播间',3,0),(10,'room2',2,'pic/null_room.jpg',NULL,1,0),(11,'room3',3,'pic/null_room.jpg',NULL,1,0),(12,'room4',4,'pic/null_room.jpg',NULL,1,0),(13,'room5',5,'pic/null_room.jpg',NULL,1,0),(14,'room6',6,'pic/null_room.jpg',NULL,1,0),(15,'room7',7,'pic/null_room.jpg',NULL,1,0),(16,'room8',8,'pic/null_room.jpg',NULL,1,0),(17,'room9',9,'pic/null_room.jpg',NULL,1,0),(19,'超级恐怖的直播间',11,'pic/null_room.jpg','直播间!',5,0); 46 | /*!40000 ALTER TABLE `room` ENABLE KEYS */; 47 | UNLOCK TABLES; 48 | 49 | -- 50 | -- Table structure for table `user` 51 | -- 52 | 53 | DROP TABLE IF EXISTS `user`; 54 | /*!40101 SET @saved_cs_client = @@character_set_client */; 55 | /*!40101 SET character_set_client = utf8 */; 56 | CREATE TABLE `user` ( 57 | `id` int(11) NOT NULL AUTO_INCREMENT, 58 | `username` varchar(11) NOT NULL, 59 | `password` varchar(32) DEFAULT NULL, 60 | `coin` double(11,1) DEFAULT '0.0', 61 | `usedcoin` double(11,1) DEFAULT '0.0', 62 | `like` text, 63 | `avatar` varchar(32) DEFAULT 'pic/null_user.jpg', 64 | `roomid` int(11) DEFAULT NULL, 65 | `nickname` varchar(11) DEFAULT NULL, 66 | PRIMARY KEY (`id`) 67 | ) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8; 68 | /*!40101 SET character_set_client = @saved_cs_client */; 69 | 70 | -- 71 | -- Dumping data for table `user` 72 | -- 73 | 74 | LOCK TABLES `user` WRITE; 75 | /*!40000 ALTER TABLE `user` DISABLE KEYS */; 76 | INSERT INTO `user` VALUES (1,'anchor1','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',9,'小明'),(2,'anchor2','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',10,'anchor2'),(3,'anchor3','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',11,'anchor3'),(4,'anchor4','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',12,'anchor4'),(5,'anchor5','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',13,'anchor5'),(6,'anchor6','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',14,'anchor6'),(7,'anchor7','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',15,'anchor7'),(8,'anchor8','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',16,'anchor8'),(9,'anchor9','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',17,'anchor9'),(10,'user0','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',NULL,'user0'),(11,'user1','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',19,'小红'),(12,'user2','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',NULL,'user2'),(13,'user3','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',NULL,'user3'),(14,'user4','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',NULL,'user4'),(15,'user5','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',NULL,'user5'),(16,'user6','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',NULL,'user6'),(17,'user7','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',NULL,'user7'),(18,'user8','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',NULL,'user8'),(19,'user9','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',NULL,'user9'); 77 | /*!40000 ALTER TABLE `user` ENABLE KEYS */; 78 | UNLOCK TABLES; 79 | /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; 80 | 81 | /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; 82 | /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; 83 | /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; 84 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; 85 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; 86 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; 87 | /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; 88 | 89 | -- Dump completed on 2018-06-07 9:25:07 90 | -------------------------------------------------------------------------------- /mysql/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mysql:5.7 2 | 3 | MAINTAINER nnkwrik 16t2133h@shinshu-u.ac.jp 4 | 5 | 6 | ENV MYSQL_ALLOW_EMPTY_PASSWORD yes 7 | ENV MYSQL_ROOT_PASSWORD 1234 8 | ENV MYSQL_ROOT_HOST '%' 9 | 10 | COPY mysql.cnf /etc/mysql/conf.d/mysql.cnf 11 | 12 | #将所需文件放到容器中 13 | COPY setup.sh /mysql/setup.sh 14 | COPY schema.sql /mysql/schema.sql 15 | COPY privileges.sql /mysql/privileges.sql 16 | 17 | #设置容器启动时执行的命令 18 | CMD ["bash", "/mysql/setup.sh"] 19 | -------------------------------------------------------------------------------- /mysql/docker_build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | docker build -t nnkwrik/kiwi-mysql . 4 | 5 | #docker run nnkwrik/kiwi-mysql 6 | 7 | docker push nnkwrik/kiwi-mysql 8 | -------------------------------------------------------------------------------- /mysql/mysql.cnf: -------------------------------------------------------------------------------- 1 | [client] 2 | default-character-set=utf8 3 | 4 | [mysql] 5 | default-character-set=utf8 6 | -------------------------------------------------------------------------------- /mysql/privileges.sql: -------------------------------------------------------------------------------- 1 | use mysql; 2 | 3 | select host, user from user; 4 | 5 | 6 | grant all on *.* to 'root'@'%' identified by '1234' with grant option; 7 | 8 | 9 | flush privileges; 10 | 11 | 12 | -------------------------------------------------------------------------------- /mysql/schema.sql: -------------------------------------------------------------------------------- 1 | -- 创建数据库 2 | create database `kiwitheater` default character set utf8 collate utf8_general_ci; 3 | 4 | use kiwitheater; 5 | 6 | -- 测试用户密码均为 1234 7 | 8 | DROP TABLE IF EXISTS `room`; 9 | 10 | CREATE TABLE `room` ( 11 | `id` int(11) NOT NULL AUTO_INCREMENT, 12 | `roomname` varchar(32) NOT NULL, 13 | `anchorid` int(11) NOT NULL, 14 | `img` varchar(32) DEFAULT 'pic/null_room.jpg', 15 | `description` text, 16 | `category` int(11) DEFAULT NULL, 17 | `living` tinyint(1) DEFAULT '0', 18 | PRIMARY KEY (`id`) 19 | ) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8; 20 | 21 | LOCK TABLES `room` WRITE; 22 | 23 | INSERT INTO `room` VALUES (9,'room1',1,'pic/null_room.jpg','欢迎来到
    anchor1

    的直播间',3,0),(10,'room2',2,'pic/null_room.jpg',NULL,1,0),(11,'room3',3,'pic/null_room.jpg',NULL,1,0),(12,'room4',4,'pic/null_room.jpg',NULL,1,0),(13,'room5',5,'pic/null_room.jpg',NULL,1,0),(14,'room6',6,'pic/null_room.jpg',NULL,1,0),(15,'room7',7,'pic/null_room.jpg',NULL,1,0),(16,'room8',8,'pic/null_room.jpg',NULL,1,0),(17,'room9',9,'pic/null_room.jpg',NULL,1,0),(19,'超级恐怖的直播间',11,'pic/null_room.jpg','直播间!',5,0); 24 | 25 | UNLOCK TABLES; 26 | 27 | 28 | 29 | DROP TABLE IF EXISTS `user`; 30 | 31 | CREATE TABLE `user` ( 32 | `id` int(11) NOT NULL AUTO_INCREMENT, 33 | `username` varchar(11) NOT NULL, 34 | `password` varchar(32) DEFAULT NULL, 35 | `coin` double(11,1) DEFAULT '0.0', 36 | `usedcoin` double(11,1) DEFAULT '0.0', 37 | `like` text, 38 | `avatar` varchar(32) DEFAULT 'pic/null_user.jpg', 39 | `roomid` int(11) DEFAULT NULL, 40 | `nickname` varchar(11) DEFAULT NULL, 41 | PRIMARY KEY (`id`) 42 | ) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8; 43 | 44 | 45 | LOCK TABLES `user` WRITE; 46 | 47 | INSERT INTO `user` VALUES (1,'anchor1','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',9,'小明'),(2,'anchor2','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',10,'anchor2'),(3,'anchor3','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',11,'anchor3'),(4,'anchor4','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',12,'anchor4'),(5,'anchor5','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',13,'anchor5'),(6,'anchor6','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',14,'anchor6'),(7,'anchor7','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',15,'anchor7'),(8,'anchor8','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',16,'anchor8'),(9,'anchor9','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',17,'anchor9'),(10,'user0','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',NULL,'user0'),(11,'user1','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',19,'小红'),(12,'user2','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',NULL,'user2'),(13,'user3','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',NULL,'user3'),(14,'user4','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',NULL,'user4'),(15,'user5','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',NULL,'user5'),(16,'user6','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',NULL,'user6'),(17,'user7','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',NULL,'user7'),(18,'user8','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',NULL,'user8'),(19,'user9','81DC9BDB52D04DC20036DBD8313ED055',5.0,0.0,NULL,'pic/null_user.jpg',NULL,'user9'); 48 | 49 | UNLOCK TABLES; 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /mysql/setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | echo `service mysql status` 6 | 7 | echo '1.启动mysql....' 8 | 9 | #启动mysql 10 | service mysql start 11 | 12 | sleep 3 13 | 14 | echo `service mysql status` 15 | echo 'show databases' 16 | 17 | DATABASES=$(mysql -e "show databases") 18 | DATABASE="kiwitheater" 19 | echo $DATABASES 20 | echo $DATABASE 21 | if [[ "$DATABASES" =~ "$DATABASE" ]];then 22 | 23 | echo '--------mysql容器重启--------' 24 | echo '2.数据库已存在,无需初始化数据....' 25 | 26 | else 27 | 28 | echo '--------mysql容器第一次启动--------' 29 | echo '2.开始导入数据....' 30 | #导入数据 31 | mysql < /mysql/schema.sql 32 | 33 | echo '3.导入数据完毕....' 34 | 35 | sleep 3 36 | echo `service mysql status` 37 | 38 | #重新设置mysql密码 39 | echo '4.开始修改密码....' 40 | 41 | mysql < /mysql/privileges.sql 42 | 43 | echo '5.修改密码完毕....' 44 | 45 | sleep 3 46 | echo `service mysql status` 47 | echo 'mysql容器启动完毕,且数据导入成功' 48 | 49 | fi 50 | 51 | tail -f /dev/null 52 | --------------------------------------------------------------------------------