Приложение для IPTV плеера в Android
Я понял, что для просмотра доступно много бесплатных каналов iptv. Поэтому я хотел бы разработать приложение для воспроизведения этих многоадресных потоков с помощью моего мультимедийного проигрывателя Android.
Может ли кто-нибудь направить меня в этом?
Спасибо,
сен
2 ответа
Я делаю это раньше... Если вы хотите, чтобы только играть мультикаст поток, пожалуйста, добавьте VideoView
на ваш MainActivity
, Например:
VideoView videoView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
videoView = (VideoView) findViewById(R.id.videoView);
videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
selectedVideo++;
play();
}
});
play();
}
И код функции воспроизведения:
private void play() {
String result = "udp://239.1.2.3:6001";
Uri video = Uri.parse(result);
if (videoView.isPlaying())
videoView.stopPlayback();
videoView.setVideoURI(video);
videoView.requestFocus();
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
videoView.start();
}
});
}
Обратите внимание, что для воспроизведения многоадресного потока у вас должна быть включена многоадресная сеть.
http://iptvtalk.org/showthread.php?509-iptv
Выше ссылка для выяснения того, что доступно бесплатно
У Ciphertv есть веб-сайт, своя крошечная коробка, в которой есть все необходимое для программирования. Одна цена, покупает коробку с годовой подпиской.
SuperIPTV.... почти для любой этнической группы, включая японский, английский, китайский, арабский и так далее. Просто погуглите все, что плавает на вашей лодке.
Я разрабатываю для этого личный пример с ExoMedia. Вот ссылка, но в основном это комбинация Service и PlaylistManager для воспроизведения многоадресных потоков.
// PlaylistManager.kt
/**
* A PlaylistManager that extends the [ListPlaylistManager] for use with the
* [MediaService] which extends [com.devbrackets.android.playlistcore.service.BasePlaylistService].
*/
class PlaylistManager(application: Application) :
ListPlaylistManager<ChannelItem>(application, MediaService::class.java) {
/**
* Note: You can call [.getMediaPlayers] and add it manually in the activity,
* however we have this helper method to allow registration of the media controls
* listener provided by ExoMedia's [com.devbrackets.android.exomedia.ui.widget.VideoControls]
*/
fun addVideoApi(videoApi: VideoApi) {
mediaPlayers.add(videoApi)
updateVideoControls(videoApi)
registerPlaylistListener(videoApi)
}
/**
* Note: You can call [.getMediaPlayers] and remove it manually in the activity,
* however we have this helper method to remove the registered listener from [.addVideoApi]
*/
fun removeVideoApi(videoApi: VideoApi) {
videoApi.videoView.videoControls?.setButtonListener(null)
unRegisterPlaylistListener(videoApi)
mediaPlayers.remove(videoApi)
}
/**
* Updates the available controls on the VideoView and links the
* button events to the playlist service and this.
*
* @param videoApi The VideoApi to link
*/
private fun updateVideoControls(videoApi: VideoApi) {
videoApi.videoView.videoControls?.let {
it.setPreviousButtonRemoved(true)
it.setNextButtonRemoved(true)
it.setButtonListener(ControlsListener())
}
}
/**
* An implementation of the [VideoControlsButtonListener] that provides
* integration with the playlist service.
*/
private inner class ControlsListener : VideoControlsButtonListener {
override fun onPlayPauseClicked(): Boolean {
invokePausePlay()
return true
}
override fun onPreviousClicked(): Boolean {
invokePrevious()
return false
}
override fun onNextClicked(): Boolean {
invokeNext()
return false
}
override fun onRewindClicked(): Boolean {
return false
}
override fun onFastForwardClicked(): Boolean {
return false
}
}
}
// MediaService.kt
/**
* A simple service that extends [BasePlaylistService] in order to provide
* the application specific information required.
*/
class MediaService : BasePlaylistService<ChannelItem, PlaylistManager>() {
override val playlistManager by lazy { (applicationContext as App).playlistManager }
override fun onCreate() {
super.onCreate()
// Adds the audio player implementation, otherwise there's nothing to play media with
playlistManager.mediaPlayers.add(AudioApi(applicationContext))
}
override fun onDestroy() {
super.onDestroy()
// Releases and clears all the MediaPlayersMediaImageProvider
playlistManager.mediaPlayers.forEach {
it.release()
}
playlistManager.mediaPlayers.clear()
}
override fun newPlaylistHandler(): PlaylistHandler<ChannelItem> {
val imageProvider = MediaImageProvider(applicationContext) {
playlistHandler.updateMediaControls()
}
return DefaultPlaylistHandler.Builder(
applicationContext,
javaClass,
playlistManager,
imageProvider
).build()
}
}