私はAndroidエミュレーターで動画を再生しようとしていますが、アセットフォルダーと生のフォルダーにビデオがありますAndroid 2.1私のビデオ形式はmp4ですので、それが問題になるとは思いません。
問題は、ビデオを表示するために必要なVideoViewが、ビデオを指すためにURIまたはファイルパスのみを取ることです。
ビデオをrawフォルダーまたはassetフォルダーに保存すると、入力ストリームまたはファイル記述子しか取得できず、VideoViewを初期化するために使用できるものはないようです。
更新
MediaPlayerの例を詳しく見て、以下のコードのように、アセットファイルにFileDescriptorを指定してMediaPlayerを起動しようとしました。
SurfaceView videoView = (SurfaceView) findViewById(gettingStarted)
SurfaceHolder holder = videoView.getHolder();
holder.setType(SurfaceHolder.SURFACE_TYPE_Push_BUFFERS);
final MediaPlayer player = new MediaPlayer();
player.setDisplay(holder);
player.setDataSource(getAssets().openFd(fileName).getFileDescriptor());
player.prepareAsync();
player.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
今、私は次の例外を受け取ります:
Java.io.FileNotFoundException: This file can not be opened as a file descriptor; it is probably compressed
起動時にSDカードにファイルをコピーする他の方法はないと思われ、それは時間とメモリの無駄のようです。
## Android 1.6 ## 以降、完全に動作しています
getWindow().setFormat(PixelFormat.TRANSLUCENT);
VideoView videoHolder = new VideoView(this);
//if you want the controls to appear
videoHolder.setMediaController(new MediaController(this));
Uri video = Uri.parse("Android.resource://" + getPackageName() + "/"
+ R.raw.your_raw_file); //do not add any extension
//if your file is named sherif.mp4 and placed in /raw
//use R.raw.sherif
videoHolder.setVideoURI(video);
setContentView(videoHolder);
videoHolder.start();
String UrlPath="Android.resource://"+getPackageName()+"/"+R.raw.ur file name;
videocontainer.setVideoURI(Uri.parse(UrlPath));
videocontainer.start();
ここで、タイプvideoviewのvideocontainer。
試してください:
AssetFileDescriptor afd = getAssets().openFd(fileName);
player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(), afd.getLength());
PlayVideoActivity.Java:
public class PlayVideoActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_play_video);
VideoView videoView = (VideoView) findViewById(R.id.video_view);
MediaController mediaController = new MediaController(this);
mediaController.setAnchorView(videoView);
videoView.setMediaController(mediaController);
videoView.setVideoURI(Uri.parse("Android.resource://" + getPackageName() + "/" + R.raw.documentariesandyou));
videoView.start();
}
}
activity_play_video.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:gravity="center" >
<VideoView
Android:id="@+id/video_view"
Android:layout_width="match_parent"
Android:layout_height="match_parent" >
</VideoView>
</LinearLayout>
よく覚えていれば、アセットフォルダーからデータベースを読み込むときにも同じような問題がありました。アセットフォルダーの内容には、圧縮されているかどうかにかかわらず、2つの統計情報が含まれているようです。
圧縮されている場合は、1か月分のメモリを圧縮解除できます。そうしないと、この種の例外が発生します。ドキュメンテーションが明確でないため、それについて いくつかのバグレポート があります。したがって、まだフォーマットを使用したい場合は、非圧縮バージョンを使用するか、ファイルに.mp3や.pngなどの拡張子を付ける必要があります。私はそれが少しクレイジーであることを知っていますが、.mp3拡張子を持つデータベースをロードし、それは完全に正常に動作します。この他の解決策は、特定の拡張子を圧縮しないように指示する特別なオプションを使用してアプリケーションをパッケージ化することです。ただし、アプリを手動でビルドし、「Zip -0」オプションを追加する必要があります。
[。
ビデオをSDCardに手動で配置し、SDCardのビデオストアを再生しようとしましたか?
それが機能している場合は、ここからRawからSDカードにコピーする方法を見つけることができます:
VideoView myVideo = (VideoView) rootView.findViewById(R.id.definition_video_view);
//Set video name (no extension)
String myVideoName = "my_video";
//Set app package
String myAppPackage = "com.myapp";
//Get video URI from raw directory
Uri myVideoUri = Uri.parse("Android.resource://"+myAppPackage+"/raw/"+myVideoName);
//Set the video URI
myVideo.setVideoURI(myVideoUri);
//Play the video
myVideo.start();
見つけた :
Uri raw_uri = Uri.parse(<package_name>/+R.raw.<video_file_name>);
Personnaly Androidはリソースを見つけましたが、現時点では再生できません。私のファイルは.m4vです
this に目を向ける必要があると思います。必要なものはすべて揃っているはずです。
編集:リンクを見たくない場合-これはあなたが望むものをほとんどまとめています。
MediaPlayer mp = MediaPlayer.create(context、R.raw.sound_file_1); mp.start();
しかし、リンクの情報を読むことをお勧めします。
fileName
には、ファイルへの相対パスを指定する必要があります(/asset
) 例えば:
player.setDataSource(
getAssets().openFd(**"media/video.mp4"**).getFileDescriptor()
);
私と同じ問題を抱えているようです。 MP4を使用する代わりに、3GPPは可能ですか? HandBrakeなどをビデオコンバーターとして使用したと思います... H.264xなどの適切なエンコーダーがあることを確認するだけです。少しあいまいになってすみません、しばらくしてきました。また、可能であれば、Android 2.1を心配する必要はありません。また、EMULATORでは動作しないものもあります。したがって、多くのデバイスで動作する場合は、動作します(特に異なるメーカーで)
ここで、あなたは私の問題と私が問題をどのように解決したかを読むことができます(長い時間の後、誰も答えがありませんでした)。ここで詳細を説明しました: Androidメディアプレーヤーが動作していません
MediaPlayer
APIとサンプルコードを使用します。
メディアファイルをraw
フォルダーに入れます。
_file descriptor
_をファイルに取得します。
mediaplayer.setDataSource(fd,offset,length);
-3つの引数を持つコンストラクタ。
次に、onPreared
、mediaplayer.start();