Создание списка воспроизведения с 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-адреса в вашем случае для видео указывают на ваш встроенный сервер.

Другие вопросы по тегам