Java tutorial
/* * Copyright (C) 2013 Google Inc. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.firefly.sample.cast.refplayer.browser; import android.content.Context; import android.net.Uri; import android.util.Log; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import com.firefly.sample.cast.refplayer.settings.CastPreference; import com.fireflycast.cast.MediaInfo; import com.fireflycast.cast.MediaMetadata; import com.fireflycast.cast.images.WebImage; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URLConnection; import java.util.ArrayList; import java.util.List; public class VideoProvider { private static final String TAG = "VideoProvider"; private static String TAG_MEDIA = "videos"; private static String TAG_CATEGORIES = "categories"; private static String TAG_NAME = "name"; private static String TAG_STUDIO = "studio"; private static String TAG_SOURCES = "sources"; private static String TAG_SUBTITLE = "subtitle"; private static String TAG_THUMB = "image-480x270"; // "thumb"; private static String TAG_IMG_780_1200 = "image-780x1200"; private static String TAG_TITLE = "title"; private static List<MediaInfo> mediaList; protected JSONObject parseUrl(String urlString) { InputStream is = null; try { java.net.URL url = new java.net.URL(urlString); URLConnection urlConnection = url.openConnection(); is = new BufferedInputStream(urlConnection.getInputStream()); BufferedReader reader = new BufferedReader( new InputStreamReader(urlConnection.getInputStream(), "UTF-8"), 8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line); } String json = sb.toString(); return new JSONObject(json); } catch (Exception e) { Log.d(TAG, "Failed to parse the json for media list", e); return null; } finally { if (null != is) { try { is.close(); } catch (IOException e) { // ignore } } } } public static List<MediaInfo> buildMedia(Context context, String url) throws JSONException { if (null != mediaList) { return mediaList; } mediaList = new ArrayList<MediaInfo>(); JSONObject jsonObj = new VideoProvider().parseUrl(url); JSONArray categories = jsonObj.getJSONArray(TAG_CATEGORIES); if (null != categories) { for (int i = 0; i < categories.length(); i++) { JSONObject category = categories.getJSONObject(i); category.getString(TAG_NAME); JSONArray videos = category.getJSONArray(getJsonMediaTag()); if (null != videos) { for (int j = 0; j < videos.length(); j++) { JSONObject video = videos.getJSONObject(j); String subTitle = video.getString(TAG_SUBTITLE); JSONArray videoUrls = video.getJSONArray(TAG_SOURCES); if (null == videoUrls || videoUrls.length() == 0) { continue; } String videoUrl = videoUrls.getString(0); if (!videoUrl.toLowerCase().startsWith("http") && !videoUrl.toLowerCase().startsWith("rtsp")) { videoUrl = getThumbPrefix(context) + videoUrl; } String imageUrl = video.getString(TAG_THUMB); if (!imageUrl.toLowerCase().startsWith("http")) { imageUrl = getThumbPrefix(context) + imageUrl; } String bigImageUrl = video.getString(TAG_IMG_780_1200); if (!bigImageUrl.toLowerCase().startsWith("http")) { bigImageUrl = getThumbPrefix(context) + bigImageUrl; } String title = video.getString(TAG_TITLE); String studio = video.getString(TAG_STUDIO); mediaList.add(buildMediaInfo(title, studio, subTitle, videoUrl, imageUrl, bigImageUrl)); } } } } return mediaList; } private static MediaInfo buildMediaInfo(String title, String subTitle, String studio, String url, String imgUrl, String bigImageUrl) { MediaMetadata movieMetadata = new MediaMetadata(MediaMetadata.MEDIA_TYPE_MOVIE); movieMetadata.putString(MediaMetadata.KEY_SUBTITLE, subTitle); movieMetadata.putString(MediaMetadata.KEY_TITLE, title); movieMetadata.putString(MediaMetadata.KEY_STUDIO, studio); movieMetadata.addImage(new WebImage(Uri.parse(imgUrl))); movieMetadata.addImage(new WebImage(Uri.parse(bigImageUrl))); return new MediaInfo.Builder(url).setStreamType(MediaInfo.STREAM_TYPE_BUFFERED) .setContentType(getMediaType()).setMetadata(movieMetadata).build(); } private static String getMediaType() { return "video/mp4"; } private static String getJsonMediaTag() { return TAG_MEDIA; } private static String getThumbPrefix(Context context) { return CastPreference.getServerAddress(context); } }