마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 스튜디오 videoview 재생시 동영상을 재생할수 없습니다.

0 추천

videoview로 웹에있는 영상 재생시 동영상을 재생할수 없습니다. 라는 팝업이뜹니다...

웹뷰로도 실행해봤는데 소리만 나오고 영상은 출력이안되네요 ㅜㅜ 구글링에서 동원할 수 있는 방법은 다 동원해본거같습니다!! 우선 최종적으로 필요없는거 뺀 소스코드입니다.. 진짜 이거가지고 5일내내 1시간 자면서 고민했는데 해결이안되요 ㅜㅜ 과제 제출이 담주 수요일인데 담주 월요일부터 기말기간이라 주말엔 공부해야되고.. 오늘 내일 중에 해결되면 좋겠습니다 ㅜ

package com.example.yyych.make_body;

import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.PixelFormat;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.TextView;
import android.widget.VideoView;

public class VideoActivity extends Activity {

    private String url, description;
    TextView descriptionText;
    VideoView videoView;
    private static ProgressDialog progressDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.video);

        url = getIntent().getStringExtra("URL");
        description = getIntent().getStringExtra("DESCRIPTION");

        descriptionText = (TextView) findViewById(R.id.textDescription);

        if(Build.VERSION.SDK_INT >= 11)
        {
            getWindow().addFlags(16777216);
        }
        descriptionText.setText(description);
        videoView = (VideoView) findViewById(R.id.videoView1);


        progressDialog = ProgressDialog.show(VideoActivity.this, "", "Buffering video...", true);
        progressDialog.setCancelable(true);


        PlayVideo();

    }
    private void PlayVideo()
    {
        try
        {
            getWindow().setFormat(PixelFormat.TRANSLUCENT);
            MediaController mediaController = new MediaController(VideoActivity.this);
            mediaController.setAnchorView(videoView);

            Uri video = Uri.parse(url);
            videoView.setMediaController(mediaController);
            videoView.setVideoURI(video);
            videoView.requestFocus();
            videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener()
            {

                public void onPrepared(MediaPlayer mp)
                {
                    progressDialog.dismiss();
                    videoView.start();
                }
            });


        }
        catch(Exception e)
        {
            progressDialog.dismiss();
            System.out.println("Video Play Error :"+e.toString());
            finish();
        }

    }
}
 
아래는 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:orientation="vertical">

        <VideoView
            android:id="@+id/videoView1"
            android:layout_width="match_parent"
            android:layout_height="280dp">
        </VideoView>

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <TextView
            android:id="@+id/textDescription"
            android:layout_width="match_parent"
            android:layout_height="170dp"
            android:gravity="center"
            android:text=""
            android:textSize="18dp"/>
    </ScrollView>
 </LinearLayout>

에러는...

06-09 08:21:14.630 2573-2573/com.example.yyych.make_body D/VideoView: Error: 1,0
06-09 08:21:14.685 2573-2573/com.example.yyych.make_body I/Choreographer: Skipped 184 frames!  The application may be doing too much work on its main thread.

엉큰이 (120 포인트) 님이 2017년 6월 9일 질문
엉큰이님이 2017년 6월 9일 수정

3개의 답변

0 추천
로그가 너무 짧아 정확한 원인은 파악이 안됩니다.

코드 상 문제는 딱히 안 보이고, 파일 경로가 잘 못 되었거나, 권한 이슈 혹은,   안드로이드에서 지원하는 형식의 파일이 아닌듯 합니다.

http://download.atmark-techno.com/sample/bbb/big-buck-bunny-30sec-800x480.mp4 파일로 돌려 보시고

돌아가면

 h264/aac 형식의 mp4 로 재 인코딩 해서 돌리세요.
익명사용자 님이 2017년 6월 9일 답변
제가 다른친구 노트북으로 옮겨서 돌리니까 잘돌아가는데 ㅠㅠ 동영상문제는 아닌거같습니가 ㅠ avd버전문제인거같은데 avd버전 지금 api25누가로 되있는데 sdk22버전 디운받았는데 바꾸려해도 누가밖에안뜹니다 ㅠㅠㅠ
노트북으로 옮겨서 돌렸을 때 돌아간다는 애긴 애뮬레이터로 돌리신 듯 한데,
친구 노트북으론 동작 된다는 것으로 봐서는  파일 이슈는 아닐 듯 하고, 권한 이슈일 가능성이 높을 듯 한데,
인터넷 권한이 없어 발생한 오류로 생각됩니다.
특히  22는 되고 25는 안된다는 것으로 보아선 runtime permission을 안 주신 듯 한데요.. 런타임  권한 추가해  보세요. http://gun0912.tistory.com/55
0 추천
올린 에러는 일종의 경고 메시지로 재생이 안되는 것과는 직접적인 관련이 없습니다.

 

WebView 및 VideoView가 이 세상에 존재하는 모든 동영상 포맷을 지원하지는 않습니다.

기기에 따라 지원하는 포맷이 달라집니다.

다른 포맷 동영상으로 테스트해보세요.
익명사용자 님이 2017년 6월 9일 답변
제가 다른친구 노트북으로 옮겨서 돌리니까 잘돌아가는데 ㅠㅠ 동영상문제는 아닌거같습니가 ㅠ avd버전문제인거같은데 avd버전 지금 api25누가로 되있는데 sdk22버전 디운받았는데 바꾸려해도 누가밖에안뜹니다 ㅠㅠㅠ
0 추천
이미 해결하셨을 것 같지만.. 도움이될까하여 답글 달고갑니다. 주된 에러원인은 "The application may be doing too much work on its main thread." 라고 잘 나와있네요.

메인스레드에서 너무 많은 작업을 처리하고 있습니다. 스레드를 직접 만드셔서 다른 스레드에서 비동기로 처리하시면 될 것 같습니다. 예를들어 asyncTask 같은걸로말이죠 !
네비자동실행 님이 2019년 6월 3일 답변
...