Создание списка воспроизведения с SD-карты и отправка его в Chromecast
Я разрабатываю приложение для отправки плейлиста в Chromecast. Я хочу создать плейлист из местных средств массовой информации (видео, изображения). Мое приложение получит все видео и изображения из определенной папки и создаст список воспроизведения. Этот плейлист будет отправлен в Chromecast.
Как этого добиться, я создал сервер NanoHTTPD на своем мобильном телефоне. И обслуживать видео оттуда. Но этот сервер обслуживает только одно видео одновременно.
Я хочу обслуживать определенную папку с локального сервера, а затем создать список воспроизведения всех видео и изображений, хранящихся в этой папке.
Это мой NanoHTTPD:-
public class WebServer extends NanoHTTPD
{
public WebServer() throws IOException
{
super(8089);
}
@Override
public Response serve(String uri, Method method,
Map<String, String> header, Map<String, String> parameters,
Map<String, String> files)
{
String answer = "";
FileInputStream fis = null;
String path;
String fileOutput="";
int counter;
try
{
path = Environment.getExternalStorageDirectory() + "/DCIM/Video/bbb.mp4";
fis = new FileInputStream(path);
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return new NanoHTTPD.Response(Status.OK, "video/mp4", fis);
}
}
Вот как я снимаю видео:-
private void startVideo()
{
MediaMetadata mediaMetadata = new MediaMetadata( MediaMetadata.MEDIA_TYPE_MOVIE );
mediaMetadata.putString( MediaMetadata.KEY_TITLE, getString( R.string.video_title ) );
String videoURL = Configuration.video_url;
MediaInfo mediaInfo = new MediaInfo.Builder( videoURL )
.setContentType( getString( R.string.content_type_mp4 ) )
.setStreamType( MediaInfo.STREAM_TYPE_BUFFERED )
.setMetadata( mediaMetadata )
.build();
Toast.makeText(getApplicationContext(), "Video build " + videoURL, Toast.LENGTH_LONG).show();
try
{
mRemoteMediaPlayer.load( mApiClient, mediaInfo, true )
.setResultCallback( new ResultCallback<RemoteMediaPlayer.MediaChannelResult>()
{
@Override
public void onResult( RemoteMediaPlayer.MediaChannelResult mediaChannelResult )
{
if( mediaChannelResult.getStatus().isSuccess() )
{
mVideoIsLoaded = true;
mButton.setText( getString( R.string.pause_video ) );
Toast.makeText(getApplicationContext(), "Media loaded successfully", Toast.LENGTH_LONG).show();
}
}
} );
}
catch (IllegalStateException e)
{
Toast.makeText(getApplicationContext(), "Problem occurred with media during loading : " + e, Toast.LENGTH_LONG).show();
}
catch (Exception e)
{
Toast.makeText(getApplicationContext(), "Problem occurred with media during loading : " + e, Toast.LENGTH_LONG).show();
}
}
Пожалуйста, помогите мне, я не могу понять, что делать.
1 ответ
Вам нужно:
- Сконфигурируйте ваш локальный сервер для обслуживания файлов по их имени, т.е. если я хочу получить файл с именем "video1.mp4", мне нужно будет использовать " http://.../video1.mp4". Это позволяет иметь несколько файлов, доступных при необходимости.
- Вам нужно создать очередь, используя соответствующий apis: создать MediaQueueItems, по одному для каждого видео в вашем списке воспроизведения, а затем поместить их в массив и загрузить их, используя метод RemoteMediaPlayer#queueLoad(). Вы можете установить autoplay=true для них.
Вы можете посмотреть на приложение CastVidoes-android для примера; единственное отличие состоит в том, что URL-адреса в вашем случае для видео указывают на ваш встроенный сервер.