AndroidのTextureViewで動画を再生する方法を徹底解説
本記事では、AndroidアプリでTextureViewを使用して動画を再生する方法を、サンプルコード付きで段階的に解説します。TextureViewはSurfaceViewと異なり、通常のView階層の中で動画を表示でき、回転やスケールなどの変換処理も適用できるのが特徴です。
ステップ1:新規プロジェクトを作成する
まず、Android Studioで新しいプロジェクトを作成します。メニューから「File」→「New Project」を選択し、必要な項目を入力してプロジェクトを作成してください。
ステップ2:レイアウトファイル(activity_main.xml)を編集する
次に、res/layout/activity_main.xml に以下のコードを追加します。ここでは、画面いっぱいにTextureViewを配置しています。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="8dp"
tools:context=".MainActivity">
<TextureView
android:id="@+id/textureView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>ステップ3:assetsフォルダに動画ファイルを配置する
プロジェクトにassetsフォルダを作成し、再生したい動画ファイル(例:videoplayback.mp4)をコピー&ペーストで配置します。assetsフォルダは「app」を右クリック→「New」→「Folder」→「Assets Folder」から簡単に作成できます。
ステップ4:MainActivity.javaにコードを追加する
src/MainActivity.java に以下のコードを記述します。TextureView.SurfaceTextureListener を実装し、サーフェスが利用可能になったタイミングでMediaPlayerにSurfaceをセットして再生を開始する流れです。
import androidx.appcompat.app.AppCompatActivity;
import android.content.res.AssetFileDescriptor;
import android.graphics.SurfaceTexture;
import android.media.MediaPlayer;
import android.os.Build;
import android.os.Bundle;
import android.view.Surface;
import android.view.TextureView;
import java.io.IOException;
public class MainActivity extends AppCompatActivity implements TextureView.SurfaceTextureListener, MediaPlayer.OnVideoSizeChangedListener {
TextureView textureView;
private MediaPlayer mediaPlayer;
AssetFileDescriptor fileDescriptor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textureView = findViewById(R.id.textureView);
textureView.setSurfaceTextureListener(this);
mediaPlayer = new MediaPlayer();
try {
fileDescriptor = getAssets().openFd("videoplayback.mp4");
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) {
Surface surface = new Surface(surfaceTexture);
try {
mediaPlayer.setSurface(surface);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
mediaPlayer.setDataSource(fileDescriptor);
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();
}
});
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
return false;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
}
@Override
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
}
}ステップ5:AndroidManifest.xmlを確認する
最後に、androidManifest.xml が以下のようになっていることを確認します。特別な権限は不要ですが、ランチャーアクティビティとして MainActivity が登録されている必要があります。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.com.sample">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>アプリを実行して動作を確認する
それでは、実際にアプリを実行してみましょう。ここでは、実機のAndroidスマートフォンをパソコンに接続しているものとして説明します。Android Studioからアプリを起動するには、プロジェクト内のアクティビティファイルを開き、ツールバーにある「Run」アイコンをクリックします。接続したモバイルデバイスを選択すると、端末の画面上で動画が自動再生されることが確認できます。
まとめ
TextureViewとMediaPlayerを組み合わせることで、View階層内で柔軟に動画を表示できます。動画の変形やアニメーションと組み合わせたい場合には、SurfaceViewよりもTextureViewの方が適しています。ぜひ本記事の手順を参考に、自分のアプリに動画再生機能を実装してみてください。
-
Androidスマホでアプリをサイドロードする方法|APKインストールの手順と注意点を徹底解説
Androidの最大の魅力は、何といっても選択肢の豊富なアプリです。Playストアだけでも数百万ものアプリが公開されており、どんなタスクでも少なくとも10個以上の候補から選ぶことができます。こうした充実したアプリ群こそが、Androidが「最もカスタマイズ性の高いOS」と呼ばれる理由の一つとなっています。端末にインストールされたアプリの組み合わせによって、あなたのAndroid体験は他の人とは違う、あなただけの特別なものになるのです。 しかし、話はこれで終わりではありません。Playストアには無数のアプリがありますが、すべてのアプリが掲載されているわけではないのです。さまざまな理由(後述しま
-
Androidスマホで動画を手ブレ補正する方法|Googleフォトと無料アプリで簡単スタビライズ
スマホで撮影した動画の品質は、FPS(フレームレート/秒間コマ数)で測ることができます。FPSが高いほど、より滑らかで高品質な動画になります。しかし、それ以上に重要なのが撮影中のスマホを安定させておくことです。Androidスマホに高性能なカメラが搭載されていても、撮影時に手ブレや揺れがあれば、仕上がりは期待できません。三脚をいつも持ち歩いている人は少ないものです。移動中の車内や走りながら撮影した動画は、どうしてもブレてしまい、品質が損なわれます。そこで本記事では、Androidスマホで撮影した動画を手ブレ補正(スタビライズ)する方法を、初心者にもわかりやすく解説します。Androidスマホで