Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > Mobile > Mobile Forum > สอบถามปัญหาการทำ Android App แล้ว Shoutcast ทำงานผิดปกติ



 

สอบถามปัญหาการทำ Android App แล้ว Shoutcast ทำงานผิดปกติ

 



Topic : 113002



โพสกระทู้ ( 8 )
บทความ ( 0 )



สถานะออฟไลน์




คือว่าผมได้เขียนแอปฟังวิทยุออนไลน์บนแอนดรอยจาก Shoutcast ซึ่งนำ source code มาดัดแปลง

ตอนทำการทดสอบใน AVD ไม่พบปัญหาอะไรครับ แต่พอในมาติดตั้งในเครื่องจริง

ตัวแอป เล่นเพลงประมาณ 5 วิ แล้ว หยุดการทำงานไป ช่วยหน่อยนะครับ พอดีพึ่งหัดเขียนด้วย

ผมใช้ Android Studio (Beta) 0.8.14

Code (Android-Java) ShoutcastFile.java
package com.shoutcastwhitelabel.player;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URLConnection;
import java.util.Calendar;
import java.util.GregorianCalendar;

import android.os.Environment;

public class ShoutcastFile
{
	String m_shoutcast_name;
	String m_file_name;
	int m_bitrate;
	long m_current_write_pos;
	long m_buffer_mark_pos = 0;
	boolean m_done = false;
	boolean m_notified_buffering_done = false;
	String m_errors = "";
	File m_file;
	File m_nagare_dir;
	
	public ShoutcastFile(URLConnection connection)
	{
		m_shoutcast_name = connection.getHeaderField("icy-name");
		m_bitrate = Integer.parseInt(connection.getHeaderField("icy-br"));
		build_file_name();
	}
	
	public void build_file_name()
	{
		Calendar now = new GregorianCalendar();
		m_file_name = m_shoutcast_name.replaceAll("[\\/:*?\"<>|]", "_");
		m_file_name += "-" + now.get(Calendar.YEAR) + now.get(Calendar.MONTH) + now.get(Calendar.DAY_OF_MONTH) + now.get(Calendar.HOUR_OF_DAY) + now.get(Calendar.MINUTE) + now.get(Calendar.SECOND) + ".mp3";
		m_nagare_dir = new File(Environment.getExternalStorageDirectory() + "/Nagare");
		m_nagare_dir.mkdirs();
		m_file = new File(m_nagare_dir.getAbsolutePath(), m_file_name);
	}
	
	public void done()
	{
		m_done = true;
	}

	public String errors()
	{
		return m_errors;
	}
	
	public String file_path()
	{
		return m_file.getAbsolutePath();
	}
	
	public void download(DownloadThread download_thread, InputStream input)
	{
		try
		{
			FileOutputStream output = new FileOutputStream(m_file);
			byte[] buffer = new byte[1024];
			int numRead;
			while ((numRead = input.read(buffer)) != -1 && !m_done) {
				output.write(buffer, 0, numRead);
				m_current_write_pos += numRead;
			}
		}
		catch (Exception e)
		{
			m_errors += e.toString() + "\n";
		}
		done();
	}
	
	public void rebuffer()
	{
		m_buffer_mark_pos = m_current_write_pos;
		m_notified_buffering_done = true;
	}
}





Tag : Mobile, Android, JAVA







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2014-12-02 11:59:46 By : kokoloman001 View : 1177 Reply : 1
 

 

No. 1



โพสกระทู้ ( 8 )
บทความ ( 0 )



สถานะออฟไลน์


เพิ่มเติม

Code (Android-Java) NagareService.java
package com.shoutcastwhitelabel.player;

import java.net.MalformedURLException;
import java.net.URL;

import com.shoutcastwhitelabel.player.INagareService;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaScannerConnection;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Handler;
import android.os.IBinder;

public class NagareService extends Service implements OnCompletionListener
{
	public static URL m_url = null;
	public static DownloadThread m_download_thread = null;
	public static MediaPlayer m_media_player = null;
	public static int m_current_position = 0;
	public static String m_errors = "";
	public static int m_state = 0;
	public static final int STOPPED = 0;
	public static final int PLAYING = 1;
	public static final int BUFFERING = 2;
	public static MediaScannerConnection m_scanner = null;
	public static final int BUFFER_BEFORE_PLAY = 65536;
	
	private final static Runnable m_run_buffer = new Runnable()
	{
		public void run()
		{
			int delay = buffer();
			if (delay > 0)
			{
				m_handler.postDelayed(this, delay);
			}
		}
	};
	
	private final static Handler m_handler = new Handler();
	
	public NagareService()
	{
		//Don't set m_state here, we want to persist it across service binds/unbinds
	}
	
	public static int buffer()
	{
		if (m_download_thread == null || m_download_thread.m_shoutcast_file == null)
		{
			if (m_state == BUFFERING)
			{
				return 1000;
			}
			else
			{
				stop();
                return 1000;
			}
		}
		
		if (m_download_thread.m_shoutcast_file.m_done)
		{
			stop();
			return 0;
		}
		
		if (m_download_thread.m_shoutcast_file.m_current_write_pos - m_current_position > BUFFER_BEFORE_PLAY)
		{
			try
			{
				m_media_player.reset();
				m_media_player.setDataSource(m_download_thread.m_shoutcast_file.file_path());
				m_media_player.prepare();
			}
			catch (Exception e)
			{
				m_errors += "Error starting media player on '" + m_download_thread.m_shoutcast_file.file_path() + "': " + e.toString() + "\n";
			}
			m_media_player.seekTo(m_current_position);
			m_media_player.start();
			m_state = PLAYING;
			return 0;
		}
		else
		{
			m_state = BUFFERING;
			return 1000;
		}
	}
	
	public static void download(String url_string)
	{
		m_errors = "";
		try
		{
			m_url = new URL(url_string);
		} 
		catch (MalformedURLException e)
		{
			m_errors += "Error parsing URL (" + url_string + "): " + e.toString() + "\n";
		}
		
		if (m_errors == "")
		{
			m_download_thread = new DownloadThread(m_url);
			m_download_thread.start();
			m_current_position = 0;
			m_state = BUFFERING;
			if (m_media_player == null)
			{
				m_media_player = new MediaPlayer();
				m_media_player.setOnCompletionListener(null);
			}
			m_run_buffer.run();
		}
	}
	
	public static String errors()
	{
		if (m_download_thread != null)
		{
			return m_errors + m_download_thread.errors();		
		}
		return m_errors;
	}
	
	public static String file_name()
	{
		if (m_download_thread == null)
		{
			return null;
		}
		
		if (m_download_thread.m_shoutcast_file == null)
		{
			return null;
		}
		
		return m_download_thread.m_shoutcast_file.m_file_name;
	}
	
	public IBinder onBind(Intent intent)
	{
		return m_binder;
	}
	
	public void onCompletion(MediaPlayer mp)
	{
		m_current_position = mp.getCurrentPosition();
		m_run_buffer.run();
	}
	
	public static long position()
	{
		if (m_download_thread == null)
		{
			return -1;
		}
		
		if (m_download_thread.m_shoutcast_file == null)
		{
			return -1;
		}
		
		return m_download_thread.m_shoutcast_file.m_current_write_pos;
	}
	
	public static int state()
	{
		return m_state;
	}
	
	public static void stop()
	{
		if (m_download_thread != null)
		{
			m_download_thread.done();
			m_download_thread = null;
		}
		if (m_media_player != null)
		{
			if (m_state == PLAYING)
			{
				m_media_player.stop();
			}
		}
		m_state = STOPPED;
	}

	private final static INagareService.Stub m_binder = new INagareService.Stub()
	{
		public void download(String url)
		{
			NagareService.download(url);
		}
		
		public String errors()
		{
			return NagareService.errors();
		}
		
		public String file_name()
		{
			return NagareService.file_name();
		}
		
		public long position()
		{
			return NagareService.position();
		}
		
		public int state()
		{
			return NagareService.state();
		}
		
		public void stop()
		{
			NagareService.stop();
		}
	};

}








แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-12-02 15:11:13 By : kokoloman001
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : สอบถามปัญหาการทำ Android App แล้ว Shoutcast ทำงานผิดปกติ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 04
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่