⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 threadplaymain.java

📁 手机流媒体的实现
💻 JAVA
字号:
/*///////////////////////////////////////////////////////////////////////////////
//文档生成日期:2006.3.28
//
//(1)概述:
//类名称:ThreadPlayMain
//类说明:
// 发送httpConnection请求给我的服务器网页,这个网页会告诉我他看到的IP地址是什么

    
//所在子系统:StreamingDemo
//
//系统总描述:
	用两个Player交替播放从网络上下载的流媒体。

	上面的代码可以从
	http://www.cnblogs.com/Files/zhengyun_ustc/StreamingDemo.rar
	下载;
	
	安装的jar包从
	http://www.cnblogs.com/Files/zhengyun_ustc/StreamingDemo-deployed.rar下载。
	
	本文属于讨论稿,提供的仅仅是建议和测试意见。
	本文还可以从
	http://www.cnblogs.com/zhengyun_ustc/archive/2006/3/28/StreamingDemo.html 得到最新稿。


//(2)历史记录:
//创建人: 郑昀(2006.3.28)
//修改历史:


//联系我: Google Talk >> zhengyun@gmail.com
//Blogs:    http://blog.csdn.net/zhengyun_ustc/以及http://www.cnblogs.com/zhengyun_ustc

//(3)版权声明:
//我这个版本j2me客户端代码仅仅允许您借鉴,但不得用于商业用途,除非得到郑昀本人的授权。本人保留所有权利。

////////////////////////////////////////////////////////////////////*/
package com.ultrapower.model;

import java.io.InputStream;

import javax.microedition.media.MediaException;

import com.ultrapower.common.CommandResources;
import com.ultrapower.control.GUIController;
import com.ultrapower.view.FormPlayer;

/**********************************************************
//ThreadPlayMain
//
//Class Description:
//	
//
//Author:
// zhengyun@ultrapower 2006.3.28
//
**********************************************************/
public class ThreadPlayMain
	implements Runnable {
	
	// 利用这个标志控制何时退出
	private boolean 		m_bRunAnyway;
	// 依靠这个标志判断是否需要去获取远程音乐
	public boolean m_bGetMusic = false;
	// 依靠这个标志判断是否需要去预加载音乐资源
	private boolean 		m_bPrefetchIt = false;
	// 依靠这个标志判断是否需要去播放音乐资源
	private boolean 		m_bPlayIt = false;
	private GUIController 	m_controller;
	private FormPlayer     m_form;
	
	private int m_nSequenceMIN;
	private int m_nSequenceMAX;
	
	// 代表当前的播放器正在播放音乐,不允许当前线程再作其他的操作了
	private boolean m_bPlaying = false;
	// 代表播放器的数组序列号,0为第一个播放器
	private int m_Sequence;
	// 纪录当前正在下载哪一个音乐资源序号
	private int m_nCurrentMusicIndex;
	// 这是从网络上获取音乐数据的流
	private InputStream    m_isInputMusic;
			
	/*
	 * MainOrSecondary指的是本线程代表哪一个播放器;共有两个播放器,一个Main,一个Secondary;
	 * 前者用0表示,后者是1;
	 */
	public ThreadPlayMain(GUIController control, FormPlayer form,
			int MainOrSecondary,
			int SequenceMIN,
			int SequenceMAX)
    {
		System.out.println(MainOrSecondary +
				">>>Enter ThreadPlayMain Constructor!");
		m_controller = control;
		m_form = form;
		m_bRunAnyway = true;
		
		m_Sequence = MainOrSecondary;
		m_nSequenceMIN = SequenceMIN;
		m_nSequenceMAX = SequenceMAX;
		m_nCurrentMusicIndex = m_nSequenceMIN;
    }
	
	/*
	 * 允许外界设置当前是否在播放
	 */
	public void setPlaying(boolean bPlaying)
	{
		m_bPlaying = bPlaying;
	}
	
	/*
	 * 通知当前播放器停止播放音乐
	 */
	public synchronized void notifyStop() throws MediaException
	{
		m_bPlayIt = false;
		m_bPrefetchIt = false;
		// 停止音乐播放
		Audio.stopSound(m_Sequence);
	}
	
	/*
	 * 通知下载音乐片段
	 */
	public synchronized void notifyGetMusic()
	{
		m_bGetMusic = true;
	}
	
	/*
	 * 通知线程退出
	 */
	public synchronized void notifyCloseThread()
	{
		m_bPlayIt = false;
		m_bPrefetchIt = false;
		m_bRunAnyway = false;
	}
	
	/*
	 * 当前的播放器准备数据
	 */
	public synchronized void notifyPrefetch()
	{
		m_bPrefetchIt = true;
	}
	
	/*
	 * 当前的播放器应该数据已经准备好了,那么就播放他
	 */
	public synchronized void notifyPlay()
	{
		m_bPlayIt = true;
	}
	
	public final void run()
    {
        /* Use networking if necessary */
        long lngStart;
        long lngTimeTaken;
		
		try
        {        
			while(m_bRunAnyway)
			{
				if(m_bGetMusic && !m_bPlaying)
				{
					System.out.println(m_Sequence +
							">>>ready to get remote music.m_nCurrentMusicIndex="
							+ m_nCurrentMusicIndex);
					m_isInputMusic = 
						CommandResources.getMusicResource(m_nCurrentMusicIndex);
					m_nCurrentMusicIndex =
						(m_nCurrentMusicIndex<m_nSequenceMAX)?
								(m_nCurrentMusicIndex+2):m_nSequenceMAX; 
								// 下载过了就递增2
					
					// 下载完毕就不再下载了,等待下次通知
					m_bGetMusic = false;
					System.out.println(m_Sequence +
							">>>download completed!");
					if(m_Sequence == 0)
					{
						m_controller.handleEvent(GUIController.EventID.EVENT_MAIN_DownloadCompleted, 
								null);
					}
				}
				
	            if( m_bPrefetchIt && !m_bPlaying) 
				{
					System.out.println(m_Sequence +
							">>>Start prefetch!");
					String strError = "";
					boolean bHasException = false;
					
					try
					{
						Audio.prefetchSound(m_form,
								m_isInputMusic,
								m_Sequence);
					}
					catch(Exception exc)
					{
						bHasException = true;
						exc.printStackTrace();
						strError = 
							"Exception:"
								+ exc.getMessage() +
								"/" + exc.getClass();
					}
					
					if(bHasException == true)
					{
						////////////////////////////////////////////
						// 告诉控制器出错了
						Object[] argvErrors = {strError};
						m_controller.handleEvent(GUIController.EventID.EVENT_FORM_ERROR, 
								argvErrors);
						////////////////////////////////////////////
					}
									
					m_bPrefetchIt = false;
				}

	            if( m_bPlayIt && !m_bPlaying) 
				{
					System.out.println(m_Sequence +
							">>>Start play!");
					String strError = "";
					boolean bHasException = false;
					
					try
					{
						m_bPlaying = true;
						Audio.playSound(m_Sequence);
					}
					catch(Exception exc)
					{
						bHasException = true;
						exc.printStackTrace();
						strError = 
							"Exception:"
								+ exc.getMessage() +
								"/" + exc.getClass();
					}
					
					if(bHasException == true)
					{
						////////////////////////////////////////////
						// 告诉控制器出错了
						Object[] argvErrors = {strError};
						m_controller.handleEvent(GUIController.EventID.EVENT_FORM_ERROR, 
								argvErrors);
						////////////////////////////////////////////
					}
									
					m_bPlayIt = false;
				}
				
				lngStart = System.currentTimeMillis();
                lngTimeTaken = System.currentTimeMillis() - lngStart;
                if(lngTimeTaken < 100)
                    Thread.sleep(75 - lngTimeTaken);
	        
	        }
        }
		catch(Exception exc)
        {
			System.out.println(m_Sequence +
					">>>Eception in downloading!");
			m_bRunAnyway = false;
			exc.printStackTrace();
        }
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -