[农学]java简单媒体播放器源码
java视频播放器源代码

import java.awt.*;import java.io.*;import java.util.*;import javax.media.*;import javax.media.format.*;import javax.swing.*;public class VideoPlayer implements ControllerListener {Vector audioCapDevList = null;Vector videoCapDevList = null;CaptureDeviceInfo audioCapDevInfo = null;CaptureDeviceInfo videoCapDevInfo = null;MediaLocator audioCapDevLoc = null;MediaLocator videoCapDevLoc = null;Player audioPlayer;Player videoPlayer;public void initAudioCapDevLoc() {//这里可以填写其它的音频编码格式,具体请看AudioFormat类audioCapDevList = CaptureDeviceManager.getDeviceList(new AudioFormat(AudioFormat.LINEAR));if ((audioCapDevList.size() > 0)) {//或许有几个CaptureDevice,这里取第一个audioCapDevInfo = (CaptureDeviceInfo) audioCapDevList.elementAt(0);audioCapDevLoc = audioCapDevInfo.getLocator();} else {System.out.println("找不到音频采集设备");System.exit(0);}}public void initVideoCapDevLoc() {//这里可以填写其它的编码视频格式,具体请看VideoFormat类videoCapDevList = CaptureDeviceManager.getDeviceList(new VideoFormat(VideoFormat.YUV));if ((videoCapDevList.size() > 0)) {//或许有几个CaptureDevice,这里取第一个videoCapDevInfo = (CaptureDeviceInfo)videoCapDevList.elementAt(0);videoCapDevLoc = videoCapDevInfo.getLocator();} else {System.out.println("找不到视频采集设备");System.exit(0);}}public void initAudioPlayer() {try {audioPlayer = Manager.createPlayer(audioCapDevLoc);} catch (NoPlayerException ex) {} catch (IOException ex) {}//增加一个侦听器,侦听player状态的改变audioPlayer.addControllerListener(this);audioPlayer.realize();}public void initVideoPlayer() {try {videoPlayer = Manager.createPlayer(videoCapDevLoc);} catch (NoPlayerException ex) {} catch (IOException ex) {}//增加一个侦听器,侦听player状态的改变videoPlayer.addControllerListener(this);videoPlayer.realize();}public void stopAndClosePlayer(){audioPlayer.stop();audioPlayer.close();videoPlayer.stop();videoPlayer.close();}public synchronized void controllerUpdate(ControllerEvent ce) { Player p = (Player) ce.getSourceController();JFrame jFrame = new JFrame();Component com;if (p == null) {return;}//如果player的状态变为Realizedif (ce instanceof RealizeCompleteEvent) {if ((com = p.getControlPanelComponent()) != null) {jFrame.add(com, BorderLayout.SOUTH);}if ((com = p.getVisualComponent()) != null) {jFrame.add(com, BorderLayout.NORTH);}jFrame.setVisible(true);jFrame.pack();jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); p.start();}}public static void main(String args[]) {V ideoPlayer cap = new VideoPlayer();cap.initAudioCapDevLoc();cap.initVideoCapDevLoc();cap.initAudioPlayer();cap.initVideoPlayer();try {Thread.currentThread().sleep(20000);//20秒后停止并关闭播放器 } catch (InterruptedException ex) {}cap.stopAndClosePlayer();}}。
毕业设计(论文)-基于java的mp3播放器jmplayer[管理资料]
![毕业设计(论文)-基于java的mp3播放器jmplayer[管理资料]](https://img.taocdn.com/s3/m/d62b9a9925c52cc58ad6be43.png)
基于JA V A的Mp3播放器JMPlayer作者姓名专业计算机科学与技术指导教师姓名专业技术职务讲师山东轻工业学院本科毕业设计(论文)原创性声明本人郑重声明:所呈交的毕业论文,是本人在指导教师的指导下独立研究、撰写的成果。
论文中引用他人的文献、数据、图件、资料,均已在论文中加以说明,除此之外,本论文不含任何其他个人或集体已经发表或撰写的成果作品。
对本文研究做出重要贡献的个人和集体,均已在文中作了明确说明并表示了谢意。
本声明的法律结果由本人承担。
毕业论文作者签名:年月日山东轻工业学院关于毕业设计(论文)使用授权的说明本毕业论文作者完全了解学校有关保留、使用毕业论文的规定,即:学校有权保留、送交论文的复印件,允许论文被查阅和借阅,学校可以公布设计论文的全部或部分内容,可以采用影印、扫描等复制手段保存本论文。
指导教师签名:毕业设计(论文)作者签名:年月日年月日目录摘要 (III)ABSTRACT (IV)第一章引言 (1)课题研究背景及意义 (1)音乐播发器的发展及历史 (1)系统开发目标 (2)本文的主要内容和结构 (2)第二章相关工具及技术介绍 (1)Eclipse简介 (3)Java Thread简介 (4)JavaSound简介 (5)Java Swing简介 (6)Java Properties简介 (7)第三章需求分析 (9)工作流程分析 (9)评价具体需求分析 (9)系统功能结构图 (9)功能详细描述 (10)Mp3播放 (10)播放控制 (10)播放信息控制 (10)Mp3列表管理 (11)歌词 (11)其他 (11)第四章总体设计 (12)系统要求 (12)系统功能描述 (12)系统运行环境 (13)系统设计思想 (13)总体流程设计 (13)Mp3播放设计 (14)播放模式设计 (15)Mp3文件列表管理设计 (15)歌词设计 (16)皮肤切换设计 (17)显示模式设计 (18)第五章详细设计 (19)界面设计 (19)系统关键类设计 (20)系统类结构 (22)第六章软件功能实现 (23)播放Mp3实现 (23)Mp3文件解析实现 (23)Mp3列表控制类实现 (23)Mp3歌词解析及显示控制实现 (23)结束语 (25)参考文献 (24)致谢 (27)摘要随着java 语言的出现,软件的跨平台性已经能被更进一步的解决和处理,随着Internet的发展,软件的跨平台性又被提高到另一个新的要求。
JavaWeb编程技术第2版源代码

Java Web编程技术(第2版)程序1.1 register.html<!DOCTYPE html><html><head><meta charset="UTF-8"><title>用户注册</title></head><body><form action="register.action" method="post"><p>用户注册</p>姓名:<input type="text" name="name" size="15">年龄:<input type="text" name="age" size="5"><br>性别:<input type="radio" name ="sex" value="male">男<input type="radio" name ="sex" value="female">女<br> 兴趣:<input type="checkbox" name="hobby" value="read">文学<input type="checkbox" name="hobby" value="sport">体育<input type="checkbox" name="hobby" value="computer">电脑<br> 学历:<select name="education"><option value="bachelor">学士</option><option value="master">硕士</option><option value="doctor">博士</option></select>邮件地址:<input type="text" name="email" size="20"><br><input type="submit" name="submit" value="提交"><input type="reset" name="reset" value="重置"></form></body></html>程序1.2 index.html<!DOCTYPE html><html><head><meta charset="UTF-8"><title>派派电子商城</title><link href="css\layout.css" rel="stylesheet" type="text/css" /></head><body><div id="container"><div id="header"><img alt="Here is a logo." src="images/logo.jpg" /></div><div id="topmenu"><form action="LoginServlet" method="post" name="login" ><p>用户名<input type="text" name="username" size="13" />密码 <input type="password" name="password" size="13" /><input type="submit" name="Submit" value="登录"><input type="button" name="register" value="注册"onclick="check();"><input type="button" name="myorder" value="我的订单" /><input type="button" name="shopcart" value="查看购物车" /></form></div><div id="middle"><div id="leftmenu"><p align="center"><b>商品分类</b></p><ul><li><a href="goods.do?catalog=mobilephone">手机数码</a></li><li><a href="goods.do?catalog=electrical">家用电器</a></li><li><a href="goods.do?catalog=automobile">汽车用品</a></li><li><a href="goods.do?catalog=clothes">服饰鞋帽</a></li><li><a href="goods.do?catalog=health">运动健康</a></li></ul></div><div id="content"><table><tr><td><img src="images/phone.jpg"><td><p>三星 S5830领取手机节优惠券,立减100元!再送:200元移动手机卡!派派价:2068元</p></td><td><img src="images/comp.jpg"></td><td><p>联想(Lenovo)G460AL-ITH 14.0英寸笔记本电脑(i3-370M 2G 500G 512独显 DVD刻录摄像头 Win7)特价:3199元!</p></td></tr></table></div></div><div id="footer"><hr size="1" color="blue"/>Copyright © 2013 派派电子商城有限责任公司,8899123.</div></div></body></html>程序1.3 layout.cssbody {font-family:Verdana; font-size:14px; margin:10;}#container {margin:0 auto; width:100%;}#header {height:50px; background:#9c6; margin-bottom:5px;}#topmenu {height:30px; background:#c0c0c0; margin-bottom:5px;}#middle {margin-bottom:5px;}#leftmenu {float:left; width:180px; background:#cf9;}#content {float:left; background:#ffa;}#footer {height:60px; background:#9c6;clear:both;}程序1.4 inputCheck.html<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>用户注册</title><script language="JavaScript" type="text/javascript">function custCheck(){var custName = document.getElementById("custName");var email = document.getElementById("email");var phone = document.getElementById("phone");if(custName.value==""){alert("客户名不能为空!");return false;}else if(email.value.indexOf("@")==-1){alert("电子邮件中应包含@字符!");return false;}else if(phone.value.length!=8){alert("电话号码应是8位数字!");return false;}}</script><style type="text/css">*,input {font-size:11pt;color:black}</style></head><body><form action="/helloweb/inputCustomer"method="post" onSubmit="return custCheck()">请输入客户信息:<table><tr><td>客户名:</td><td><input type="text" name="custName" id="custName"></td> </tr><tr><td>Email地址:</td><td><input type="text" name="email" id="email"></td></tr><tr><td>电话:</td><td><input type="text" name="phone" id="phone"></td></tr></table><input type="submit" value="确定"><input type="reset" value="重置"></form></body></html>程序1.5 HelloServlet.javapackage com.demo;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.*;@WebServlet(name = "helloServlet", urlPatterns = { "/helloServlet.do" }) public class HelloServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();out.println("<html>");out.println("<body><title>Hello Servlet</title>");out.println("<h3 style='color:#00f'>Hello,World!</h3>");out.println("现在的时间是:"+new java.util.Date());out.println("</body>");out.println("</html>");}}程序1.6 hello.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><html><head><title>简单的JSP页面</title></head><body><h3 style='color:#00f'>Hello,World!</h3>现在的时间是:<%=new java.util.Date() %></body></html>程序2.1 login.jsp<%@ page contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><html><head><title>登录页面</title></head><body><form action="login.do" method="post"><table><tr><td>用户名:</td><td><input type="text" name="username"/></td></tr><tr><td>密 码:</td><td><input type="password" name="password"/></td></tr><tr><td><input type="submit" value="登录"/></td><td><input type="reset" value="取消"/></td></tr></table></form></body></html>程序2.2 LoginServlet.javapackage com.demo;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.annotation.WebServlet;@WebServlet(name="LoginServlet",urlPatterns={"/login.do"})public class LoginServlet extends HttpServlet {public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();out.println("<html><body>");if("admin".equals(username)&& "admin".equals(password)){out.println("登录成功!欢迎您, "+username);}else{out.println("对不起!您的用户名或密码不正确.");}out.println("</body></html>");}}程序2.3 ClientInfoServlet.javapackage com.demo;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.annotation.WebServlet;@WebServlet("/ClientInfoServlet")public class ClientInfoServlet extends HttpServlet {public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();out.println("<html><head>");out.println("<title>获取客户端信息</title></head>");out.println("<body>");out.println("<h4>客户端信息:</h4>");out.println("<table border=’1’>");out.println("<tr><td>客户主机名</td>");out.println("<td>" + request.getRemoteHost() + "</td></tr>");out.println("<tr><td>客户IP地址</td>");out.println("<td>" + request.getRemoteAddr() + "</td></tr>");out.println("<tr><td>端口</td>");out.println("<td>" + request.getRemotePort() + "</td></tr>");out.println("<tr><td>请求方法</td>");out.println("<td>" + request.getMethod() + "</td></tr>");out.println("<tr><td>请求协议</td>");out.println("<td>" + request.getProtocol() + "</td></tr>");out.println("<tr><td>请求URI</td>");out.println("<td>" + request.getRequestURI() + "</td></tr>");out.println("</table>");out.println("</body></html>");}public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}程序2.4 ShowHeadersServlet.javapackage com.demo;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.util.Enumeration;import javax.servlet.annotation.WebServlet;@WebServlet("/ShowHeaders")public class ShowHeadersServlet extends HttpServlet{ public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();out.println("<html><body>");out.println("<head><title>请求头信息</title></head>");out.println("服务器收到的请求头信息<p>");out.println(request.getMethod()+" "+request.getRequestURI()+" "+request.getQueryString()+" "+request.getProtocol()+"<br>");Enumeration<String> headers = request.getHeaderNames();while(headers.hasMoreElements()){String header = (String) headers.nextElement();String value = request.getHeader(header);out.println(header+" = "+value+"<br>");}out.println("</body></html>");}}程序2.5 LoginServlet.javapackage com.demo;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.annotation.WebServlet;@WebServlet(name="LoginServlet",urlPatterns={"/login.do"}) public class LoginServlet extends HttpServlet {public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException { String username = request.getParameter("username");String password = request.getParameter("password");// 用户名和口令均为admin,认为登录成功if(username.equals("admin")&&password.equals("admin")){ request.setAttribute("username", username);RequestDispatcher rd =request.getRequestDispatcher("/welcome.jsp");rd.forward(request, response);}else{RequestDispatcher rd =request.getRequestDispatcher("/login.jsp");rd.forward(request, response);}}}程序2.6 welcome.jsp<html><body><h4>Your are welcome!</h4>${username}</body></html>程序2.7 questions.jsp<%@ page contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><html><head><title>简单测试</title></head><body><p>请回答下面的问题:</p><form action="simpletest.do" method="post"><p> 1. Sun公司于2010年被Oracle公司收购。
JMF(Java Media Framework)基础教程

Hi, Java媒体架构基础内容表格1. 关于此指南2. 一个简单的音频播放器3. JMF用户接口组件4. JMF概念5. 传播和接收媒体6. 总结以及资源第一节. 关于此指南此指南包含的内容?Java 媒体架构(JMF)是一个令人激动的通用的API,它允许Java开发者用许多不同的方法处理媒体。
本指南主要通过使用工作的例子提供一个JMF的一些主要的特征的概述。
阅读完本指南后,你将会明白JMF体系结构中的主要播放功能。
你同样能正确的使用JMF,使用现存的例子和可为更多特殊功能扩展的源代码。
本指南包含着以下主题:· 下载和安装JMF· 主要的JMF类以及它们在JMF体系结构中的应用· 播放本地的媒体文件· 为媒体的存取和操作制作以和图形用户界面(GUI)· 通过网络传播媒体· 通过网络接收媒体几乎所有的媒体类型的操作和处理都可以通过JMF来实现。
全面的讨论JMF所提供的所有特征已经超过了本指南的范围,我们将使用三个简单的媒体应用程序来学习此框架的构建模块。
通过这个方法,本指南将为你未来学习和实施更多特殊的应用提供准备。
我应该使用此指南吗?本指南会带你学习使用JMF工作的基础。
为完成这些,我们会创建三个的独立工作的例程序。
每个例子都会建立前一个例子的基础上,显示JMF功能性的不同方面。
在本指南中的例子假定你曾经使用过并且已经熟悉了Java程序语言。
除了Java 核心和JMF的类之外,我们会使用一些Java AWT和Swing类(用于创建GUI),也会有一些Java网络类(用于在网络中传输媒体)。
对GUI和网络类一些熟悉有助于你更快的明白观点和这里的例子,但并非是阅读本指南必须的。
我们将学习的例程序如下· 一个简单的音频播放器(JMF的HelloWorld应用):这个字符界面的播放器通过在命令行中简单的输入媒体文件的名字就可以播放大多数的音频类型。
网页视频播放器代码大全

网页视频播放器代码大全1.avi格式代码片断如下:<object id="video" width="400" height="200" border="0" classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"><param name="ShowDisplay" value="0"><param name="ShowControls" value="1"><param name="AutoStart" value="1"><param name="AutoRewind" value="0"><param name="PlayCount" value="0"><param name="Appearance value="0 value="""><param name="BorderStyle value="0 value="""><param name="MovieWindowHeight" value="240"><param name="MovieWindowWidth" value="320"><param name="FileName" value="/Mbar.avi"><embed width="400" height="200" border="0" showdisplay="0" showcontrols="1" autostart="1" autorewind="0" playcount="0" moviewindowheight="240" moviewindowwidth="320" filename="/Mbar.avi" src="Mbar.avi"></embed></object>2.mpg格式代码片断如下:<object classid="clsid:05589FA1-C356-11CE-BF01-00AA0055595A" id="ActiveMovie1" width="239" height="250"><param name="Appearance" value="0"><param name="AutoStart" value="-1"><param name="AllowChangeDisplayMode" value="-1"><param name="AllowHideDisplay" value="0"><param name="AllowHideControls" value="-1"><param name="AutoRewind" value="-1"><param name="Balance" value="0"><param name="CurrentPosition" value="0"><param name="DisplayBackColor" value="0"><param name="DisplayForeColor" value="16777215"><param name="DisplayMode" value="0"><param name="Enabled" value="-1"><param name="EnableContextMenu" value="-1"><param name="EnablePositionControls" value="-1"><param name="EnableSelectionControls" value="0"><param name="EnableTracker" value="-1"><param name="Filename" value="/mpeg/halali.mpg" valuetype="ref"><param name="FullScreenMode" value="0"><param name="MovieWindowSize" value="0"><param name="PlayCount" value="1"><param name="SelectionStart" value="-1"><param name="SelectionEnd" value="-1"><param name="ShowControls" value="-1"><param name="ShowDisplay" value="-1"><param name="ShowPositionControls" value="0"><param name="ShowTracker" value="-1"><param name="Volume" value="-480"></object>3.smi格式代码片断如下:<OBJECT id=RVOCX classid=clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA width=240 height=180><param name="_ExtentX" value="6350"><param name="_ExtentY" value="4763"><param name="AUTOSTART" value="-1"><param name="SHUFFLE" value="0"><param name="PREFETCH" value="0"><param name="NOLABELS" value="-1"><param name="SRC" value="rm.rm"><param name="CONTROLS" value="ImageWindow"><param name="CONSOLE" value="console1"><param name="LOOP" value="0"><param name="NUMLOOP" value="0"><param name="CENTER" value="0"><param name="MAINTAINASPECT" value="0"><param name="BACKGROUNDCOLOR" value="#000000"><embed src="real.smi" type="audio/x-pn-realaudio-plugin" console="Console1" controls="ImageWindow" height="180" width="240" autostart="true"></OBJECT>4.rm格式代码片断如下:<OBJECT ID=video1 CLASSID="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" HEIGHT=288 WIDTH=352><param name="_ExtentX" value="9313"><param name="_ExtentY" value="7620"><param name="AUTOSTART" value="0"><param name="SHUFFLE" value="0"><param name="PREFETCH" value="0"><param name="NOLABELS" value="0"><param name="SRC" value="rtsp://203.*.*.35/vod/dawan-a.rm"><param name="CONTROLS" value="ImageWindow"><param name="CONSOLE" value="Clip1"><param name="LOOP" value="0"><param name="NUMLOOP" value="0"><paramname="MAINTAINASPECT" value="0"><param name="BACKGROUNDCOLOR" value="#000000"><embed SRC type="audio/x-pn-realaudio-plugin" CONSOLE="Clip1" CONTROLS="ImageWindow" HEIGHT="288" WIDTH="352" AUTOSTART="false"></OBJECT>5.wmv格式代码片断如下:<object id="NSPlay" width=200 height=180 classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95"codebase="/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715" standby="Loading Microsoft Windows Media Player components..." type="application/x-oleobject" align="right" hspace="5"><param name="AutoRewind" value=1><param name="FileName" value="/blog/******.wmv"><param name="ShowControls" value="1"><param name="ShowPositionControls" value="0"><param name="ShowAudioControls" value="1"><param name="ShowTracker" value="0"><param name="ShowDisplay" value="0"><param name="ShowStatusBar" value="0"><param name="ShowGotoBar" value="0"><param name="ShowCaptioning" value="0"><param name="AutoStart" value=1><param name="Volume" value="-2500"><param name="AnimationAtStart" value="0"><param name="TransparentAtStart" value="0"><param name="AllowChangeDisplaySize" value="0"><param name="AllowScan" value="0"><param name="EnableContextMenu" value="0"><param name="ClickToPlay" value="0"></object>6.wma格式放在 <body> 里面。
视频播放器的程序设计及代码示例

视频播放器的程序设计及代码示例一、介绍视频播放器是一种常用的应用程序,用于播放电影、电视剧、MV等各种类型的视频文件。
它可以提供良好的用户体验,具备快进、快退、调节音量、全屏播放等功能。
在本文中,将介绍视频播放器的程序设计原理,并给出一些示例代码来帮助读者更好地理解和实践。
二、程序设计原理1. 用户界面设计:视频播放器的用户界面需要简洁明了,并提供直观的操作按钮,如播放、暂停、停止、快进/快退、音量调节等。
可以使用图标、按钮、滑块等控件来实现,并合理布局,以便用户轻松地操作和控制播放器。
2. 视频解码与显示:视频播放器需要将视频文件进行解码,并实时将解码后的图像进行显示。
常见的视频解码算法有H.264、MPEG-2等。
可以使用像素缓冲区来存储解码后的图像数据,并使用界面库或图形库将图像数据显示在屏幕上。
3. 音频解码与播放:视频文件中通常包含音频轨道,视频播放器需要将音频数据解码并实时播放。
音频解码可以使用MP3、AAC等常见的音频解码算法。
播放音频可以使用操作系统提供的音频播放接口,如Windows下的DirectSound、Linux下的ALSA等。
4. 文件格式支持:视频播放器需要支持常见的视频文件格式,如MP4、AVI、MKV等。
这涉及到对不同格式文件的解析和支持,需要使用相应的解析库或者开源框架。
5. 视频控制功能:视频播放器除了基本的播放、暂停、停止功能外,还应该提供快进/快退、跳转指定位置、循环播放、调节音量和亮度等高级控制功能。
通过对用户操作的监测,可以实现这些功能,并更新界面以反映当前的播放状态。
三、代码示例以下是一个基于Java编写的简单视频播放器的代码示例,用于展示播放视频文件和基本的控制功能:```javaimport java.awt.*;import java.awt.event.*;import javax.swing.*;import java.io.File;import ponent.EmbeddedMediaPlayerComponent;import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer;public class SimpleVideoPlayer {private JFrame frame;private JPanel playerPanel;private JButton playButton;private JButton pauseButton;private JButton stopButton;private EmbeddedMediaPlayer mediaPlayer;public SimpleVideoPlayer() {frame = new JFrame("Simple Video Player");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(800, 600);playerPanel = new JPanel();frame.getContentPane().add(playerPanel, BorderLayout.CENTER);playButton = new JButton("Play");pauseButton = new JButton("Pause");stopButton = new JButton("Stop");playerPanel.add(playButton);playerPanel.add(pauseButton);playerPanel.add(stopButton);mediaPlayer = newEmbeddedMediaPlayerComponent().getMediaPlayer();playButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {mediaPlayer.play();}});pauseButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {mediaPlayer.pause();}});stopButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {mediaPlayer.stop();}});frame.setVisible(true);}public static void main(String[] args) {SwingUtilities.invokeLater(new Runnable() {public void run() {SimpleVideoPlayer player = new SimpleVideoPlayer();}});}}```这段代码使用了Java语言,基于VLCJ (VLC Java Bindings)库来实现视频播放器。
java实现视频上传和播放

Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的player.swf播放器.多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。
ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。
1.能支持的格式ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)2.不能支持的格式对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等),可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式.实例是将上传视频转码为flv格式,该格式ffmpeg支持,所以我们实例中需要ffmpeg视频处理工具.数据库MySQL5.5实例所需要的数据库脚本drop database if exists db_mediaplayer;create database db_mediaplayer;use db_mediaplayer;create table tb_media(id int not null primary key auto_increment comment '主键' ,title varchar(50) not null comment '视频名称' ,src varchar(200) not null comment '视频存放地址' ,picture varchar(200) not null comment '视频截图' ,descript varchar(400) comment '视频描述' ,uptime varchar(40) comment '上传时间');desc tb_media;项目结构图:上传视频界面设计在上传文件时,Form表单中enctype属性值必须为"multipart/form-data".模块界面设计如下图:enctype属性值说明application/x-www-form-urlencoded表单数据被编码为名称/值对,这是标准的编码格式multipart/form-data表单数据被编码为一条消息,页面上每个控件对应消息中的一部分text/plain表单数据以纯文本形式进行编码,其中不含任何控件格式的字符业务接口定义面向接口编程,接口中定义系统功能模块.这样方便理清业务,同时接口的对象必须由实现了该接口的对象来创建.这样就避免编码中的某些业务遗漏等,同时扩展性也增强了.package com.webapp.dao;import java.util.List;import com.webapp.entity.Media;/**** MediaDao.java** @version :1.1** @author :苏若年<ahref="mailto:****************">发送邮件</a>** @since :1.0 创建时间: 2013-2-07 上午10:19:54** TODO : interface MediaDao.java is used for ...**/public interface MediaDao {/*** 视频转码* @param ffmpegPath 转码工具的存放路径* @param upFilePath 用于指定要转换格式的文件,要截图的视频源文件* @param codcFilePath 格式转换后的的文件保存路径* @param mediaPicPath 截图保存路径* @return* @throws Exception*/public boolean executeCodecs(String ffmpegPath,String upFilePath, String codcFilePath, String mediaPicPath)throws Exception;/*** 保存文件* @param media* @return* @throws Exception*/public boolean saveMedia(Media media)throws Exception;/*** 查询本地库中所有记录的数目* @return* @throws Exception*/public int getAllMediaCount()throws Exception;/*** 带分页的查询* @param firstResult* @param maxResult* @return*/public List<Media> queryALlMedia(int firstResult, int maxResult)throws Exception;/*** 根据Id查询视频* @param id* @return* @throws Exception*/public Media queryMediaById(int id)throws Exception;}接口的实现,这里列出ffmpeg视频转码与截图模块/*** 视频转码* @param ffmpegPath 转码工具的存放路径* @param upFilePath 用于指定要转换格式的文件,要截图的视频源文件* @param codcFilePath 格式转换后的的文件保存路径* @param mediaPicPath 截图保存路径* @return* @throws Exception*/public boolean executeCodecs(String ffmpegPath, String upFilePath, String codcFilePath, String mediaPicPath) throws Exception {// 创建一个List集合来保存转换视频文件为flv格式的命令List<String> convert = new ArrayList<String>();convert.add(ffmpegPath); // 添加转换工具路径convert.add("-i"); // 添加参数"-i",该参数指定要转换的文件convert.add(upFilePath); // 添加要转换格式的视频文件的路径convert.add("-qscale"); //指定转换的质量convert.add("6");convert.add("-ab"); //设置音频码率convert.add("64");convert.add("-ac"); //设置声道数convert.add("2");convert.add("-ar"); //设置声音的采样频率convert.add("22050");convert.add("-r"); //设置帧频convert.add("24");convert.add("-y"); // 添加参数"-y",该参数指定将覆盖已存在的文件convert.add(codcFilePath);// 创建一个List集合来保存从视频中截取图片的命令List<String> cutpic = new ArrayList<String>();cutpic.add(ffmpegPath);cutpic.add("-i");cutpic.add(upFilePath); // 同上(指定的文件即可以是转换为flv格式之前的文件,也可以是转换的flv文件)cutpic.add("-y");cutpic.add("-f");cutpic.add("image2");cutpic.add("-ss"); // 添加参数"-ss",该参数指定截取的起始时间cutpic.add("17"); // 添加起始时间为第17秒cutpic.add("-t"); // 添加参数"-t",该参数指定持续时间cutpic.add("0.001"); // 添加持续时间为1毫秒cutpic.add("-s"); // 添加参数"-s",该参数指定截取的图片大小cutpic.add("800*280"); // 添加截取的图片大小为350*240cutpic.add(mediaPicPath); // 添加截取的图片的保存路径boolean mark = true;ProcessBuilder builder = new ProcessBuilder();try {mand(convert);builder.redirectErrorStream(true);builder.start();mand(cutpic);builder.redirectErrorStream(true);// 如果此属性为true,则任何由通过此对象的start() 方法启动的后续子进程生成的错误输出都将与标准输出合并,//因此两者均可使用Process.getInputStream() 方法读取。
常用的播放器控制代码

<object id="player" height="64" width="260" classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6"><param NAME="AutoStart" V ALUE="-1"><!--是否自动播放--><param NAME="Balance" V ALUE="0"><!--调整左右声道平衡,同上面旧播放器代码--><param name="enabled" value="-1"><!--播放器是否可人为控制--><param NAME="EnableContextMenu" V ALUE="-1"><!--是否启用上下文菜单--><param NAME="url" value="/blog/1.wma"><!--播放的文件地址--><param NAME="PlayCount" V ALUE="1"><!--播放次数控制,为整数--><param name="rate" value="1"><!--播放速率控制,1为正常,允许小数,1.0-2.0--><param name="currentPosition" value="0"><!--控件设置:当前位置--><param name="currentMarker" value="0"><!--控件设置:当前标记--><param name="defaultFrame" value=""><!--显示默认框架--><param name="invokeURLs" value="0"><!--脚本命令设置:是否调用URL--><param name="baseURL" value=""><!--脚本命令设置:被调用的URL--><param name="stretchToFit" value="0"><!--是否按比例伸展--><param name="volume" value="50"><!--默认声音大小0%-100%,50则为50%--><param name="mute" value="0"><!--是否静音--><param name="uiMode" value="mini"><!--播放器显示模式:Full显示全部;mini最简化;None不显示播放控制,只显示视频窗口;invisible全部不显示--><param name="windowlessVideo" value="0"><!--如果是0可以允许全屏,否则只能在窗口中查看--><param name="fullScreen" value="0"><!--开始播放是否自动全屏--><param name="enableErrorDialogs" value="-1"><!--是否启用错误提示报告--><param name="SAMIStyle" value><!--SAMI样式--><param name="SAMILang" value><!--SAMI语言--><param name="SAMIFilename" value><!--字幕ID--></object>下面是一些常用的方法和属性://基本属性URL:String; 指定媒体位置,本机或网络地址uiMode:String; 播放器界面模式,可为Full, Mini, None, InvisibleplayState:integer; 播放状态,1=停止,2=暂停,3=播放,6=正在缓冲,9=正在连接,10=准备就绪enableContextMenu:Boolean; 启用/禁用右键菜单(也是简单的防盗链方法)fullScreen:boolean; 是否全屏显示//播放器控制属性controls.play; 播放controls.pause; 暂停controls.stop; 停止controls.currentPosition:double; 当前进度controls.currentPositionString:string; 当前进度,字符串格式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//程序所用到的各种程序包import java.awt.BorderLayout;import java.awt.CheckboxMenuItem;import java.awt.Color;import ponent;import java.awt.Container;import java.awt.FileDialog;import java.awt.Font;import java.awt.FontMetrics;import java.awt.Graphics;import java.awt.Menu;import java.awt.MenuBar;import java.awt.MenuItem;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.media.ControllerClosedEvent;import javax.media.ControllerEvent;import javax.media.ControllerListener;import javax.media.EndOfMediaEvent;import javax.media.GainControl;import javax.media.Manager;import javax.media.MediaLocator;import javax.media.NoPlayerException;import javax.media.Player;import javax.media.PrefetchCompleteEvent;import javax.media.RealizeCompleteEvent;import javax.media.Time;import javax.swing.JFrame;//本程序对应的类;class MediaPlayerextends JFrameimplements ActionListener, ControllerListener, ItemListener {//MediaPlayer类的变量成员的声明;//JMF提供的播放器对象;Player player;Component vc, cc, gcc;GainControl gc;//first值用来控制在刚开始程序时显示一幅欢迎界面;loop用以标记是否循环播放;boolean first = true, loop = false;//设立一个字符串记录当前打开文件的路径String currentDirectory;MediaPlayer(String title) {super(title);// 利用一个adapter实现对用户点击窗口系统菜单的关闭按钮// 时的响应;addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {//调用dispose以执行windowCloseddispose();}public void windowClosed(WindowEvent e) {if (player != null)player.close();System.exit(0);}});//调用设置程序菜单栏的方法成员完成菜单的布置setupMenu();setSize(400, 400);setVisible(true);}//本方法用以设置程序菜单栏public void setupMenu() {//设置一个菜单Menu f = new Menu("文件");//往设置的菜单种添加菜单项MenuItem mi = new MenuItem("打开");mi.addActionListener(this);f.add(mi);f.addSeparator();CheckboxMenuItem cbmi = new CheckboxMenuItem("循环", false);cbmi.addItemListener(this);f.add(cbmi);f.addSeparator();mi = new MenuItem("退出");mi.addActionListener(this);f.add(mi);Menu l = new Menu("播放列表");Menu c = new Menu("播放控制");MenuItem move = new MenuItem("播放");move.addActionListener(this);c.add(move);c.addSeparator();MenuItem pause = new MenuItem("暂停");pause.addActionListener(this);c.add(pause);c.addSeparator();MenuItem stop = new MenuItem("停止");stop.addActionListener(this);c.add(stop);c.addSeparator();//设置一个菜单栏MenuBar mb = new MenuBar();//将设置的菜单依次加入程序的菜单栏中去mb.add(f);mb.add(c);mb.add(l);//将构造完成的菜单栏交给当前程序的窗口;setMenuBar(mb);}//事件响应成员;捕捉发送到本对象的各种事件;public void actionPerformed(ActionEvent e) {//设一个字符串用于暂存打开的媒体文件的路径;String cufile , selcectfile;if (e.getActionCommand().equals("退出")) {// 调用dispose以便执行windowCloseddispose();return;}//次事件表明用户选择了"播放"菜单命令;//如果当前有一个文件可以播放则执行播放命令;if (e.getActionCommand().equals("播放")) {if (player != null) {player.start();}return;}//如果当前正在播放某一文件,则执行暂停;if (e.getActionCommand().equals("暂停")) {if (player != null) {player.stop();}return;}//次事件表明用户选择了"播放"菜单命令;//如果当前有一个文件可以播放则执行播放命令;if (e.getActionCommand().equals("停止")) {if (player != null) {player.stop();player.setMediaTime(new Time(0));}return;}//用户选择要播放的媒体文件if (e.getActionCommand().equals("打开")) {FileDialog fd = new FileDialog(this, "打开媒体文件", FileDialog.LOAD);fd.setDirectory(currentDirectory);fd.show();// 如果用户放弃选择文件,则返回if (fd.getFile() == null)return;//保存了所选文件的名称及其全路径名称已被稍后使用//同时设置当前文件夹路径selcectfile = fd.getFile();currentDirectory = fd.getDirectory();cufile = currentDirectory + selcectfile;//将用户选择的文件作为一个菜单项加入播放列表该菜单项"名为"该文件名;//被点击后给出的命令串是该文件的全路径名MenuItem mi = new MenuItem(selcectfile);mi.setActionCommand(cufile);MenuBar mb = getMenuBar();Menu m = mb.getMenu(2);mi.addActionListener(this);m.add(mi);} else {//程序逻辑运行到此表示用户选择了一个"播放列表"中的媒体文件//此时可以通过如下动作获得该文件的全路径名;cufile = e.getActionCommand();selcectfile = cufile;}//如果已存在一个播放器,则先将其关闭,稍后重新创建//创建播放器时需要捕捉一些异常;if (player != null)player.close();try {player = Manager.createPlayer(new MediaLocator("file:" + cufile));} catch (java.io.IOException e2) {System.out.println(e2);return;} catch (NoPlayerException e2) {System.out.println("不能找到播放器.");return;}if (player == null) {System.out.println("无法创建播放器.");return;}first = false;setTitle(selcectfile);//设置处理播放控制器实际的对象;player.addControllerListener(this);player.prefetch();}//因为实现了"ControllerListener"接口,本方法用于处理媒体播放器传来的事件;public void controllerUpdate(ControllerEvent e) {Container tainer = getContentPane();// 调用player.close()时ControllerClosedEvent事件出现。