Android Wear MediaPlayer HTTP потоковое видео
Прежде всего, это не дубликат воспроизведения видео из res/raw на Android Wear. Я хочу воспроизвести видео из Интернета на своем устройстве Android Wear (Moto 360 Sport Android Wear 2.0). Я читал, что устройства Android Wear не имеют самого кодировщика. Поэтому я попытался использовать Exoplayer с расширением vp9, vitamio и т. Д. Когда я использовал Exoplayer с расширением и без него, я получал только звук видеофайла, но не кадры. (только черный вид SimpleExoPlayer со звуком) Когда я использовал vitamio, я получил сообщения журнала ниже. (Я использовал тот же код для Vitamio в моем телефоне Android, он работает)
04-29 22:06:51.173 7719-7735/com.muhendis.vitamiotest4 D/OpenGLRenderer: Swap behavior 1
04-29 22:06:51.189 7719-7735/com.muhendis.vitamiotest4 W/Adreno-ES20: <get_gpu_clk:229>: open failed: errno 13
04-29 22:06:51.261 7719-7730/com.muhendis.vitamiotest4 I/art: Background sticky concurrent mark sweep GC freed 6321(389KB) AllocSpace objects, 2(40KB) LOS objects, 47% free, 1674KB/3MB, paused 14.251ms total 264.932ms
04-29 22:06:51.281 7719-7719/com.muhendis.vitamiotest4 I/Vitamio[4.2.1][Player]: Copyright (c) YIXIA (http://yixia.com).
THIS SOFTWARE (Vitamio) IS WORK OF YIXIA (http://yixia.com)
04-29 22:06:51.282 7719-7719/com.muhendis.vitamiotest4 I/Vitamio[4.2.1][Player]: LOAD FFMPEG START: /data/user/0/com.muhendis.vitamiotest4/libs/libffmpeg.so
04-29 22:06:51.287 7719-7719/com.muhendis.vitamiotest4 E/linker: /data/data/com.muhendis.vitamiotest4/libs/libffmpeg.so: has text relocations
04-29 22:06:51.288 7719-7719/com.muhendis.vitamiotest4 E/Vitamio[4.2.1][Player]: LOAD FFMPEG ERROR: dlopen failed: /data/data/com.muhendis.vitamiotest4/libs/libffmpeg.so: has text relocations}
04-29 22:06:51.288 7719-7719/com.muhendis.vitamiotest4 I/Vitamio[4.2.1][Player]: LOAD VVO START: /data/user/0/com.muhendis.vitamiotest4/libs/libvvo.9.so
04-29 22:06:51.384 7719-7719/com.muhendis.vitamiotest4 E/Vitamio[4.2.1][Player]: FIND_NAME_SYM vvo, render_yuv
04-29 22:06:51.384 7719-7719/com.muhendis.vitamiotest4 I/Vitamio[4.2.1][Player]: LOAD VVO END: /data/user/0/com.muhendis.vitamiotest4/libs/libvvo.9.so
LOAD VAO START: /data/user/0/com.muhendis.vitamiotest4/libs/libvao.0.so
04-29 22:06:51.387 7719-7719/com.muhendis.vitamiotest4 I/Vitamio[4.2.1][Player]: LOAD VAO END: /data/user/0/com.muhendis.vitamiotest4/libs/libvao.0.so
04-29 22:06:51.389 7719-7719/com.muhendis.vitamiotest4 I/Vitamio[4.2.1][Player]: VPLAYER INIT BEGIN
Application package name: com.muhendis.vitamiotest4
04-29 22:06:51.390 7719-7719/com.muhendis.vitamiotest4 A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 7719 (is.vitamiotest4)
В настоящее время я пытаюсь использовать GStreamer, но его сложно собрать и настроить для Android. Итак, мой вопрос:
Каков наилучший способ для потоковой передачи и воспроизведения видео на устройствах Android Wear (2.0)?
Спасибо,
Фатих
РЕДАКТИРОВАТЬ
Просто, чтобы избежать путаницы, есть 2 разных приложения. Один из них с Витамио, другой с ExoPlayer. Витамио дает вышеуказанную ошибку. Exoplayer просто транслирует и воспроизводит аудио, но нет кадра для показа. Мои коды, как показано ниже:
Для витаминов:
MainActivity.class
public class MainActivity extends WearableActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Enables Always-on
setAmbientEnabled();
if (!io.vov.vitamio.LibsChecker.checkVitamioLibs(this))
return;
//Vitamio.initialize(getApplicationContext());
VideoView videoview = findViewById(R.id.vitamioVideo);
Uri mp4VideoUri = Uri.parse("https://drive.google.com/uc?export=download&id=1lB7kSMKXjGS-goqNxSHJDIhTtnQbUxqv");
videoview.setVideoURI(mp4VideoUri);
videoview.start();
}
}
activity_main.xml
<android.support.wear.widget.BoxInsetLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/dark_grey"
android:padding="@dimen/box_inset_layout_padding"
tools:context=".MainActivity"
tools:deviceIds="wear">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/inner_frame_layout_padding"
app:boxedEdges="all">
<io.vov.vitamio.widget.VideoView
android:id="@+id/vitamioVideo"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
Для ExoPlayer:
MainActivity.class
public class MainActivity extends WearableActivity {
SimpleExoPlayerView mExoPlayerView;
SimpleExoPlayer mExoPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Enables Always-on
setAmbientEnabled();
mExoPlayerView = findViewById(R.id.mExoPlayer);
createExoPlayer();
}
private void createExoPlayer()
{
Context context = getApplicationContext();
// 1. Create a default TrackSelector
Handler mainHandler = new Handler();
BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
TrackSelection.Factory videoTrackSelectionFactory =
new AdaptiveTrackSelection.Factory(bandwidthMeter);
TrackSelector trackSelector =
new DefaultTrackSelector(videoTrackSelectionFactory);
// 2. Create the player
mExoPlayer =
ExoPlayerFactory.newSimpleInstance(getApplicationContext(), trackSelector);
mExoPlayerView.setPlayer(mExoPlayer);
// Measures bandwidth during playback. Can be null if not required.
DefaultBandwidthMeter bandwidthMtr = new DefaultBandwidthMeter();
Uri mp4VideoUri = Uri.parse("https://drive.google.com/uc?export=download&id=1TvPMgjkWxT1HUh7zOHLtOHjxpbUjm4yI");
//Uri mp4VideoUri = Uri.parse(videoLink);
// Produces DataSource instances through which media data is loaded.
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context,
Util.getUserAgent(context, "Marmara Egzersiz"), bandwidthMtr);
// This is the MediaSource representing the media to be played.
MediaSource videoSource = new ExtractorMediaSource.Factory(dataSourceFactory)
.createMediaSource(mp4VideoUri);
mExoPlayer.addListener(new Player.DefaultEventListener() {
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
super.onPlayerStateChanged(playWhenReady, playbackState);
//Log.d(TAG,"PLAYER STATE CHANGED");
//Log.d(TAG,"Playback state: "+playbackState);
}
@Override
public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
super.onPlaybackParametersChanged(playbackParameters);
//Log.d(TAG,"PLAYBACK PARAMETERS CHANGED");
}
});
// Prepare the player with the source.
mExoPlayer.prepare(videoSource);
}
}
activity_main.xml
<android.support.wear.widget.BoxInsetLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/dark_grey"
android:padding="@dimen/box_inset_layout_padding"
tools:context=".MainActivity"
tools:deviceIds="wear">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/inner_frame_layout_padding"
app:boxedEdges="all">
<com.google.android.exoplayer2.ui.SimpleExoPlayerView
android:id="@+id/mExoPlayer"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.google.android.exoplayer2.ui.SimpleExoPlayerView>
</FrameLayout>