Загрузка видео с Android на Youtube - PullRequest
2 голосов
/ 04 октября 2011

Я разрабатываю приложение, которое загружает видео с SD-карты на YouTube и возвращает URL-адрес видео YouTube. Однако я не смог успешно сделать это.

Я пробовал с ACTION_SEND:

public void onUploadClick(View v) {
 Intent uploadIntent = new Intent(Intent.ACTION_SEND);
 // In a real app, video would be captured from camera.
 File f = new File("/sdcard/test.mov");
 uploadIntent.setDataAndType(Uri.fromFile(f), "video/quicktime");
 startActivity(Intent.createChooser(uploadIntent, "Upload"));
}

Но, как ни странно, с этой реализацией у меня нет YouTube для загрузки. У меня есть Bluetooth, Почта, Dropbox, Facebook, Flickr, Gmail и Handcent. Но не Youtube. Есть мысли по этому поводу? Кроме того, возможно ли с помощью этого метода получить URL-адрес видео YouTube после загрузки? Как?

Я также пытался использовать Youtube API для Java, и снова безуспешно. Я добавил все необходимые библиотеки (gdata-client-1.0.jar, gdata-media-1.0.jar и gdata-youtube-2.0, jar). Однако, когда я запускаю его, я получаю NoClassDefFoundError для com.google.gdata.client.youtube.YouTubeService, несмотря на наличие правильных библиотек и импорта. Вот код, который я использую:

YouTubeService service = new YouTubeService(clientID, developer_key);
VideoEntry newEntry = new VideoEntry();

YouTubeMediaGroup mg = newEntry.getOrCreateMediaGroup();
mg.setTitle(new MediaTitle());
mg.getTitle().setPlainTextContent("My Test Movie");
mg.addCategory(new MediaCategory(YouTubeNamespace.CATEGORY_SCHEME, "Autos"));
mg.setKeywords(new MediaKeywords());
mg.getKeywords().addKeyword("cars");
mg.getKeywords().addKeyword("funny");
mg.setDescription(new MediaDescription());
mg.getDescription().setPlainTextContent("My description");
mg.setPrivate(false);
mg.addCategory(new MediaCategory(YouTubeNamespace.DEVELOPER_TAG_SCHEME, "mydevtag"));
mg.addCategory(new MediaCategory(YouTubeNamespace.DEVELOPER_TAG_SCHEME, "anotherdevtag"));

newEntry.setGeoCoordinates(new GeoRssWhere(37.0,-122.0));
// alternatively, one could specify just a descriptive string
// newEntry.setLocation("Mountain View, CA");

MediaFileSource ms = new MediaFileSource(new File("file.mov"), "video/quicktime");
newEntry.setMediaSource(ms);

String uploadUrl =
  "http://uploads.gdata.youtube.com/feeds/api/users/default/uploads";

VideoEntry createdEntry = service.insert(new URL(uploadUrl), newEntry);

Подводя итог, я задаю следующие вопросы: - Что я делаю не так в обоих подходах? - Что касается моей простой цели - загрузить видео на YouTube и получить ссылку на YouTube после этого, какой метод вы порекомендуете? Даже если это ни один из вышеперечисленных.

Спасибо.

---- Обновление 04/10 ----

  • Попытавшись использовать другой телефон, я обнаружил, что Youtube не отображается в качестве выбора для загрузки видео - это проблема моего телефона (вероятно, из-за ПЗУ). Однако, даже если он работает с использованием намерений, это не тот путь, потому что я не могу вернуть URL, и это очень важно.
  • После некоторых исследований кажется, что второй метод невозможен. API YouTube для Java не работает в Android.

При этом я ищу предложения о том, как загрузить видео на Youtube в Android. Что я действительно хочу, так это выбрать видеофайл, загрузить его на Youtube и получить URL-адрес YouTube. Желательно без какого-либо вмешательства со стороны пользователя, который выбирает только файл, а затем загрузка и получение URL-адресов выполняется «в фоновом режиме». Какие-либо предложения? Какой самый простой и быстрый способ добиться этого?

Спасибо.

Ответы [ 2 ]

1 голос
/ 16 мая 2012

Вы можете использовать RESTful YouTube API и выполнить возобновляемую загрузку.Пример кода здесь: http://code.google.com/p/ytd-android/. Кроме того, вы пробовали ACTION_SHARE?

0 голосов
/ 04 октября 2011

Относительно первого подхода: я попробовал на 3 разных телефонах, всех разных марок и разных версиях Android, и вот как каждый из них действовал, когда я нажимал «поделиться» и выбирал YouTube:

act = android.intent.action.SEND typ = video / mp4 flg = 0x3000000 cmp = com.google.android.apps.uploader / .clients.youtube.YouTubeSettingsActivity

act = android.intent.action.SEND typ = video / 3gpp flg = 0x3000000 cmp = com.google.android.apps.uploader / .clients.youtube.YouTubeSettingsActivity

act = android.intent.action.SEND_MULTIPLE typ = video / * cmp = com.google.android.apps.uploader / .clients.youtube.YouTubeSettingsActivity

Похоже, вы на правильном пути. Я бы попробовал изменить mimetype. Начните с видео / * возможно, просто чтобы посмотреть, работает ли оно.

О, как примечание, это может выглядеть заманчиво, но было бы опасно использовать YouTubeSettingsActivity напрямую в случае, если они когда-нибудь его изменят.

Лично мне нравится первый подход, потому что он прекрасно интегрируется с другими приложениями. Например, ваши пользователи хотят использовать что-то другое, кроме YouTube, они могут выбирать то, что хотят. Я не уверен насчет возврата URL.

...