0

ビデオビューのみを含むフルスクリーンアクティビティでmp4ビデオをストリーミングしようとしています。しかし、私の galaxt s3 では簡単に再生できますが、ほとんどのデバイスでは再生できません。ビデオのエンコーディングに関するものだと思います(ちなみに、どのビデオが再生され、どのビデオが再生されないかを知るには、コーデックの第一人者である必要があります)。

これが私が使用しているコードです。

    //make screen full with video
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFormat(PixelFormat.TRANSLUCENT);
    setContentView(R.layout.full_screen_video);

    //get extra video source string
    Intent intent = getIntent();
    if(intent != null){
        videoSrc = intent.getStringExtra(TefalTvApp.RECIPE_VIDEO_SOURCE);
        if (DEBUG) {
            Log.d(TAG, "Recipe title : " + videoSrc);   
        }
    }

    video = (VideoView) findViewById(R.id.recipeVideo);
    controller = new MediaController(FullScreenVideoActivity.this);
    controller.setMediaPlayer(video);
    video.setMediaController(controller);
    video.setVideoPath(videoSrc);
    video.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            if (DEBUG) {
                Log.d(TAG, "Hello wworld");
            }
        }
    });

    video.setOnPreparedListener(new OnPreparedListener() {

        @Override
        public void onPrepared(MediaPlayer mp) {
            video.requestFocus();
            video.start();  
        }
    });

これがデバッグ結果です。デバッグにビデオの URL があります。

08-23 23:25:53.349: D/RecipeDetailActivity(18179): Video src : http://www.tefaltv.com/Upload/Video/acticook_kiymalifasulye.mp4
08-23 23:25:53.379: I/ApplicationPackageManager(18179): cscCountry is not German : TUR
08-23 23:25:53.389: D/FullScreenVideoActivity(18179): Recipe title : http://www.tefaltv.com/Upload/Video/acticook_kiymalifasulye.mp4
08-23 23:25:53.399: D/VideoView(18179): onMeasure()
08-23 23:25:53.399: I/VideoView(18179):     Setting size: 480x295
08-23 23:25:53.439: I/MediaPlayer(18179): uri is:http://www.tefaltv.com/Upload/Video/acticook_kiymalifasulye.mp4
08-23 23:25:53.439: I/MediaPlayer(18179): path is null
08-23 23:25:53.439: D/MediaPlayer(18179): Couldn't open file on client side, trying server side
08-23 23:25:53.519: D/VideoView(18179): onMeasure()
08-23 23:25:53.519: I/VideoView(18179):     Setting size: 480x295
08-23 23:25:57.689: I/VideoView(18179): start()
08-23 23:25:57.739: D/VideoView(18179): onMeasure()
08-23 23:25:57.739: I/VideoView(18179):     Setting size: 480x270
08-23 23:25:57.759: E/MediaPlayer(18179): error (1, -2147483648)
08-23 23:25:57.769: I/VideoView(18179): start()
08-23 23:25:57.779: E/MediaPlayer(18179): start called in state 0
08-23 23:25:57.779: E/MediaPlayer(18179): error (-38, 0)
08-23 23:25:57.799: E/MediaPlayer(18179): Error (1,-2147483648)
08-23 23:25:57.799: D/VideoView(18179): Error: 1,-2147483648
08-23 23:25:57.799: E/MediaPlayer(18179): Error (-38,0)
08-23 23:25:57.799: D/VideoView(18179): Error: -38,0

更新: ビデオ エンコーディングの詳細: フォーマット: H.264、624 x 351 AAC、44100 Hz、ステレオ (LR) FPS: 25 データ レート: 2.23mbit/s 現在のサイズ: 624x351 px 実際

4

3 に答える 3

1

これは主にエンコーディングが原因です。あなたの動画ファイルの解像度は標準ではない 624x351 であることがわかりました。それが理由の 1 つかもしれません。また、ほとんどの Android 携帯電話の 30 fps のように、すべてのモバイル デバイスに上限があるため、最大ビット レートと fps を確認してください。このドキュメントを参照して、ファイルをすべての Android フォンと互換性を持たせる必要があります。Android メディア形式

また、エンコード コマンドを共有できる場合 (実行している場合)、問題の追跡が容易になります。

于 2012-08-23T21:02:22.563 に答える
-1

アプリケーションを正常に実行している次のコードをお勧めします

コードは次のとおりです。

XMLファイル:

     <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#f0f0f0" >

        <Button
            android:id="@+id/btnVideoGallery"
            android:layout_width="75dp"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="15dp"
            android:text="@string/gallery" />

        <Button
            android:id="@+id/btnCancel"
            android:layout_width="120dp"
            android:layout_height="wrap_content"
            android:layout_below="@+id/btnVideoGallery"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="22dp"
            android:text="@string/cancel" />

        <TextView
            android:id="@+id/lblDisplayImage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/btnCancel"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="10dp"
            android:text="@string/below_this_text_video_will_be_displayed"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="#000000"
            android:textSize="13dp" />

        <VideoView
            android:id="@+id/vvDisplayVideo"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/lblDisplayImage"
            android:layout_marginTop="15dp" />

    </RelativeLayout>

Javaファイル:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.MediaController;
import android.widget.VideoView;

public class VideoActivity extends Activity {

    private Button btnVideoGallery,btnCancel;
    private VideoView vvDisplayVideo;
    /** The Constant PICK_VIDEO. */
    private static final int PICK_VIDEO=1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video_options);

        btnVideoGallery=(Button)findViewById(R.id.btnVideoGallery);
        vvDisplayVideo=(VideoView)findViewById(R.id.vvDisplayVideo);
        btnCancel=(Button)findViewById(R.id.btnCancel);
        vvDisplayVideo.setVisibility(View.GONE);

        btnVideoGallery.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                Intent video=new Intent();
                video.setAction(Intent.ACTION_PICK);
                video.setType("video/*");
                startActivityForResult(video, PICK_VIDEO);

            }
        });

        btnCancel.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                Intent goStartUp=new Intent(VideoActivity.this, StartUpActivity.class);
                goStartUp.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(goStartUp);
                finish();
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        if (resultCode==Activity.RESULT_OK && requestCode == PICK_VIDEO) {

            vvDisplayVideo.setVisibility(View.VISIBLE);
            vvDisplayVideo.setVideoURI(data.getData());
            vvDisplayVideo.setFocusable(true);
            MediaController mc=new MediaController(this);
            vvDisplayVideo.setMediaController(mc);
            Log.i("True", "Executed");
        }
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub

        Intent goStartUp=new Intent(VideoActivity.this, StartUpActivity.class);
        goStartUp.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(goStartUp);
        finish();
        return super.onKeyDown(keyCode, event);
    }
}

また、用途に応じてマニフェストファイルを変更できます。

<manifest ...
<uses-sdk...  />
<uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.RECORD_VIDEO" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <uses-feature
        android:name="android.hardware.camera"
        android:required="false" />

<application .....
</application>

</manifest>
于 2012-11-19T15:30:31.800 に答える
-1

ストリーミングされているビデオのサイズがビデオビューのサイズと異なります

于 2014-05-27T14:08:49.133 に答える