gpt4 book ai didi

java - 我怎样才能让喊播流几乎立即开始播放

转载 作者:太空宇宙 更新时间:2023-11-04 14:02:37 24 4
gpt4 key购买 nike

我仍在修复我的广播应用程序,一切进展顺利,你们作为资源提供了很大的帮助!!

我(和我的最终客户端)一直担心的一件事是,流需要 30 秒到 45 秒(wifi、蜂窝网络、移动用户所在的位置)才能开始播放。

他们使用shoutcast作为服务,我从他们的shoutcast帐户中提取流。流是 MP3。

有没有办法让按下播放按钮几秒钟后,流开始播放???

这是我的代码:

import android.annotation.TargetApi;
import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.SeekBar;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import java.io.IOException;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;

import static com.javacodegeeks.androidmediaplayerexample.R.string.app_name;

public class AndroidMediaPlayerExample extends Activity implements AdapterView.OnItemSelectedListener, MediaPlayer.OnPreparedListener {

private MediaPlayer mediaPlayer;
public TextView songName, duration;
private double timeElapsed = 0, finalTime = 0;
private int forwardTime = 2000, backwardTime = 2000;
private Handler durationHandler = new Handler();
private SeekBar seekbar;
//String url = "http://radio.miraath.net:7000";
//String url = new String[]{"http://radio.miraath.net:7000", "http://radio.miraath.net:7010", "http://radio.miraath.net:7020", "http://radio.miraath.net:7030","http://radio.miraath.net:7040", };
String url;
TextView radioInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

//set the layout of the Activity
setContentView(R.layout.activity_main);
Spinner dropdown = (Spinner)findViewById(R.id.spinner1);
String[] items = new String[]{"الإذاعة الرئيسية", "الاذاعة الثانية", "إذاعة القرآن الكريم", "Miraath's English Radio", "إذاعة المجالس التأصيلية", "إذاعة دورة حفر الباطن"};
String [] radioDescription = new String[]{" الإذاعة الرئيسية: لموقع ميراث الأنبياء ،تسهر على بث الدروس العلمية لكبار العلماء وطلبة العلم، والتلاوات القرآنية على مدار الساعة. " , "الاذاعة الثانية تنقل الدروس المتعارضة مع الاذاعة الرئيسية و تعمل وقت الدروس فقط. " , "إذاعة ميراث الأنبياء للقرآن الكريم: بث لتلاوات مختارة من القرآن الكريم لمختلف القراء " , "Ensures the broadcast of Islamic lessons from the leading Scholars and proficient students, and recitations of Quran around the Clock" , "إذاعة خاصة ببث دروس مجالس ميراث الأنبياء التأصيلية، تعمل فقط وقت الدروس المباشرة حسب ما هو مبين بالجدول في الموقع " , "إذاعة خاصة ببث دروس دورة حفر الباطن، تعمل فقط وقت الدروس المباشرة حسب ما هو مبين بالجدول في الموقع " };
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, items);
dropdown.setAdapter(adapter);
dropdown.setOnItemSelectedListener(this);
int channel = Arrays.asList((getResources().getStringArray(R.array.radios_array))).indexOf(getString(app_name));

//initialize views
initializeViews();
}

public void initializeViews(){
songName = (TextView) findViewById(R.id.songName);
radioInfo = (TextView) findViewById(R.id.radioInfo);
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
finalTime = mediaPlayer.getDuration();
//duration = (TextView) findViewById(R.id.songDuration);
seekbar = (SeekBar) findViewById(R.id.seekBar);
songName.setText("Miraath.net Radio");

seekbar.setMax((int) finalTime);
seekbar.setClickable(false);
}

public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
//mediaPlayer.release();

switch (position) {

case 0:
// Whatever you want to happen when the first item gets selected
//mediaPlayer.release();
url = "http://radio.miraath.net:7000";
radioInfo.setText("الإذاعة الرئيسية: لموقع ميراث الأنبياء ،تسهر على بث الدروس العلمية لكبار العلماء وطلبة العلم، والتلاوات القرآنية على مدار الساعة");
Toast.makeText(getApplicationContext(), url, Toast.LENGTH_LONG).show();
break;
case 1:
// Whatever you want to happen when the second item gets selected
//mediaPlayer.release();
url = "http://radio.miraath.net:7010";
radioInfo.setText("الاذاعة الثانية تنقل الدروس المتعارضة مع الاذاعة الرئيسية و تعمل وقت الدروس فقط");
Toast.makeText(getApplicationContext(), url, Toast.LENGTH_LONG).show();
break;
case 2:
// Whatever you want to happen when the thrid item gets selected
//mediaPlayer.release();
url = "http://radio.miraath.net:7020";
radioInfo.setText("إذاعة ميراث الأنبياء للقرآن الكريم: بث لتلاوات مختارة من القرآن الكريم لمختلف القراء");
Toast.makeText(getApplicationContext(), url, Toast.LENGTH_LONG).show();
break;
case 3:
// Whatever you want to happen when the thrid item gets selected
//mediaPlayer.release();
url = "http://radio.miraath.net:7040";
radioInfo.setText("Ensures the broadcast of Islamic lessons from the leading Scholars and proficient students, and recitations of Quran around the Clock");
Toast.makeText(getApplicationContext(), url, Toast.LENGTH_LONG).show();
break;
case 4:
// Whatever you want to happen when the thrid item gets selected
//mediaPlayer.release();
url = "http://radio.miraath.net:7030";
radioInfo.setText("إذاعة خاصة ببث دروس مجالس ميراث الأنبياء التأصيلية، تعمل فقط وقت الدروس المباشرة حسب ما هو مبين بالجدول في الموقع");
Toast.makeText(getApplicationContext(), url, Toast.LENGTH_LONG).show();
break;
case 5:
// Whatever you want to happen when the thrid item gets selected
//mediaPlayer.release();
url = "http://radio.miraath.net:8010";
radioInfo.setText("إذاعة خاصة ببث دروس دورة حفر الباطن، تعمل فقط وقت الدروس المباشرة حسب ما هو مبين بالجدول في الموقع");
Toast.makeText(getApplicationContext(), url, Toast.LENGTH_LONG).show();
break;
}

}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}

// play mp3 song
public void play(View view)
{
if (!mediaPlayer.isPlaying())
{
Toast.makeText(getApplicationContext(), "Radio selected. Buffering Now...", Toast.LENGTH_LONG).show();
Toast.makeText(getApplicationContext(), "This may take a few moments. Please wait ...", Toast.LENGTH_LONG).show();
}

duration = (TextView) findViewById(R.id.songDuration);
try
{
if (mediaPlayer.isPlaying())
{
mediaPlayer.stop();
mediaPlayer.reset();
//mediaPlayer.release();
mediaPlayer.setDataSource(url);
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.prepareAsync();
}

else if (!mediaPlayer.isPlaying()) {
mediaPlayer.setDataSource(url);
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.prepareAsync();
}
}

catch (IllegalArgumentException e)
{
Toast.makeText(getApplicationContext(), "Radio not Available. Please try again Later.", Toast.LENGTH_LONG).show();

} catch (SecurityException e) {
Toast.makeText(getApplicationContext(), "Radio not Available. Please try again Later.", Toast.LENGTH_LONG).show();

} catch (IllegalStateException e) {
Toast.makeText(getApplicationContext(), "Radio not Available. Please try again Later.", Toast.LENGTH_LONG).show();

} catch (IOException e) {
e.printStackTrace();
}

}

//handler to change seekBarTime
private Runnable updateSeekBarTime = new Runnable() {
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
public void run() {
//get current position
timeElapsed = mediaPlayer.getCurrentPosition();
//set seekbar progress
seekbar.setProgress((int) timeElapsed);
//set time remaing
double timeRemaining = finalTime - timeElapsed;
duration.setText(String.format("%d min, %d sec", TimeUnit.MILLISECONDS.toMinutes((long) timeRemaining), TimeUnit.MILLISECONDS.toSeconds((long) timeRemaining) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) timeRemaining))));
//repeat yourself that again in 100 miliseconds
durationHandler.postDelayed(this, 100);
}
};

// pause mp3 song
public void pause(View view) {

Toast.makeText(getApplicationContext(), "Audio Paused ...", Toast.LENGTH_LONG).show();
mediaPlayer.reset();
}

// go forward at forwardTime seconds
public void forward(View view) {
//check if we can go forward at forwardTime seconds before song endes
if ((timeElapsed + forwardTime) <= finalTime) {
timeElapsed = timeElapsed + forwardTime;

//seek to the exact second of the track
mediaPlayer.seekTo((int) timeElapsed);
}
}

// go backwards at backwardTime seconds
public void rewind(View view) {
//check if we can go back at backwardTime seconds after song starts
if ((timeElapsed - backwardTime) > 0) {
timeElapsed = timeElapsed - backwardTime;

//seek to the exact second of the track
mediaPlayer.seekTo((int) timeElapsed);
}
}

@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();
timeElapsed = mediaPlayer.getCurrentPosition();
seekbar.setProgress((int) timeElapsed);
durationHandler.postDelayed(updateSeekBarTime, 100);

}
}

谢谢!!!铁螳螂7x

最佳答案

Outcast 不擅长直播;然而,制作一个缓冲区类,然后控制播放器开始部分作为缓冲排序的百分比是有效的。

关于java - 我怎样才能让喊播流几乎立即开始播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29171513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com