相关疑难解决方法(0)

在VideoView中定位视频

所以我扩展了VideoView的onMeasure以扩展视频以适应全屏视图.

这是如何:

public void setVideoAspect(int w,int h){
    wVideo=w;
    hVideo=h;
    onMeasure(w, h);
}
 @Override
 protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
 {
     super.onMeasure(widthMeasureSpec, heightMeasureSpec);
     if(wVideo!=0 && hVideo!=0)
     setMeasuredDimension(wVideo,hVideo);
 }
Run Code Online (Sandbox Code Playgroud)

我使用屏幕的显示指标(宽度,高度)调用setVideoAspect().问题是这种方法会拉伸视频以适应屏幕内部.我希望能够保持纵横比.(我有4:3的视频和3:2的屏幕尺寸.)我使用下面的代码给视图保留比率测量值:

int height =  (int) (metrics.widthPixels*3/(float)4);
                        int width=  metrics.widthPixels;   
                        mVideoView.setVideoAspect(width,height);
Run Code Online (Sandbox Code Playgroud)

所以这可以完成这项工作,但是有一个问题:它给了我一个4:3的视频,屏幕的宽度和正确的比例,但它不会使视频居中.(它只是播放视频的底部而不是顶部和底部.)我有一个包含VideoView的相对布局,VideoView的重力设置为居中.

layout android android-videoview

52
推荐指数
4
解决办法
4万
查看次数

VideoView onResume丢失了视频的缓冲部分

我正在进行活动

  1. VideoView - 从网络服务器流式传输视频.

  2. 按钮 - 使用户进入下一个要显示的活动.

应用程序启动时,VideoView将从Web服务器播放视频.

现在假设

 Total Video length is 60 Minutes

 Current Video progress is 20 Minutes

 Current Buffered progress 30 Minutes 
Run Code Online (Sandbox Code Playgroud)

现在,当我点击上面提到的Button时,用户将进入下一个活动.

如果按下后退按钮,则从该活动开始,用户前面会显示"上一个活动"(带有VideoView和"按钮").但是当恢复时,视频的所有缓冲部分都会丢失,因此VideoView从一开始就播放视频,这真的很糟糕. < - 实际问题

问题

当Activity重新恢复时,视频的缓冲部分会丢失,因此会再次开始缓冲.那么如何克服重新缓冲视频的缓冲部分呢?

甚至官方Youtube Android应用程序.有同样的问题.

编辑1:

我在Activity中尝试了下面的代码,但它不起作用.

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    videoView.suspend();
}

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    videoView.resume();
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以指导我这个问题吗?或者我错过了一些能使这项工作完美的东西?

目前的解决方法

我已经用onPause()方法和onResume()方法保存了视频的当前播放位置,我已经使用该位置来寻找该持续时间的视频.这很好用.但是视频缓冲从一开始就从搜索位置开始视频开始.

非常感谢任何帮助.

android video-streaming android-video-player android-videoview

30
推荐指数
3
解决办法
2万
查看次数

调整视频大小以适应VideoView

我正在使用AbsoluteLayout定位VideoView(我需要在特定位置的屏幕上的几个位置显示它).

public void showVideo(RectF bounds, final String videoUrl) {
    AbsoluteLayout.LayoutParams params = (AbsoluteLayout.LayoutParams) video.getLayoutParams();
    params.width = (int) bounds.width();
    params.height = (int) bounds.height();
    params.x = (int) bounds.left;
    params.y = (int) bounds.top;

    video.requestLayout();

    video.setVisibility(View.VISIBLE);
    video.setFocusable(true);
    video.setFocusableInTouchMode(true);
    video.requestFocus();

    File file = new File(videoUrl);
    video.setVideoPath(file.getAbsolutePath());
    video.start();
}
Run Code Online (Sandbox Code Playgroud)

但视频没有调整到我指定的范围.

有小费吗?

另一个相关的问题是,如何通过VideoView使MediaController显示?

android android-video-player

17
推荐指数
2
解决办法
4万
查看次数

以纵向模式拍摄的旋转视频

我的应用程序允许用户捕获视频:

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_VIDEO_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_VIDEO_REQUEST); 
Run Code Online (Sandbox Code Playgroud)

或图片:

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); 
Run Code Online (Sandbox Code Playgroud)

在图片的情况下,我可以判断它们是否以除横向以外的任何模式拍摄,然后在我将它们上传到网络之前旋转它们:

ExifInterface exif = new ExifInterface(fileName);
int exifOrientation = Integer.parseInt(exif.getAttribute(ExifInterface.TAG_ORIENTATION));
float rotate = 0;
switch (exifOrientation){
case ExifInterface.ORIENTATION_ROTATE_90:
    rotate = 90;
    break;
case ExifInterface.ORIENTATION_ROTATE_180:
    rotate = 180;
    break;
case ExifInterface.ORIENTATION_ROTATE_270:
    rotate = 270;
    break;
}

if(rotate > 0){
    Bitmap bitmap = BitmapFactory.decodeFile(fileName);
    Matrix matrix = new Matrix();
    matrix.postRotate(rotate);
    bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
    OutputStream outStream = context.getContentResolver().openOutputStream(Uri.fromFile(file));
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream); …
Run Code Online (Sandbox Code Playgroud)

java video android

15
推荐指数
1
解决办法
7551
查看次数

如何在某个特定位置观看视频内的视频?

我目前正在尝试实施一个视频视频,该视频将显示特定位置的视频.我可以毫无问题地显示全屏视频.但是每当我试图在一个帧内显示该视频时(例如一个小矩形),我只能在该视图中显示一部分视频.我无法将视频放入该视图中.

我已经在android中查找了很多关于缩放视频的链接,但是我无法找到任何方法来做到这一点.有关该问题的任何帮助都会有所帮助.

我正在使用的是我有2个不同的课程.其中一个是我的视频活动类,另一个是帮助类:

public class VideoViewCustom extends VideoView {
    private int mForceHeight = 0;
    private int mForceWidth = 0;
    public VideoViewCustom(Context context) {
        super(context);
    }     
    public VideoViewCustom(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public VideoViewCustom(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public void setDimensions(int w, int h) {
        this.mForceHeight = h;
        this.mForceWidth = w;
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
         setMeasuredDimension(mForceWidth, mForceHeight);
    }
}
Run Code Online (Sandbox Code Playgroud)

该课程帮助我正确设置videoview的尺寸,但我无法使视频适合该区域.我的意思是我无法缩放视频以适应该区域.我不知道android是否自动缩放到给定的尺寸但我不能这样做.

video android android-videoview

15
推荐指数
1
解决办法
2300
查看次数

旋转回肖像时,避免Android VideoView损坏

我设法写了一个有限的视频播放器,能够从互联网上查看.3gp文件.视频将以全屏显示,保持视频宽高比.此外,旋转不会中断视频,从而保持播放没有问题.

一切似乎都很好,但是......当你旋转回到肖像时,我的HTC图例中,视频已损坏,而不是显示全屏,它以原始像素大小显示.但再次旋转到景观作品,并完美展现.有什么想法吗?不幸的是,我没有更多的硬件来测试它,我已经用尽了测试的想法.

您可以从https://github.com/gradha/Android-video-stream-rotation获取完整的示例源代码.以下是我打开应用程序,旋转到横向,触摸屏幕以显示视频控件,然后旋转回到肖像以查看损坏的屏幕截图. 视频开始画像正常

在风景上视频也很好用

但现在回到肖像总是显示腐败

android corruption screen-rotation android-videoview

10
推荐指数
1
解决办法
8903
查看次数

旋转时,MediaPlayer向前跳过约6秒

我在片段中有一个MediaPlayer,它在配置更改时保留其实例.播放器正在播放从我的资源目录加载的视频.我设置了方案,目的是重现YouTube应用程序播放,其中音频在配置更改期间继续播放,并且显示器已分离并重新连接到媒体播放器.

当我开始播放并旋转设备时,位置会向前跳跃约6秒,并且(必要时)音频会在发生这种情况时切断.然后,播放继续正常进行.我不知道是什么导致这种情况发生.

根据要求,这是代码:

public class MainFragment extends Fragment implements SurfaceHolder.Callback, MediaController.MediaPlayerControl {

    private static final String TAG = MainFragment.class.getSimpleName();

    AssetFileDescriptor mVideoFd;

    SurfaceView mSurfaceView;
    MediaPlayer mMediaPlayer;
    MediaController mMediaController;
    boolean mPrepared;
    boolean mShouldResumePlayback;
    int mBufferingPercent;
    SurfaceHolder mSurfaceHolder;

    @Override
    public void onInflate(Activity activity, AttributeSet attrs, Bundle savedInstanceState) {
        super.onInflate(activity, attrs, savedInstanceState);
        final String assetFileName = "test-video.mp4";
        try {
            mVideoFd = activity.getAssets().openFd(assetFileName);
        } catch (IOException ioe) {
            Log.e(TAG, "Can't open file " + assetFileName + "!");
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState) { …
Run Code Online (Sandbox Code Playgroud)

audio android surfaceview android-mediaplayer

6
推荐指数
2
解决办法
3414
查看次数

布局宽度和高度被忽略

我有一个内部布局和SurfaceTexture视频流的对话框.当我收到视频widthheight视频时,我会调整我的布局:

private void resizeView(final VideoFormatInfo info) {
        final Size size = calculateSize(info.getWidth(), info.getHeight());
        mActivity.runOnUiThread(new Runnable() {
            @Override
            public void run() {

                final ViewGroup.LayoutParams layoutParams = mInnerLayout.getLayoutParams();
                layoutParams.width = size.x;
                layoutParams.height = size.y;
                Log.i(TAG, String.format("run: setting innerlayout bounds to %d,%d", size.x, size.y));
                mInnerLayout.setLayoutParams(layoutParams);
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

现在我有一个全屏按钮,应该将布局调整到整个屏幕.但是当我按下它时,布局仍然在屏幕的一个小区域内.

当我检查日志中正确的值size.xsize.y是否(屏幕的边界),但布局没有正确调整大小.

innerlayout被添加到名为"VideoPlayer"的customView中.我将视频播放器背景的颜色设置为红色,因此当我切换到全屏时,整个屏幕变为红色,除了中间的视频流.这意味着底层视图正在适当调整大小,但innerLayout不是出于某种原因.

有趣的是,我在视频渲染上有另一种布局,可以创建"闪光效果"来模拟拍摄快照时的相机闪光.触发该闪光效果后,视频将调整为整个屏幕.

所以这是我的布局树:

VideoPlayerView (CustomView, not VideoView)
     innerLayout (RelativeLayout)
         videoSurfaceTexture (SurfaceTextureView)
         flashLayout (RelativeLayout)
Run Code Online (Sandbox Code Playgroud)

我也将其设置为调试:

 @Override
            public void onSurfaceTextureSizeChanged(final SurfaceTexture surfaceTexture, final int width, …
Run Code Online (Sandbox Code Playgroud)

layout android

6
推荐指数
1
解决办法
840
查看次数

滚动视图中的视频视图问题

我已经用谷歌搜索了很多来解决这个问题,但是在任何情况下都行不通。尝试具有videoview 的ScrollViewAndroid Scrollview 内的Android :: VideoView中提到的所有操作,都出现了问题

问题是当我将视频视图放入scrollview时不起作用,但是当删除scrollview时,它确实可以正常工作。

这是示例代码:

// xml file
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/btn_video"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="start" />

    <ScrollView
        android:id="@+id/scrl"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/btn_video" >

        <VideoView
            android:id="@+id/videoView_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </ScrollView>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

和Java代码,MainActivity

package com.practice.videoviewexample;


import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.widget.Button;
import android.widget.VideoView;

public class MainActivity extends Activity {

    private VideoView videoView_exhibit;
    private Button btnVideo;

    @Override
    protected void …
Run Code Online (Sandbox Code Playgroud)

android android-scrollview android-videoview

4
推荐指数
1
解决办法
4697
查看次数