videoView.setVideoPath();
でビデオを再生するのに問題があります
実際、ビデオは再生されません。理由はわかりません。ビデオのパスは正しいです。
これは私のコードです:
public class MainActivity extends AppCompatActivity {
private VideoView videoView;
private int position = 0;
private MediaController mediaController;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
videoView = (VideoView) findViewById(R.id.videoView);
// Set the media controller buttons
if (mediaController == null) {
mediaController = new MediaController(MainActivity.this);
// Set the videoView that acts as the anchor for the MediaController.
mediaController.setAnchorView(videoView);
// Set MediaController for VideoView
videoView.setMediaController(mediaController);
}
try {
// ID of video file.
String videoUrl="https://www.youtube.com/watch?v=JHdmkP-nfsA";
videoView.setVideoPath(videoUrl);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
videoView.requestFocus();
// When the video file ready for playback.
videoView.setOnPreparedListener(new OnPreparedListener() {
public void onPrepared(MediaPlayer mediaPlayer) {
videoView.seekTo(position);
if (position == 0) {
videoView.start();
}
// When video Screen change size.
mediaPlayer.setOnVideoSizeChangedListener(new MediaPlayer.OnVideoSizeChangedListener() {
@Override
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
// Re-Set the videoView that acts as the anchor for the MediaController
mediaController.setAnchorView(videoView);
}
});
}
});
}
}
誰が私を助けられるか?
みんなありがとう!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
LOGCAT:
Couldn't open https://www.youtube.com/watch?v=JHdmkP-nfsA: Java.io.FileNotFoundException: No content provider: https://www.youtube.com/watch?v=JHdmkP-nfsA
10-29 12:27:28.419 25932-25932/com.example.marco.ud D/MediaPlayer: setDataSource IOException | SecurityException happend :
Java.io.FileNotFoundException: No content provider: https://www.youtube.com/watch?v=JHdmkP-nfsA
at Android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.Java:1137)
at Android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.Java:988)
at Android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.Java:911)
at Android.media.MediaPlayer.attemptDataSource(MediaPlayer.Java:1102)
at Android.media.MediaPlayer.setDataSource(MediaPlayer.Java:1093)
at Android.widget.VideoView.openVideo(VideoView.Java:356)
at Android.widget.VideoView.-wrap0(VideoView.Java)
at Android.widget.VideoView$7.surfaceCreated(VideoView.Java:632)
at Android.view.SurfaceView.updateWindow(SurfaceView.Java:656)
at Android.view.SurfaceView$3.onPreDraw(SurfaceView.Java:172)
at Android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.Java:1013)
at Android.view.ViewRootImpl.performTraversals(ViewRootImpl.Java:2510)
at Android.view.ViewRootImpl.doTraversal(ViewRootImpl.Java:1519)
at Android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.Java:7113)
at Android.view.Choreographer$CallbackRecord.run(Choreographer.Java:927)
at Android.view.Choreographer.doCallbacks(Choreographer.Java:702)
at Android.view.Choreographer.doFrame(Choreographer.Java:638)
at Android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.Java:913)
at Android.os.Handler.handleCallback(Handler.Java:751)
at Android.os.Handler.dispatchMessage(Handler.Java:95)
at Android.os.Looper.loop(Looper.Java:154)
at Android.app.ActivityThread.main(ActivityThread.Java:6780)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1496)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:1386)
YouTubeビデオをVideoViewまたはExoPlayer、そのためには、まずビデオをダウンロードしてから、そのビデオのロケールパスをメソッドVideoView.setVideoPath("path")
に設定する必要があります
YouTube動画のみを再生する場合は、 YouTube Android Player API を使用し、他のリモートビデオ(.mp4、.ogg、.3gpなど)のみを再生する場合は、VideoView.setVideoURI("uri")
メソッドを使用します。
例-
String videoUrl = "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4";
try {
// Start the MediaController
MediaController mediacontroller = new MediaController(this);
mediacontroller.setAnchorView(videoview);
// Get the URL from String videoUrl
Uri video = Uri.parse(videoUrl);
videoview.setMediaController(mediacontroller);
videoview.setVideoURI(video);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
videoview.setOnPreparedListener(new OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
videoview.start();
}
});
VideoView.setVideoPath
には、デバイス上のローカルパスが必要です。リモートのMP4などを再生したい場合は、代わりにsetVideoURI
を試してください。 VideoViewドキュメント
アプリにYouTube動画を埋め込む場合は、 YouTube Android Player API を使用するか、WebView
のようなものを使用することを検討してください
同じ問題がありましたが、それは企業のプロキシサーバーが原因でした。モバイルインターネットで同じアプリを使用したところ、機能し始めました。それが誰かの時間を節約することを願っています
VideoViewの代わりに ExoPlayer を使用することをお勧めします:
アプリグラドル:
implementation 'com.google.Android.exoplayer:exoplayer:2.10.8'
レイアウトxml:
<com.google.Android.exoplayer2.ui.PlayerView
Android:id="@+id/video_view"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_centerInParent="true" />
Javaコード:
PlayerView videoView = findViewById(R.id.video_view);
SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(this);
videoView.setPlayer(player);
// Produces DataSource instances through which media data is loaded.
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this, Util.getUserAgent(this, "yourApplicationName"));
// This is the MediaSource representing the media to be played.
MediaSource videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(fileEntity.getPath()));
// Prepare the player with the source.
player.prepare(videoSource);
player.setPlayWhenReady(true);
VideoView
を使用しています
ビデオファイルを表示します。 VideoViewクラスは、さまざまなソース(リソースやコンテンツプロバイダーなど)から画像を読み込むことができます。
setVideoURI
を試してみてください
または: ExoPlayer 最小SDK> 16の場合
またはSurfaceView
を使用します。
SurfaceView surfaceView = (SurfaceView)findViewById(R.id.surfaceView);
SurfaceHolder surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
mediaPlayer.setDataSource(STREAM_URL);
mediaPlayer.setDisplay(surfaceHolder);
mediaPlayer.start();
}
参照: https://developer.Android.com/reference/Android/widget/VideoView.html