视频播放器源码
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();}}。
Android开发—SeeJoPlayer视频播放器源码解析
2020.03.27 v1.2.0 beta版:更新说明:一、完美支持android1.五、android1.六、android2.0、android2.0一、android2.1平台;2、完美支持320×480、480×800、480×854等各类分辨率(自适应屏幕分辨率);3、支持在线音视频播放,支持URL input和从浏览器调用SeeJoPlayer播放器播放在线音视频;4、自动转为横屏播放,为用户提供更好的观看体验;5、修改了没有SD卡程序出错的Bug;6、美化了视频播放列表和操作说明的界面。
第一部份:功能介绍SeeJoPlayer的优势要紧在相对还算美观的界面和便利的交互操作上。
先说操作吧,它支持:一、全屏切换: 双击屏幕二、播放/暂停: 长按屏幕3、静音/恢复: 长按音量按钮4、播放列表: 操纵面板最右边的按钮(暂不支持编辑功能)五、音量调剂: 单击音量按钮,在弹出的音量显示区域触摸改变音量这些操作和PC上的播放器较为类似,希望大伙儿能用得适应。
至于界面的话,多说无益,直接上图吧:第二部份:源码解析一、VideoView与视频比例缩放:咱们能够很方便的取得VideoView的源代码,最简单的方式是直接在上找“.java”。
因此重写VideoView的进程其实只是在原先的基础上进行一些修改罢了,并非一个很麻烦的工作。
什么缘故Android自带的VideoView会维持视频的长宽比而不能让咱们很方便的自概念比例呢?我猜想可能Google 做Android也是一个很仓促的工程,许多代码并无考虑得太成熟。
VideoView的源码中有如此一段代码:1 @Override2 3 4 5 6 7 8 9101112131415161718192021222324252627protectedvoid onMeasure(int widthMeasureSpec, int heightMeasureSpec){//Log.i("@@@@", "onMeasure");int width = getDefaultSize(mVideoWidth, widthMeasureSpec);int height = getDefaultSize(mVideoHeight, heightMeasureSpec);if(mVideoWidth >0&& mVideoHeight >0){if( mVideoWidth * height > width * mVideoHeight ){//Log.i("@@@", "image too tall, correcting");height = width * mVideoHeight / mVideoWidth;}elseif( mVideoWidth * height < width * mVideoHeight ){//Log.i("@@@", "image too wide, correcting");width = height * mVideoWidth / mVideoHeight;}else{//Log.i("@@@", "aspect ratio is correct: " +//width+"/"+height+"="+//mVideoWidth+"/"+mVideoHeight);}}//Log.i("@@@@@@@@@@", "setting size: " + width + 'x' + height); setMeasuredDimension(width, height);}这确实是什么缘故长宽比不能改变的缘故了。
视频播放器的程序设计及代码示例
视频播放器的程序设计及代码示例一、介绍视频播放器是一种常用的应用程序,用于播放电影、电视剧、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)库来实现视频播放器。
yuv420视频播放器 opencv
Yuv420视频播放器该播放器需要依赖opencv库:以下是程序源码:/************************************************************************************** ******************************************* 按ESC退出播放,Space暂停播放,左键快退,右键快进,在暂停模式下,左键显示前一帧,右键显示后一帧,space继续播放,ESC退出*************************************************************************************** ******************************************/#include<highgui.h>#include<stdio.h>#include<cv.h>#include<conio.h>#include"yu.h"#define Width 352#define Height 288#define FrameSize ( Width*Height*3/2) //YUV一帧图像大小int timer; //进度条int pos = 0; //用于寻找下一帧位置int frame_total; //帧数//yuv转rgb,然后将rgb转换进imagevoid YUV_to_RGB(unsigned char* pYUV, unsigned char* pRGB, int width, int height){unsigned char* point_Y = pYUV; //找到Y、U、V在内存中的首地址unsigned char* point_U = pYUV + height*width;unsigned char* point_V = point_U + (height*width / 4);unsigned char* pBGR = NULL;unsigned char R = 0;unsigned char G = 0;unsigned char B = 0;unsigned char Y = 0;unsigned char U = 0;unsigned char V = 0;double temp = 0;for (int i = 0; i < height; i++){for (int j = 0; j < width; j++){pBGR = pRGB + i*width * 3 + j * 3; //找到相应的RGB首地址Y = *(point_Y + i*width + j); //取Y、U、V的数据值U = *point_U;V = *point_V;//yuv转rgb公式//yuv转rgb公式temp = Y + ((1.773) * (U - 128));if (temp<0)B = 0;else if (temp>255)B = 255;elseB = (unsigned char)temp;temp = (Y - (0.344) * (U - 128) - (0.714) * (V - 128));if (temp<0)G = 0;else if (temp>255)G = 255;elseG = (unsigned char)temp;temp = (Y + (1.403)*(V - 128));if (temp<0)R = 0;else if (temp>255)R = 255;elseR = (unsigned char)temp;*pBGR = B; //将转化后的rgb保存在rgb内存中,b存放在最低位*(pBGR + 1) = G;*(pBGR + 2) = R;if (j % 2 != 0){point_U++;point_V++;}}if (i % 2 == 0){point_U = point_U - width / 2;point_V = point_V - width / 2;}}}void time_trackbar(int){pos = timer * FrameSize;}void display_instruction(){printf(" -----------------------------------------------------------\n");printf("| Operation Instruction |\n");printf("| |\n");printf("| when start: |\n");printf("| Esc : Exit |\n");printf("| Space : Stop |\n");printf("| -> : forward |\n");printf("| <- : backward |\n");printf("| when stop: |\n");printf("| Esc : Exit |\n");printf("| Space : Start |\n");printf("| -> : next frame |\n");printf("| <- : last frame |\n");printf("| |\n");printf("| Deadline_h |\n");printf("|___________________________________________________________|\n"); }void clear(){printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");}int main(int argc, char * argv[]){int keynum;int save_win = 33;int win_tmp = -1;FILE *f; //打开文件if (!(f = fopen("demo.yuv", "rb"))) //需在项目文件夹下printf("file open error!");display_instruction();fseek(f, 0, SEEK_END); //文件位置定位到文件尾巴即可知道总共有多少位数据,位数/(每帧位数) = 帧数frame_total = (int)((int)ftell(f) / ((Width * Height * 3) / 2)); //计算有多少帧图像fseek(f, 0, SEEK_SET);//文件位置定位到文件头unsigned char *pBuf = new unsigned char[Width*Height * 3 / 2]; //开辟缓冲区存放一帧图片信息unsigned char *pRGB = new unsigned char[3 * Width*Height];IplImage * image = cvCreateImageHeader(cvSize(Width, Height), IPL_DEPTH_8U, 3); //创建image,大小为Width*Height,数据类型为IPL_DEPTH_8U,3通道char TrackbarName[50]; //进度条名称定义sprintf(TrackbarName, "%d", frame_total);while (1) //视频的播放,循环播放{fseek(f, pos, SEEK_SET); //借助变量pos准确找到每帧图片的开头位置,并读入pBuf fread(pBuf, 1, FrameSize, f);YUV_to_RGB(pBuf, pRGB, Width, Height); //yuv转rgb,然后将rgb转换进imagecvSetData(image, pRGB, Width * 3);cvShowImage("yuv播放器", image); //显示图片cvCreateTrackbar(TrackbarName, "yuv播放器", &timer, frame_total, time_trackbar);//创建进度条keynum = cvWaitKey(33); //按键扫描if (timer > frame_total - 1) //播放完后,跳回开头,但是不播放{pos = 0;keynum = 32;}if (keynum == 27)//ESC按键按下,退出程序{cvDestroyWindow("yuv播放器"); //释放内存//cvReleaseImage(&image);delete pBuf;delete pRGB;fclose(f);clear(); //清屏printf("yuv player exit\n");return 0;}if (keynum == 0x250000 && (timer > 40)) // -> 按下,快退,步长为40帧{pos -= (40 * FrameSize);timer -= 40;}if (keynum == 0x270000 && (timer < frame_total - 40)) // <- 按下,快退,步长为40帧{pos += (40 * FrameSize);timer += 40;}if (keynum == 32) //如果按下space键则暂停{while (1){keynum = cvWaitKey(33);if (keynum == 32) //再次按下space键则跳出循环,重新开始播放{break;}if (keynum == 27) //ESC按键按下,退出程序{cvDestroyWindow("yuv播放器"); //释放内存//cvReleaseImage(&image);delete pBuf;delete pRGB;fclose(f);clear(); //清屏printf("yuv player exit\n");return 0;if (keynum == 0x250000 && (timer > 1)) // <- 按下,单帧快退{pos -= FrameSize;timer--;}if (keynum == 0x270000 && (timer < frame_total - 1)) // -> 按下,单帧快进{pos += FrameSize;timer++;}cvCreateTrackbar(TrackbarName, "yuv播放器", &timer, frame_total, time_trackbar); //创建进度条fseek(f, pos, SEEK_SET);fread(pBuf, 1, FrameSize, f);YUV_to_RGB(pBuf, pRGB, Width, Height);cvSetData(image, pRGB, Width * 3);cvShowImage("yuv播放器", image);}}timer++; //每播放一帧,time_slider自加pos += FrameSize;}}视频播放效果:。
MediaPlayerClassic-HC源代码分析
MediaPlayerClassic-HC源代码分析Media Player Classic - Home Cinema (mpc-hc)播放器⼀个经典的影⾳播放器,免费软件,可播放CD、VCD、DVD、及MP3、MP4、AVI、AAC等多种影⾳格式。
与此同时,它还是开源的。
今天尝试着编译了⼀下它的源代码(还是第⼀次接触这么⼤的MFC⼯程)第⼀步::准备(注意:就算⾃⼰电脑上有MSYS_MinGW,也建议下载这个)2. 在 "C:\mpc-hc" 创建⼀个"er.bat",内容如下(有些参数根据⾃⼰系统确定):@ECHO OFFSET "MPCHC_MSYS=C:\MSYS"SET "MPCHC_MINGW32=%MPCHC_MSYS%\mingw"SET "MPCHC_MINGW64=%MPCHC_MINGW32%"REM Git is optional to set if you chose to add it in PATH when installing it(下⾯这条可以不要)SET "MPCHC_GIT=C:\Program Files (x86)\Git"第三步:编译1.使⽤Git 下载 MPC-HC's 到 "C:\mpc-hc" (其他地⽅也⾏)Git命令(俩都⾏):或:2. 打开sln⽂件 "C:\mpc-hc\mpc-hc.sln",编译之(注:如果Release编译不成功,可以试试编译Release-Lite)3. 在"C:\mpc-hc\bin\mpc-hc_x86"下得到"mpc-hc.exe"4. 打开sln⽂件 "C:\mpc-hc\mpciconlib.sln",编译之5. 得到"mpciconlib.dll"6. 打开sln⽂件 "C:\mpc-hc\mpcresources.sln",编译之7. 得到 "mpcresources.XX.dll"注:直接运⾏"build.bat" 可以编译所有⽂件Media Player Classic - Home Cinema (mpc-hc)播放器⼀个经典的影⾳播放器,可播放CD、VCD、DVD、及MP3、MP4、AVI、AAC等多种影⾳格式。
播放器代码大全
播放器代码大全autostart="true"中true或1表示自动播放,false或0表示手动播放loop="true" 中的true或1表示重复播放,false或0表示只播放一次width= height= 中的数字分别表示播放器的宽度和高度=0表示隐藏播放器EnableContextMenu="0" 禁右键ShowStatusBar="1" (带显示文件播放信息)1隐藏播放器(不循环)代码:<EMBED src=音乐网址hidden=true type=audio/x-ms-wmaAUTOSTART="1">2.隐藏播放器(循环播放)代码:<EMBED src=音乐网址hidden=true type=audio/mpegAUTOSTART="1" loop="-1">3.黑色皮肤播放器代码:<EMBED style="FILTER: xray()" src=音乐网址width=360 height=30 type=audio/mpeg volume="0" autostart="1" loop="-1">4.淡蓝色播放器代码:<EMBED src=播放地址 width=300 height=45 type=audio/mpegloop="-1" autostart="1" volume="0">5.迷幻播放器代码:<TABLE style="FILTER: Alpha(Opacity=100, FinishOpacity=0,Style=2, StartX=20, StartY=40, FinishX=0, FinishY=0)gray(); WIDTH: 400px; HEIGHT: 83px"><TBODY><TR><TD><EMBED src=播放地址 width=400 height=40 type=audio/mpeg panel="0" autostart="1" loop="true"></TD></TR></TBODY></TABLE>6.带菜单的播放器代码:<EMBEDpluginspage=/windows/mediaplayer/downlo ad/default.asp width=400 height=172 type=application/x-mplayer2 FileName="音乐网址" SHOWCONTROLS="1" SHOWSTATUSBAR="1" SHOWDISPLAY="1" SHOWGOTOBAR="1"AUTOSTART="true" PlayCount="1">7.深黄色带菜单播放器代码:<EMBED style="FILTER: invert()" src=音乐网址width=320 height=45 type=audio/x-ms-wma ShowStatusBar="1" loop="true"autostart="true">8.灰色播放器代码:<EMBED style="FILTER: Gray()" src="链接地址" width=300 height=69 type=application/x-mplayer2 loop="-1" showcontrols="1"ShowDisplay="0" ShowStatusBar="1" autostart="1"></EMBED>9.灰白色播放器代码:<embed style="FILTER: Gray()" src=链接地址width=300 height=45 loop="-1" autostart="true"></EMBED>10.带菜单的蓝色播放器代码:<EMBED src="链接地址" width=300 height=69type=application/x-mplayer2 loop="-1" showcontrols="1"ShowDisplay="0" ShowStatusBar="1" autostart="1"></EMBED>11.棕色播放器代码:<EMBED style="FILTER: invert()" src=链接地址width=300 height=45 loop="-1" autostart="true"></EMBED>12.带边框背景的播放器代码:<TABLE borderColor=#4F3256 background=背景图片地址 border=1><TBODY><TR><TD style="FILTER: alpha(opacity=50,style=3)"> <P align=center><EMBED src=音乐网址width=300 height=25 type=audio/mpeg loop="-1" autostart="false" volume="0"></P></TD></TR></TBODY></TABLE>13.带背景图片的播放器代码:<TABLE borderColor=navy background=图片地址border=0><TBODY><TR><TD style="FILTER: alpha(opacity=80,style=3)"><P align=center><EMBED src=音乐网址width=300 height=45type=audio/mpeg loop="-1" autostart="1" volume="0"></P></TD></TR></TBODY></TABLE>12 13综合属性分析background=图片地址可以更换图片地址来实现改变播放器背景14.黄色闪光播放器代码:<TABLE style="BORDER-RIGHT: #000000 3px dashed; BORDER-TOP: #000000 3px dashed; BORDER-LEFT: #000000 3px dashed; BORDER-BOTTOM: #000000 3px dashed" cellSpacing=0cellPadding=0 bgColor=#00000><TBODY><TR><TD><TABLE borderColor=navybackground=/s-helpSite/domName/nxm/20041114123131568.gif border=0><TBODY><TR><TD style="FILTER: alpha(opacity=50,style=3)"> <P align=center><EMBED src=音乐网址width=400 height=35 type=audio/mpeg loop="-1" autostart="0" loop="-1"></P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>15.蓝色闪光播放器代码:<TABLE borderColor=#dee4fe cellSpacing=3 cellPadding=0 background=/UploadFile/2004-12/2004123023 101352.gif border=2><TBODY><TR><TD><TABLE align=centerborder=0><TBODY><TR><TD style="FILTER: alpha(opacity=60,style=3)"> <P align=center><EMBED style="FILTER: Gray" src=音乐网址width=400 height=35 type=audio/mpeg volume="0" autostart="false"loop="-1"></P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>16.带花边的播放器代码:<TABLE style="BORDER-RIGHT: #000000 3px dashed; BORDER-TOP: #000000 3px dashed; BORDER-LEFT: #000000 3px dashed; BORDER-BOTTOM: #000000 3px dashed" cellSpacing=0cellPadding=0 bgColor=#00000><TBODY><TR><TD><TABLE borderColor=#000000 align=center border=1><TBODY><TR><TD><P align=center><EMBED style="FILTER: Xray" src=音乐网址width=400 height=35 type=audio/mpeg volume="0" autostart="false"loop="-0"></P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>17.粉色花边播放器代码:<TABLE style="BORDER-RIGHT: #ff69b4 3px dotted; BORDER-TOP: #ff69b4 3px dotted; BORDER-LEFT: #ff69b4 3px dotted;BORDER-BOTTOM: #ff69b4 3px dotted" cellSpacing=0cellPadding=0 align=center bgColor=white><TBODY><TR><TD><TABLE borderColor=#ff69b4 align=center bgColor=#ffccf5border=2><TBODY><TR><TD style="FILTER: alpha(opacity=100,style=3)"> <P align=center><EMBED src=音乐网址width=300 height=25 type=audio/mpeg volume="0" autostart="false" loop="-0"></P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>18.显示文件标签灰色播放器代码:<DIV><EMBED style="FILTER: Gray()" src="链接地址" loop="-1" width=300 height=140 balance="true" showpositioncontrols="true" showtracker="true" showaudiocontrols="true" showcontrols="true"showstatusbar="true" showdisplay="true" displaysize="0" volume="100" autosize="true" autostart="true" animationatstart="true"transparentatstart="true"></EMBED></div>19显示文件标签棕色播放器代码:<DIV><EMBED style="FILTER: invert()" src="链接地址" loop="-1" width=300 height=140 balance="true" showpositioncontrols="true" showtracker="true" showaudiocontrols="true" showcontrols="true"showstatusbar="true" showdisplay="true" displaysize="0" volume="100" autosize="true" autostart="true" animationatstart="true"transparentatstart="true"></EMBED></div>20.显示文件标签黑色播放器代码:<DIV><EMBED style="FILTER: xray()" src="链接地址" loop="-1" width=300 height=140 balance="true" showpositioncontrols="true" showtracker="true" showaudiocontrols="true" showcontrols="true"showstatusbar="true" showdisplay="true" displaysize="0" volume="100" autosize="true" autostart="true" animationatstart="true"transparentatstart="true"></EMBED></div>21.连放播放器代码:<EMBED style="FILTER: Gray()" src=音乐网址width=500 height=35 type=audio/x-ms-wma controls="StatusBar,TACCtrl,ControlPanel"border="0" autostart="1" playcount="0" showtracker="1"volume="0"></EMBED>22.彩色播放器代码:<TABLE style="FONT-WEIGHT: normal; FONT-SIZE: 12px; COLOR: 00CCFF; FONT-STYLE: normal; FONT-FAMILY: Tahoma, Verdana; FONT-VARIANT: normal" cellSpacing=0 cellPadding=0 width=140border=0><TBODY><TR><TD style="BACKGROUND-COLOR:00CCFF"><EMBED style="FILTER: invert alpha(opacity=50)WIDTH: 140px; HEIGHT: 45px" src=音乐链接地址type=video/x-ms-asf autostart="FALSE" loop="-1"volume="0"></EMBED></TD></TR></TBODY></TABLE>本代码属性分析BACKGROUND-COLOR: 00CCFF播放器颜色代码可以更换以变换播放器颜色23.透明播放器代码代码:<TABLE style="FILTER: Alpha(Opacity=100, FinishOpacity=0, Style=2, StartX=20, StartY=40, FinishX=0, FinishY=0)xray(); WIDTH:200px; HEIGHT: 40px"><TBODY><TR><TD><EMBED style="BORDER-RIGHT: silver 1px solid; BORDER-TOP: silver 1px solid; BORDER-LEFT: silver 1px solid; BORDER-BOTTOM: silver 1px solid" src=音乐链接地址width=200 height=30 type=audio/x-mplayer2 loop="-1" autostart="0" volume="0"EnableContextMenu="0" showstatusbar="0"console="video"></TD></TR></TBODY></TABLE>。
Android视频播放器代码
Java代码部分:import java.io.IOException;import java.util.Random;import android.app.Activity;import android.content.Context;import NotFoundException;import android.media.AudioManager;import android.media.MediaPlayer;import android.media.MediaPlayer.OnBufferingUpdateListener;import android.media.MediaPlayer.OnCompletionListener;import android.os.Bundle;import android.os.Handler;import android.view.GestureDetector.OnGestureListener;import android.view.Gravity;import android.view.MotionEvent;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.View;import android.view.Window;import android.view.WindowManager;import android.view.View.OnClickListener;import android.view.View.OnTouchListener;import android.widget.ImageButton;import android.widget.LinearLayout;import youtParams;import android.widget.PopupWindow;import android.widget.SeekBar;import android.widget.SeekBar.OnSeekBarChangeListener;import android.widget.TextView;import android.widget.Toast;public class PlayVideo extends Activity implementsOnGestureListener,OnClickListener,// 监听OnBufferingUpdateListener,// 当网络缓冲数据流变化的时候唤起的播放事件OnCompletionListener,// 当媒体资源在播放的时候到达终点时唤起的播放事件MediaPlayer.OnPreparedListener,SurfaceHolder.Callback// 回调函数{// 视频高和宽int videoWidth;int videoHeight;// 按钮ImageButton play;//定义快进按钮ImageButton fastPlay;//定义快退按钮ImageButton fastBack;// 控制栏LinearLayout layout_control; LinearLayout layout_prograss; LinearLayout videoBack;// 用来播放媒体MediaPlayer mediaPlayer; // 显示媒体SurfaceView surView;// 用来控制SurfaceView SurfaceHolder surHolder;// 路径String path;// 是否是播放状态boolean boTing = true;//获取播放的位置int num;//点击屏幕次数int count;//第一次点击int firClick;//第二次点击int secClick;//通过flag判断是否全屏boolean flag;//播放进度条SeekBar seekbar;//显示时间组建TextView showTime;//播放文件的时间int minute;int second;//进度条进度int progress;//线程控制MyThread mt;//声音控制SeekBar sound;//声音进度int soundId;//显示音量TextView showSound;//接取拖动进度条int videoLength;boolean f = true;//播放尺寸//按钮隐藏时间int hint = 5000;//用于接取点击ListView位置int position;//声称随机数Random random;//通过buttonFlag判断按钮背景boolean buttonFlag = true;//显示视频总时间TextView allTime;TextView distant;PopupWindow popuWindow;View view;boolean popFlag ;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);this.getWindow().setFlags(youtParams.FLAG_FULLSCREEN, youtParams.FLAG_FULLSCREEN);setContentView(yout.video);// 产生对象view = this.getLayoutInflater().inflate(yout.popuwindow, null);//得到布局的IDvideoBack = (LinearLayout)view.findViewById(R.id.videoback);// 产生对象play = (ImageButton) view.findViewById(R.id.video_bu_bofang);layout_control = (LinearLayout)findViewById(yout_control);layout_prograss= (LinearLayout)findViewById(yout_prograss);seekbar = (SeekBar)view.findViewById(R.id.seekbar);showTime = (TextView)view.findViewById(R.id.showtime);fastPlay = (ImageButton)view.findViewById(R.id.fastplay);fastBack = (ImageButton)view.findViewById(R.id.fastback);sound = (SeekBar)view.findViewById(R.id.sound);showSound = (TextView)view.findViewById(R.id.showsound);surView = (SurfaceView) findViewById(R.id.surfaceview_1);allTime = (TextView)view.findViewById(R.id.alltime);distant = (TextView)findViewById(R.id.distant);surHolder = surView.getHolder();popuWindow = new PopupWindow(view, LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);// 设置回调函数surHolder.addCallback(this);// 设置风格surHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);//bu_boFang.setVisibility(View.INVISIBLE);// 设置按键监听play.setOnClickListener(this);//快进监听fastPlay.setOnClickListener(this);//快退按钮监听fastBack.setOnClickListener(this);//new随机数对象random = new Random();//接取到播放列表中点击的位置position = VideoList.position;try {//获取ShareActivity上下文VideoList.context = createPackageContext(".iotek", Context.CONTEXT_IGNORE_SECURITY);VideoList.share = VideoList.context.getSharedPreferences("setupadapter", VideoList.context.MODE_WORLD_READABLE);VideoList.editor = VideoList.share.edit();} catch (NameNotFoundException e) {e.printStackTrace();}//对读取的信息进行判断if (VideoList.share.getString("hinttime", "5秒").equals("5秒")) {hint = 5000;}if (VideoList.share.getString("hinttime", "5秒").equals("10秒")) {hint = 10000;}if (VideoList.share.getString("hinttime", "5秒").equals("15秒")) {hint = 15000;}//设置全屏播放surView.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {// TODO Auto-generated method stub// handler.sendEmptyMessageAtTime(0x11, 3000);if(MotionEvent.ACTION_DOWN == event.getAction()){count++;if(count == 1){new countClear().start();firClick = (int) System.currentTimeMillis();if (!popFlag) {// // // popuWindow = new PopupWindow(view, LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);popuWindow.showAtLocation(view, Gravity.BOTTOM, 0, 0);popFlag = true;handler.removeMessages(0x11);handler.sendEmptyMessageDelayed(0x11, hint);}//设置layout显示// if (!flag) {/* layout_control.setVisibility(View.VISIBLE);layout_prograss.setVisibility(View.VISIBLE);*///点击surfaceView延时3S发送信息/* handler.removeMessages(0x11);handler.sendEmptyMessageDelayed(0x11, hint);*/// }} else if (count == 2){secClick = (int) System.currentTimeMillis();if(secClick - firClick < 1000){flag = !flag;count = 0;}if(flag){distant.setHeight(0);surView.setLayoutParams(newyoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));surHolder.setFixedSize(480, 760);if (!popFlag) {// popuWindow = new PopupWindow(view, LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);popuWindow.showAtLocation(view, Gravity.BOTTOM, 0, 0);popFlag = true;handler.removeMessages(0x11);handler.sendEmptyMessageDelayed(0x11, hint);}// 开始播放// mePlayer.start();}else{if (VideoList.share.getString("size", "4:3").equals("4:3")) {surView.setLayoutParams(newyoutParams(LayoutParams.MATCH_PARENT, 360));surHolder.setFixedSize(480, 360);distant.setHeight(250);if (!popFlag) {// popuWindow = new PopupWindow(view, LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);popuWindow.showAtLocation(view,Gravity.BOTTOM, 0, 0);popFlag = true;handler.removeMessages(0x11);handler.sendEmptyMessageDelayed(0x11, hint);}}if (VideoList.share.getString("size", "4:3").equals("16:9")) {surView.setLayoutParams(newyoutParams(LayoutParams.MATCH_PARENT, 270));surHolder.setFixedSize(480, 270);distant.setHeight(250);if (!popFlag) {// popuWindow = new PopupWindow(view, LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);popuWindow.showAtLocation(view,Gravity.BOTTOM, 0, 0);popFlag = true;handler.removeMessages(0x11);handler.sendEmptyMessageDelayed(0x11, hint);}}}count = 0;firClick = 0;secClick = 0;}}return true;}});//监听进度条进度seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {videoLength = seekBar.getProgress();// int q = mediaPlayer.getCurrentPosition();mediaPlayer.seekTo(videoLength);//获取进度条当前的位置// int dest = seekBar.getProgress();//设置播放器当期的播放位置// mediaPlayer.seekTo(num);}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {//得到seekbar的进度/* seekbar.setProgress(progress);videoLength = seekBar.getProgress();*/}});sound.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { @Overridepublic void onStopTrackingTouch(SeekBar seekBar) {// TODO Auto-generated method stubint i= seekBar.getProgress();mediaPlayer.setVolume(i/100f,i/100f);}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {// TODO Auto-generated method stub}@Overridepublic void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {// TODO Auto-generated method stubint i= sound.getProgress();showSound.setText("音量:"+i);handler.removeMessages(0x11);handler.sendEmptyMessageDelayed(0x11, hint);}});}private void playVideo(){// 构建MediaPlayer对象mediaPlayer = new MediaPlayer();try {// 设置媒体文件路径mediaPlayer.setDataSource(VideoList.path);// 设置通过SurfaceView来显示画面mediaPlayer.setDisplay(surHolder);// 准备mediaPlayer.prepare();distant.setHeight(200);// 设置事件监听mediaPlayer.setOnBufferingUpdateListener(this);mediaPlayer.setOnCompletionListener(this);mediaPlayer.setOnPreparedListener(this);mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);seekbar.setMax(mediaPlayer.getDuration());//设置当前播放音量最大soundId = sound.getProgress();mediaPlayer.setVolume(soundId, soundId);showSound.setText("音量:"+soundId);mt = new MyThread();mt.start();handler.sendEmptyMessage(0x13);int n = mediaPlayer.getDuration();//获得持续时间seekbar.setMax(n);n = n/1000;int m = n/60;int h = m/60;int s = n%60;m = m%60;allTime.setText(String.format("影片长度:"+"%02d:%02d:%02d", h,m,s));} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalStateException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}// MediaPlayer.OnPreparedListenerpublic void onCompletion(MediaPlayer mp) {handler.sendEmptyMessage(0x14);}// MediaPlayer.OnPreparedListener// 这时能确保player处于Prepared状态,触发start是最合适的public void onPrepared(MediaPlayer mp) {if (VideoList.share.getString("size", "4:3").equals("4:3")) {surView.setLayoutParams(newyoutParams(LayoutParams.MATCH_PARENT, 360));// 设置播放视频的宽度和高度surHolder.setFixedSize(480, 360);// 开始播放mediaPlayer.start();}if (VideoList.share.getString("size", "4:3").equals("16:9")) {// 设置播放视频的宽度和高度surView.setLayoutParams(newyoutParams(LayoutParams.MATCH_PARENT, 270));surHolder.setFixedSize(480, 270);// 开始播放mediaPlayer.start();}}public void surfaceCreated(SurfaceHolder holder) {playVideo();}public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}protected void onDestroy(){super.onDestroy();if (mediaPlayer != null){mediaPlayer.release();mediaPlayer = null;//关闭cursor// VideoList.cursor.close();//关闭数据库// VideoList.db.close();//改变线程循环条件f = false;handler.removeMessages(0x11);popuWindow.dismiss();}}public void onClick(View v) {if(v==play){//如果正在播放if (buttonFlag) {play.setImageResource(R.drawable.pause_1);mediaPlayer.pause();buttonFlag = false;}else{play.setImageResource(R.drawable.play_1);mediaPlayer.start();buttonFlag = true;}handler.removeMessages(0x11);handler.sendEmptyMessageDelayed(0x11, hint);}if (v == fastPlay) {int i = mediaPlayer.getCurrentPosition()+5000;mediaPlayer.seekTo(i);seekbar.setProgress(i);handler.removeMessages(0x11);handler.sendEmptyMessageDelayed(0x11, hint);}if (v == fastBack) {int i = mediaPlayer.getCurrentPosition()-5000;mediaPlayer.seekTo(i);seekbar.setProgress(i);handler.removeMessages(0x11);handler.sendEmptyMessageDelayed(0x11, hint);}}Handler handler = new Handler(){public void handleMessage(android.os.Message msg) {if (msg.what == 0x11) {if(popuWindow.isShowing()&&f){popuWindow.dismiss();popFlag = false;}////启动后设置layout隐藏/* layout_control.setVisibility(View.INVISIBLE);layout_prograss.setVisibility(View.INVISIBLE);*/}if (msg.what == 0x12) {if(mediaPlayer!=null){num = mediaPlayer.getCurrentPosition();}seekbar.setProgress(num);// 为时分秒赋值num = num/1000;int minute = num/60;int hour = minute/60;int second = num%60;minute = minute%60;/* if (mediaPlayer!=null) {seekbar.setProgress(mediaPlayer.getCurrentPosition());}*/showTime.setText(String.format("播放进度:"+"%02d:%02d:%02d", hour,minute,second));// handler.sendEmptyMessage(0x12);}if (msg.what == 0x14) {if (VideoList.share.getString("playstyle","顺序播放").equals("单曲循环")) {//释放播放的视频mediaPlayer.release();//游标移动到点击ListView位置// VideoList.cursor.moveToPosition(VideoList.position);//在数据库中取出ListView点击的路径VideoList.path = VideoList.cursor.getString(1);//播放视频playVideo();}if (VideoList.share.getString("playstyle", "顺序播放").equals("顺序播放")) { //释放当前的MediaPlayermediaPlayer.release();//自加position ++;if (position==VideoList.videoList.getCount()) {position = 0;}//游标向下移动VideoList.cursor.moveToPosition(position);//取出移动后的视频路径VideoList.path = VideoList.cursor.getString(1);//播放视频playVideo();}if (VideoList.share.getString("playstyle", "顺序播放").equals("随机播放")) { //释放播放的视频mediaPlayer.release();int r = random.nextInt(VideoList.videoList.getCount()-1);VideoList.cursor.moveToPosition(r);//在数据库中取出ListView点击的路径VideoList.path = VideoList.cursor.getString(1);//播放视频playVideo();}}};};class MyThread extends Thread{@Overridepublic void run() {handler.sendEmptyMessageDelayed(0x11, hint);// if (mePlayer.getDuration()+"".equals("0") ) {while (f) {try {sleep(1000);handler.sendEmptyMessage(0x12);}catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}// }}}class countClear extends Thread{@Overridepublic void run() {try {sleep(1000);//睡一秒后count清0count = 0;} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub}@Overridepublic void onBufferingUpdate(MediaPlayer mp, int percent) { // TODO Auto-generated method stub}@Overridepublic boolean onDown(MotionEvent e) {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {// TODO Auto-generated method stubreturn false;}@Overridepublic void onLongPress(MotionEvent e) {// TODO Auto-generated method stub}@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {// TODO Auto-generated method stubreturn false;}@Overridepublic void onShowPress(MotionEvent e) {// TODO Auto-generated method stub}@Overridepublic boolean onSingleTapUp(MotionEvent e) {// TODO Auto-generated method stubreturn false;}}配置文件:Video.xml文件<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:id="@+id/videoback"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="#00000000"android:id="@+id/distant"/><SurfaceViewandroid:id="@+id/surfaceview_1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="300px"android:layout_gravity="center_horizontal" /></LinearLayout>Popuwindow.xml配置文件<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:id="@+id/videoback"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><LinearLayoutandroid:id="@+id/layout_prograss"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="bottom"android:orientation="vertical" ><SeekBarandroid:id="@+id/seekbar"android:layout_width="match_parent"android:layout_height="8px"android:progressDrawable="@drawable/seekbar"android:thumb="@drawable/seekbutton"android:progress="0" /><TextViewandroid:id="@+id/showtime"android:layout_width="match_parent"android:layout_height="wrap_content"/><TextViewandroid:id="@+id/alltime"android:layout_width="match_parent"android:layout_height="wrap_content"/><SeekBarandroid:id="@+id/sound"android:layout_height="8px"android:progressDrawable="@drawable/seekbar"android:thumb="@drawable/seekbutton"android:progress="50" /><TextViewandroid:id="@+id/showsound"android:layout_width="match_parent"android:layout_height="wrap_content"/></LinearLayout><LinearLayoutandroid:id="@+id/layout_control"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="bottom"android:orientation="horizontal" ><ImageButtonandroid:id="@+id/fastback"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:background="#00000000"android:scaleType="fitCenter"android:src="@drawable/stepback" /><ImageButtonandroid:id="@+id/video_bu_bofang"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:background="#00000000"android:scaleType="fitCenter"android:src="@drawable/play_1" /><ImageButtonandroid:id="@+id/fastplay"android:layout_width="wrap_content"android:layout_weight="1"android:background="#00000000"android:scaleType="fitCenter"android:src="@drawable/stepfor" /> </LinearLayout></LinearLayout>。
FLASH视频播放器代码
<P align=center><OBJECTcodeBase="/pub/shockwave/cabs/flash/swflash.cab#version=10, 0,32,18" classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 width=485 align=middle height=370><PARAM NAME="_cx" V ALUE="12832"><PARAM NAME="_cy" V ALUE="9789"><PARAM NAME="FlashVars" V ALUE=""><PARAM NAME="Movie" V ALUE="/images/sp_player.swf?vcastr_file=/Files/adminfiles/ywy/2011/11-4/10/2011110410261 287598.flv&IsAutoPlay=1"><PARAM NAME="Src" V ALUE="/images/sp_player.swf?vcastr_file=/Files/adminfiles/ywy/2011/11-4/10/2011110410261 287598.flv&IsAutoPlay=1"><PARAM NAME="WMode" V ALUE="Window"><PARAM NAME="Play" V ALUE="0"><PARAM NAME="Loop" V ALUE="-1"><PARAM NAME="Quality" V ALUE="High"><PARAM NAME="SAlign" V ALUE="LT"><PARAM NAME="Menu" V ALUE="0"><PARAM NAME="Base" V ALUE=""><PARAM NAME="AllowScriptAccess" V ALUE=""><PARAM NAME="Scale" V ALUE="NoScale"><PARAM NAME="DeviceFont" V ALUE="0"><PARAM NAME="EmbedMovie" V ALUE="0"><PARAM NAME="BGColor" VALUE=""><PARAM NAME="SWRemote" V ALUE=""><PARAM NAME="MovieData" V ALUE=""><PARAM NAME="SeamlessTabbing" V ALUE="1"><PARAM NAME="Profile" V ALUE="0"><PARAM NAME="ProfileAddress" V ALUE=""><PARAM NAME="ProfilePort" VALUE="0"><PARAM NAME="AllowNetworking" V ALUE="all"><PARAM NAME="AllowFullScreen" V ALUE="true"></OBJECT><BR><FONT style="FONT-SIZE: 10px" color=#808080>(如无法播放或加载缓慢建议升级FLASH最高版本<A href="http://211.98.168.146:9203/18D311600D889F1A00A0B1DFAAA8170ADF3BA8548503C 290//get/flashplayer/current/install_flash_player_ax.exe" target=_blank>点击下载</A>)</FONT></P>。
VLC源代码分析完整版
VLC源代码分析完整版VLC(VideoLAN Client)是一个开源的媒体播放器和框架,它能够播放各种音视频格式,可以在多个平台上运行,包括Windows、Mac、Linux和移动设备等。
VLC的源代码是公开的,任何人都可以查看和修改。
首先,VLC的源代码包含了多个模块,包括音频、视频、网络、输入输出和用户界面等。
这些模块相互配合,实现了VLC播放器的各种功能。
其中,音频和视频模块负责解码和播放音视频文件,网络模块负责获取音视频流并进行传输,输入输出模块负责处理用户输入和输出。
音频和视频模块的关键函数是解码函数,它们负责将音视频文件解码成原始的音频和视频数据。
VLC支持多种音视频编码格式,因此解码函数需要根据文件的编码格式选择合适的解码器,并将解码后的数据传递给播放模块进行播放。
在音频模块中,还包括声音输出函数,它负责将解码后的音频数据传递给音频输出接口,以实现音频的播放。
网络模块负责获取音视频流并进行传输。
它使用了多种网络协议,包括HTTP、RTSP、RTP和UDP等。
网络模块首先根据URL获取音视频流的数据,然后进行传输。
在传输过程中,网络模块会处理数据包的传输错误和丢失等问题,以保证音视频数据的稳定性和准确性。
输入输出模块负责处理用户输入和输出。
它包括用户界面和控制台输入等。
用户界面负责显示VLC播放器的用户界面,并接收用户的操作指令。
控制台输入负责从命令行接收用户的命令,并解析执行。
这些模块将用户输入的指令传递给其他模块进行处理,以达到用户期望的功能。
除了以上核心模块,VLC的源代码还包括了许多其他辅助模块,如字幕、滤镜、效果和插件等。
这些模块提供了额外的功能和特性,可以在播放过程中应用于音视频数据,以实现字幕显示、图像滤镜和音效处理等效果。
总之,VLC的源代码是一个庞大而复杂的系统,包括多个模块和功能特性。
通过对源代码的分析,我们可以了解VLC播放器是如何工作的,能够播放各种音视频格式,并具有丰富的功能和特性。
FlV视频播放器代码
FlV视频播放器代码它就是Flv播放器加Flv视频!Flv播放器一般是Flash+ActionScript编写的程序,或则Flash加Java编写的程序。
具体编辑方法,有兴趣的朋友可以去网上查。
因为编写的程序有所改动,所以使用方法不尽相同,但是原理都是一样的。
这里只是介绍几个例子,现在把代码公布一下,大家可以参考着做,也可以把你喜欢的视频连接上去。
播放器一:代码如下:<embedsrc=/WhitePlayer.swf?id=/20/88/2 86c.flv" type="application/x-shockwave-flash" wmode="transparent" quality="high"width="450" height="380" autostart="true"></embed>其中红色的部分可以替换成你喜欢的视频,但是必须是Flv文件,其他文件不支持!!预览结果:播放器二:代码如下:<embedsrc="/lzqblogflvplayer.swf?vcastr_file=http://vnc1.6rooms. com/93/4f/d144.flv|/20/88/286c.flv|/13/5d/ b1bf.flv" showMovieInfo=0 pluginspage="/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" quality="high" width="458" height="350"></embed>预览结果:Flv文件转换方法参考:将多种格式视频文件转换成FLV格式如何获取真实的Flv视频网址方法参考:如何获得Flv视频的网址及如何下载。
gsyvideoplayer原理
gsyvideoplayer原理GSYVideoPlayer原理解析GSYVideoPlayer是一款基于Android平台的强大视频播放器,具有多样化的功能和良好的性能。
本文将从浅入深解释GSYVideoPlayer的相关原理。
1. GSYVideoPlayer的基本原理GSYVideoPlayer采用了基于Android原生MediaPlayer框架的封装方式,实现了完善的视频播放功能。
其基本原理如下:•GSYVideoPlayer通过创建MediaPlayer对象进行视频的初始化、播放、暂停等操作。
•GSYVideoPlayer提供了封装好的控制视图,包括进度条、播放按钮、全屏等,以便用户对视频进行操作。
•GSYVideoPlayer通过监听MediaPlayer的状态变化,实时更新控制视图的状态,比如播放进度、播放状态等。
•GSYVideoPlayer还提供了丰富的功能,比如倍速播放、画面旋转、视频截图等,通过对MediaPlayer的相关接口进行封装和扩展。
2. GSYVideoPlayer实现视频播放GSYVideoPlayer的视频播放主要包括以下几个步骤:1.创建MediaPlayer对象:GSYVideoPlayer在初始化时会创建一个MediaPlayer对象,用于控制视频的播放。
2.设置视频源:通过调用MediaPlayer的setDataSource()方法,指定要播放的视频文件的路径或URL。
3.准备播放:通过调用MediaPlayer的prepare()方法,使MediaPlayer进入准备状态,准备开始播放。
4.开始播放:通过调用MediaPlayer的start()方法,开始播放视频。
5.控制播放:通过监听MediaPlayer的状态变化,如播放进度、播放状态等,来控制视频的播放和暂停。
3. GSYVideoPlayer封装的控制视图GSYVideoPlayer封装了一套控制视图,方便用户对视频进行操作。
vlc源码分析详解
C语言基于GTK+Libvlc实现的简易视频播放器 (一)
playpause_button =
gtk_button_new_from_icon_name("media-playback-start",
GTK_ICON_SIZE_BUTTON);
stop_button = gtk_button_new_from_icon_name("media-playback-stop",
GTK+虽然是用 C 语言写的,但是您可以使用你熟悉的语言来使用 GTK+,因为 GTK+已经被绑定到几乎所有流行的语言上,如:C++,PHP, Guile,Perl, Python, TOM, Ada95, Objective C, Free Pascal, and Eiffel
使用 GTK+的优秀应用程序:
filemenu = gtk_menu_new(); gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), filemenu_openitem);
// 将 filemenu 设置为上一级 fileitem 的子菜单,然后将 fileitem 添加进 menubar,最后将 menubar 放置进 vbox
//创建一个方向垂直间距为 0 的 box 容器,并添加到前面创建的 window 中 vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
flv播放代码
怎么添加FLV视频
在文章信息页添加一个FLV视频。首页在后台管理 >> 系统设置 >> 内容模型管理中选择文章模型中字段管理列表,修改字段名为:Content,字段别名为:文章内容的字段。在允许上传的媒体类型中增加flv这种类型,如图所示:
这段内容中的vcastr22.swf改成对应新的FLV播放器文件名,vcastr_file更改成对应的参数名。
可扩展性
系统目前没有扩展名为mov文件类型的播放器。首先可以在网上下载一个支持mov类型的播放器,把它添加到\Editor\Editor\plugins文件夹内,在\Editor\Editor\dialog\fck_flash文件夹中fck_flash.js文件中增加
<Player id="Flv" Extension="flv" >
<![CDATA[
<embed src="../Editor/Editor/plugins/vcastr22.swf?vcastr_file=" type="application/x-shockwave-flash" showmovieinfo="0" allowfullscreen="true" quality="high" wmode="transparent" play="true" loop="true" menu="true"></embed>
网页视频播放器代码大全,格式包括rm,rmvb,wmv等道
收集最常用的网页中嵌入视频代码大全各种各样的网页视频播放器代码.网页中嵌入视频代码综合完全版1.avi 格式代码片断如下:程序代码:ltobjectidquotvideoquotwidthquot400quotheightquot200quotborderquot0quotclassidq uotclsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFAquotgt ltparamnamequotShowDisplayquotvaluequot0quotgt ltparamnamequotShowControlsquotvaluequot1quotgt ltparamnamequotAutoStartquotvaluequot1quotgt ltparamnamequotAutoRewindquotvaluequot0quotgt ltparamnamequotPlayCountquotvaluequot0quotgt ltparamnamequotAppearancevaluequot0valuequotquotquotgt ltparamnamequotBorderStylevaluequot0valuequotquotquotgt ltparamnamequotMovieWindowHeightquotvaluequot240quotgt ltparamnamequotMovieWindowWidthquotvaluequot320quotgt ltparamnamequotFileNamequotvaluequot/Mbar.aviquotgtltembedwidthquot400quotheigh tquot200quotborderquot0quotshowdisplayquot0quotshowcontrolsquot1quotautostartquot 1quotautorewindquot0quotplaycountquot0quotmoviewindowheightquot240quotmoviewi ndowwidthquot320quotfilenamequot/Mbar.aviquotsrcquotMbar.aviquotgt lt/embedgtlt/objectgt2.mpg 格式代码片断如下:程序代码:ltobjectclassidquotclsid:05589FA1-C356-11CE-BF01-00AA0055595AquotidquotActi veMovie1quotwidthquot239quotheightquot250quotgt ltparamnamequotAppearancequotvaluequot0quotgt ltparamnamequotAutoStartquotvaluequot-1quotgt ltparamnamequotAllowChangeDisplayModequotvaluequot-1quotgt ltparamnamequotAllowHideDisplayquotvaluequot0quotgt ltparamnamequotAllowHideControlsquotvaluequot-1quotgt ltparamnamequotAutoRewindquotvaluequot-1quotgt ltparamnamequotBalancequotvaluequot0quotgt ltparamnamequotCurrentPositionquotvaluequot0quotgt ltparamnamequotDisplayBackColorquotvaluequot0quotgt ltparamnamequotDisplayForeColorquotvaluequot16777215quotgt ltparamnamequotDisplayModequotvaluequot0quotgt ltparamnamequotEnabledquotvaluequot-1quotgt ltparamnamequotEnableContextMenuquotvaluequot-1quotgt ltparamnamequotEnablePositionControlsquotvaluequot-1quotgt ltparamnamequotEnableSelectionControlsquotvaluequot0quotgt ltparamnamequotEnableTrackerquotvaluequot-1quotgt ltparamnamequotFilenamequotvaluequot/mpeg/halali.mpgquotvaluetypequotrefquotgt ltparamnamequotFullScreenModequotvaluequot0quotgt ltparamnamequotMovieWindowSizequotvaluequot0quotgt ltparamnamequotPlayCountquotvaluequot1quotgt ltparamnamequotRatequotvaluequot1quotgt ltparamnamequotSelectionStartquotvaluequot-1quotgt ltparamnamequotSelectionEndquotvaluequot-1quotgt ltparamnamequotShowControlsquotvaluequot-1quotgt ltparamnamequotShowDisplayquotvaluequot-1quotgt ltparamnamequotShowPositionControlsquotvaluequot0quotgtltparamnamequotShowTrackerquotvaluequot-1quotgt ltparamnamequotVolumequotvaluequot-480quotgt lt/objectgt3.smi 格式代码片断如下:程序代码:ltOBJECTidRVOCXclassidclsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFAwi dth240height180gt ltparamnamequot_ExtentXquotvaluequot6350quotgt ltparamnamequot_ExtentYquotvaluequot4763quotgt ltparamnamequotAUTOSTARTquotvaluequot-1quotgt ltparamnamequotSHUFFLEquotvaluequot0quotgt ltparamnamequotPREFETCHquotvaluequot0quotgt ltparamnamequotNOLABELSquotvaluequot-1quotgt ltparamnamequotSRCquotvaluequotrm.rmquotgt ltparamnamequotCONTROLSquotva ltparamnamequotCONSOLEquotvaluequotconsole1quotgt ltparamnamequotLOOPquotvaluequot0quotgt ltparamnamequotNUMLOOPquotvaluequot0quotgt ltparamnamequotCENTERquotvaluequot0quotgt ltparamnamequotMAINTAINASPECTquotvaluequot0quotgtltparamnamequotBACKGR OUNDCOLORquotvaluequot000000quotgtltembedsrcquotreal.smiquottypequotaudio/x-pn-realaudio-pluginquotconsolequotConsole1quotcontrolsquotImageWindowquotheightq uot180quotwidthquot240quotautostartquottquot您好,欢迎访问阿里西西!注册或登陆建站素材加入收藏设为首页阿里论坛网页特效电子书籍源码下载网站首页文章下载酷站论坛书籍网页书籍编程书籍数据库服务器设计运营素材模板图标图片动画字体库源码企业商城行业门户办公建站特效广告代码菜单时间文字窗口图像教程前端技术编程开发数据库服务器脚本动画下载软件工具编程图像服务器站长优化盈利经验推广新闻域名酷站韩国酷站欧美中国收录查询旧版阿里西西FTP 贵宾资源史上最全SEO 资料韩国网页设计大师商业网站源码FLASH 整站源码全年网站源码打包合辑5 元一张DVD 网页模板前端首页HTML 基础XHTML 标准XML 教程CSS 教程脚本技术动画媒体界面设计开发文档AJAX 教程您的位置:阿里西西gt 前端技术gt 动画媒体gt 正文分类条件HTML 基础XHTML 标准XML 教程CSS 教程脚本技术动画媒体界面设计相关文档AJAX 教程8 顶网页视频播放器代码大全互联网Alixixi 2009-08-07 点击:13620 字体:大中小我要评论收集最常用的网页中嵌入视频代码大全各种各样的网页视频播放器代码.-网页中嵌入视频代码综合完全版1.avi 格式代码片断如下:程序代码ltobjectidquotvideoquotwidthquot400quotheightquot200quotborderquot0quotclassidquot clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFAquotgt ltparamnamequotShowDisplayquotvaluequot0quotgt ltparamnamequotShowControlsquotvaluequot1quotgt ltparamnamequotAutoStartquotvaluequot1quotgt ltparamnamequotAutoRewindquotvaluequot0quotgt ltparamnamequotPlayCountquotvaluequot0quotgt ltparamnamequotAppearancevaluequot0valuequotquotquotgt ltparamnamequotBorderStylevaluequot0valuequotquotquotgt ltparamnamequotMovieWindowHeightquotvaluequot240quotgt ltparamnamequotMovieWindowWidthquotvaluequot320quotgtltparamnamequotFileNamequotvaluequot/Mbar.aviquotgtltembedwidthquot400quotheigh tquot200quotborderquot0quotshowdisplayquot0quotshowcontrolsquot1quotautostartquot 1quotautorewindquot0quotplaycountquot0quotmoviewindowheightquot240quotmoviewi ndowwidthquot320quotfilenamequot/Mbar.aviquotsrcquotMbar.aviquotgt lt/embedgtlt/objectgt 2.mpg 格式代码片断如下:程序代码ltobjectclassidquotclsid:05589FA1-C356-11CE-BF01-00AA0055595AquotidquotActive Movie1quotwidthquot239quotheightquot250quotgt ltparamnamequotAppearancequotvaluequot0quotgt ltparamnamequotAutoStartquotvaluequot-1quotgt lt ltparamnamequotAllowHideDisplayquotvaluequot0quotgt ltparamnamequotAllowHideControlsquotvaluequot-1quotgtltparamnamequotAutoRewin dquotvaluequot-1quotgtltparamnamequotBalancequotvaluequot0quotgtltparamnamequot CurrentPositionquotvaluequot0quotgtltparamnamequotDisplayBackColorquotvaluequot0 quotgtltparamnamequotDisplayForeColorquotvaluequot16777215quotgtltparamnamequo tDisplayModequotvaluequot0quotgtltparamnamequotEnabledquotvaluequot-1quotgtltpar amnamequotEnableContextMenuquotvaluequot-1quotgtltparamnamequotEnablePosition Controlsquotvaluequot-1quotgtltparamnamequotEnableSelectionControlsquotvaluequot0 quotgtltparamnamequotEnableTrackerquotvaluequot-1quotgtltparamnamequotFilenameq uotvaluequot/mpeg/halali.mpgquotvaluetypequotrefquotgtltparamnamequotFullScreenM odequotvaluequot0quotgtltparamnamequotMovieWindowSizequotvaluequot0quotgtltpar amnamequotPlayCountquotvaluequot1quotgtltparamnamequotRatequotvaluequot1quotgt ltparamnamequotSelectionStartquotvaluequot-1quotgtltparamnamequotSelectionEndquot valuequot-1quotgtltparamnamequotShowControlsquotvaluequot-1quotgtltparamnamequo tShowDisplayquotvaluequot-1quotgtltparamnamequotShowPositionControlsquotvaluequ ot0quotgtltparamnamequotShowTrackerquotvaluequot-1quotgt ltparamnamequotVolumequotvaluequot-480quotgt lt/objectgt 3.smi 格式代码片断如下:程序代码ltOBJECTidRVOCXclassidclsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFAwidth 240height180gt ltparamnamequot_ExtentXquotvaluequot6350quotgt ltparamnamequot_ExtentYquotvaluequot4763quotgt ltparamnamequotAUTOSTARTquotvaluequot-1quotgt ltparamnamequotSHUFFLEquotvaluequot0quotgt ltparamnamequotPREFETCHquotvaluequot0quotgt ltparamnamequotNOLABELSquotvaluequot-1quotgt ltparamnamequotSRCquotvaluequotrm.rmquotgt ltparamnamequotCONTROLSquotvaluequotImageWindowquotgt ltparamnamequotCONSOLEquotvaluequotconsole1quotgt ltparamnamequotLOOPquotvaluequot0quotgt ltparamnamequotNUMLOOPquotvaluequot0quotgt ltparamnamequotCENTERquotvaluequot0quotgt ltparamnamequotMAINTAINASPECTquotvaluequot0quotgtltparamnamequotBACKGR OUNDCOLORquotvaluequot000000quotgtltembedsrcquotreal.smiquottypequotaudio/x-pn-realaudio-pluginquotconsolequotConsole1quotcontrolsquotImageWindowquotheightq uot180quotwidthquot240quotautostartquottruequotgtlt/OBJECTgt 4.rm 格式代码片断如下:程序代码ltOBJECTIDvideo1CLASSIDquotclsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFAquotHEIGHT288WIDTH352gt ltparamnamequot_ExtentXquotvaluequot9313quotgt ltparamnamequot_ExtentYquotvaluequot7620quotgt ltparamnamequotAUTOSTARTquotvaluequot0quotgt ltparamnamequotSHUFFLEquotvaluequot0quotgt ltparamnamequotPREFETCHquotvaluequot0quotgt ltparamnamequotNOLABELSquotvaluequot0quotgt ltparamnamequotSRCquotvaluequotrtsp://203...35/vod/dawan-a.rmquotgt ltparamnamequotCONTROLSquotvaluequotImageWindowquotgt ltparamnamequotCONSOLEquotvaluequotClip1quotgt ltparamnamequotLOOPquotvaluequot0quotgt ltparamnamequotNUMLOOPquotvaluequot0quotgt ltparamnamequotCENTERquotvaluequot0quotgt ltparamnamequotMAINTAINASPECTquotvaluequot0quotgt ltparamnamequotBACKGROUNDCOLORquotvaluequot000000quotgtltembedSRCtylt/OBJECTgt 5.wmv 格式代码片断如下:程序代码ltobjectidquotNSPlayquotwidth200height180classidquotCLSID:22d6f312-b0f6-11d0-94a b-0080c74c7e95quotcodebasequot/activex/controls/mplayer/ en/nsmp2inf.cabVersion645715quotstandbyquotLoadingMicrosoftWindowsMediaPlayer components...quottypequotapplication/x-oleobjectquotalignquotrightquothspacequot5quo tgt ltparamnamequotAutoRewindquotvalue1gt ltparamnamequotFileNamequotvaluequot/blog/.wmvquotgt ltparamnamequotShowControlsquotvaluequot1quotgt ltparamnamequotShowPositionControlsquotvaluequot0quotgt ltparamnamequotShowAudioControlsquotvaluequot1quotgt ltparamnamequotShowTrackerquotvaluequot0quotgt ltparamnamequotShowDisplayquotvaluequot0quotgt ltparamnamequotShowStatusBarquotvaluequot0quotgt ltparamnamequotShowGotoBarquotvaluequot0quotgt ltparamnamequotShowCaptioningquotvaluequot0quotgt ltparamnamequotAutoStartquotvalue1gt ltparamnamequotVolumequotvaluequot-2500quotgt ltparamnamequotAnimationAtStartquotvaluequot0quotgt ltparamnamequotTransparentAtStartquotvaluequot0quotgt ltparamnamequotAllowChangeDisplaySizequotvaluequot0quotgt ltparamnamequotAllowScanquotvaluequot0quotgt ltparamnamequotEnableContextMenuquotvaluequot0quotgt ltparamnamequotClickToPlayquotvaluequot0quotgt lt/objectgt 6.wma 格式放在ltbodygt里面。
一个JAVA播放器的源代码
import java.io.*;
import java.util.*;//为了导入Vector
//import com.sun.java.swing.plaf.windows.*;
public class MediaPlayer extends JFrame implements ActionListener,Runnable
MediaPlayer.java
----------------------------------------------------------------------------
//程序主文件
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
}
catch(Exception e)
{
e.printStackTrace();
} *///此段代码使执行速度大大降低
bar=new JMenuBar();
setJMenuBar(bar);//此两行创建菜单栏并放到此窗口程序
//bar.setBackground(new Color(48,91,183));
index = list.locationToIndex(e.getPoint());//将鼠标坐标转化成list中的选项指针
createPlayer2();
//System.out.println("Double clicked on Item " + index);,此是测试的时候加的
list.setBackground(new Color(40,40,95));
windows 编译vlc源码
windows 编译vlc源码摘要:1.介绍VLC 媒体播放器2.编译VLC 的步骤3.编译过程中遇到的问题及解决方案4.成功编译VLC 后的体验正文:VLC 媒体播放器是一款开源的、跨平台的多媒体播放器,它可以播放各种格式的音频和视频文件,因其强大的功能和稳定性而受到广泛欢迎。
近日,有位用户想要在Windows 系统上编译VLC 源码,下面将详细介绍编译过程。
首先,用户需要从VLC 的官方GitHub 仓库下载源码。
进入仓库页面,选择适合Windows 系统的源码版本,然后点击右上角的绿色按钮“Clone or download”,选择“Download ZIP”将源码压缩包下载到本地。
解压源码压缩包后,打开命令提示符(CMD),切换到源码目录。
然后,在命令提示符中输入以下命令来配置编译环境:```cmake -G "Visual Studio 16 2019" -A x64 -S.-B build64```注意,这里的命令是针对Visual Studio 2019 的,如果用户的编译环境是其他版本,需要相应地修改。
接下来,在命令提示符中输入以下命令来生成Visual Studio 解决方案:```cmake --build.--config Release --target VideoLAN.sln```然后,打开生成的Visual Studio 解决方案,在解决方案资源管理器中找到“VideoLAN.sln”,右键点击并选择“Rebuild Solution”。
编译过程中可能会遇到一些问题,例如缺少某些依赖库或者编译器版本过低等。
对于这些问题,用户可以在网上查找相应的解决方案,或者尝试升级编译器和依赖库。
当编译完成后,用户可以在源码目录下的“build64”文件夹中找到编译好的VLC 播放器。
运行该播放器,可以体验到流畅、高清的媒体播放效果。
总之,在Windows 系统上编译VLC 源码需要经过几个简单的步骤,包括下载源码、配置编译环境、生成Visual Studio 解决方案和编译。
ckplayer整合源码
ckplayer整合源码摘要:1.CKPlayer 简介2.CKPlayer 的功能特点3.CKPlayer 的整合源码方法4.CKPlayer 整合源码的优点5.总结正文:1.CKPlayer 简介CKPlayer 是一款基于Web 的在线视频播放器,其主要特点是支持多种格式的视频文件播放,包括但不限于MP4、AVI、WMV、MOV 等。
除此之外,CKPlayer 还具有高清晰度、流畅度、低延迟等优点,为用户提供优质的在线视频观看体验。
2.CKPlayer 的功能特点(1)支持多种视频格式:CKPlayer 支持多种主流的视频格式,包括MP4、AVI、WMV、MOV 等,无需安装额外的插件,即可实现在线观看。
(2)高清晰度:CKPlayer 支持高清视频播放,让用户可以享受到高清晰度的视频内容。
(3)流畅度:CKPlayer 采用优化的播放算法,确保视频播放过程中的流畅度,减少视频卡顿现象。
(4)低延迟:CKPlayer 具有低延迟的特点,用户可以实现实时互动,提高观看体验。
3.CKPlayer 的整合源码方法(1)下载并解压CKPlayer 源码:首先需要从官方网站下载CKPlayer 的源代码,并进行解压。
(2)研究CKPlayer 源码:阅读CKPlayer 的源代码,了解其主要功能和实现原理。
(3)整合CKPlayer 源码:根据自身需求,对CKPlayer 的源代码进行修改和优化,以满足特定场景下的需求。
4.CKPlayer 整合源码的优点(1)定制化:通过整合源码,可以根据自身需求对CKPlayer 进行定制化开发,满足特定场景下的需求。
(2)优化性能:通过对CKPlayer 源码的优化,可以提高视频播放的性能,包括清晰度、流畅度、延迟等方面。
(3)提高用户体验:整合源码后,可以提供更符合用户需求的视频播放器,提高用户体验。
5.总结CKPlayer 作为一款功能强大、性能优越的在线视频播放器,其整合源码的方法具有很大的灵活性,可以根据用户需求进行定制化开发,提高视频播放的性能和用户体验。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SoundView.java
package com.zh_weir.videoplayer;
import com.zh_weir.videoplayer.R;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.media.AudioManager;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
public class SoundView extends View{
public final static String TAG = "SoundView";
private Context mContext;
private Bitmap bm , bm1;
private int bitmapWidth , bitmapHeight;
private int index;
private OnVolumeChangedListener mOnVolumeChangedListener;
private final static int HEIGHT = 11;
public final static int MY_HEIGHT = 163;
public final static int MY_WIDTH = 44;
public interface OnVolumeChangedListener{
public void setYourVolume(int index);
}
public void setOnVolumeChangeListener(OnVolumeChangedListener l){ mOnVolumeChangedListener = l;
}
public SoundView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle);
mContext = context;
// TODO Auto-generated constructor stub
init();
}
public SoundView(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
// TODO Auto-generated constructor stub
init();
}
public SoundView(Context context) {
super(context);
mContext = context;
// TODO Auto-generated constructor stub
init();
}
private void init(){
bm = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.sound_line);
bm1 = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.sound_line1);
bitmapWidth = bm.getWidth();
bitmapHeight = bm.getHeight();
//setIndex(5);
AudioManager am = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
setIndex(am.getStreamVolume(AudioManager.STREAM_MUSIC));
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
int y = (int) event.getY();
int n = y * 15 / MY_HEIGHT;
setIndex(15-n);
Log.d(TAG, "setIndex: "+(15-n));
return true;
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
int reverseIndex = 15 - index;
for(int i = 0;i!=reverseIndex;++i){
canvas.drawBitmap(bm1, new Rect(0,0,bitmapWidth,bitmapHeight),
new Rect(0,i*HEIGHT,bitmapWidth,i*HEIGHT+bitmapHeight), null);
}
for(int i = reverseIndex;i!=15;++i){
canvas.drawBitmap(bm, new Rect(0,0,bitmapWidth,bitmapHeight),
new Rect(0,i*HEIGHT,bitmapWidth,i*HEIGHT+bitmapHeight), null);
}
super.onDraw(canvas);
}
private void setIndex(int n){
if(n>15){
n = 15;
}
else if(n<0){
n = 0;
}
if(index!=n){
index = n;
if(mOnVolumeChangedListener!=null){
mOnVolumeChangedListener.setYourVolume(n);
}
}
invalidate();
}
}。