Androidでネットワーク上の動画を再生する

ネットワーク上に保存している動画を
VideoViewというViewを使用して再生するアプリを作成しました。

ネットワーク上のファイルを参照するので、
AndroidManifestにインターネットパーミッションを許可するために
<uses-permission android:name=”android.permission.INTERNET” />
を追加し、
平文通信を行う必要があるときは、同じく AndroidManifest のapplicationに
android:usesCleartextTraffic=”true”
を追加します。

stringsファイルに動画ファイルのURLを追加し
レイアウトファイルにVideoViewというViewを追加し、
javaファイルにコードを書いていきます。

以下ソースコードです。

package com.example.videoviewsample;

import androidx.appcompat.app.AppCompatActivity;

import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.VideoView;

public class MainActivity extends AppCompatActivity {

    private VideoView videoView;
    private int currentPosition = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        videoView = findViewById(R.id.videoView);

        // 動画へのURLを取得
        String Path = getString(R.string.video_path);
        Uri video = Uri.parse(Path);

        // 動画をコントロールするためMediaController
        MediaController mediaController = new MediaController(this);
        mediaController.setAnchorView(videoView);

        // VideoViewに動画URLとコントローラーを設定
        videoView.setMediaController(mediaController);
        videoView.setVideoURI(video);

        // 保存した値があれば取得
        if(savedInstanceState!=null)
        {
            // 値がなければ0
            currentPosition = savedInstanceState.getInt("CURRENT_POSITION", 0);
        }

        // 再生準備を待つリスナーを設定
        videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener()
        {
            @Override
            public void onPrepared(MediaPlayer arg0)
            {
                // 再生準備ができたら再生開始
                videoView.start();
            }
        });
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        // どこまで再生しているかを保存する
        outState.putInt("CURRENT_POSITION", currentPosition);
    }

    @Override
    protected void onPause() {
        // どこまで再生しているかを取得
        currentPosition = videoView.getCurrentPosition();
        super.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        // どこまで再生しているかを設定
        videoView.seekTo(currentPosition);
    }
}

ただ動画を再生するだけなら簡単ですが、
動画からアスペクト比情報を取得できないと、
アスペクト比が崩れてしまいますね。

水曜担当:Tanaka



アプリ関連ニュース

お問い合わせはこちら

お問い合わせ・ご相談はお電話、またはお問い合わせフォームよりお受け付けいたしております。

tel. 06-6454-8833(平日 10:00~17:00)

お問い合わせフォーム