android arm 7a设备使用VLC库播放视频流(RTSP流) android 9手机和android 7设备都正常使用

  • b3_653827
    了解作者
  • 32.6MB
    文件大小
  • 文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-05-14 08:44
    上传日期
libvlc-armv7-3.1.5.aar是arm 7a设备使用,本人手机是华为arm 64需要将代码依赖的aar改成libvlc-armv8-3.1.5.aar。安卓程序动不动就闪退,本人汤坑无数才完成这个资源。
VlcApplication.rar
内容介绍
package com.example.vlcapplication; import android.annotation.TargetApi; import android.content.res.Configuration; import android.graphics.PixelFormat; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.util.Log; import android.view.SurfaceView; import android.view.TextureView; import android.view.View; import android.view.ViewGroup; import android.view.ViewStub; import android.widget.FrameLayout; import androidx.appcompat.app.AppCompatActivity; import org.videolan.libvlc.IVLCVout; import org.videolan.libvlc.LibVLC; import org.videolan.libvlc.Media; import org.videolan.libvlc.MediaPlayer; import java.util.ArrayList; public class MainActivity extends AppCompatActivity implements IVLCVout.OnNewVideoLayoutListener { private static final boolean USE_SURFACE_VIEW = true; private static final boolean ENABLE_SUBTITLES = true; private static final String TAG = "MainActivity"; private static final int SURFACE_BEST_FIT = 0; private static final int SURFACE_FIT_SCREEN = 1; private static final int SURFACE_FILL = 2; private static final int SURFACE_16_9 = 3; private static final int SURFACE_4_3 = 4; private static final int SURFACE_ORIGINAL = 5; private static int CURRENT_SIZE = SURFACE_BEST_FIT; private FrameLayout mVideoSurfaceFrame = null; private SurfaceView mVideoSurface = null; private SurfaceView mSubtitlesSurface = null; private TextureView mVideoTexture = null; private View mVideoView = null; private final Handler mHandler = new Handler(); private View.OnLayoutChangeListener mOnLayoutChangeListener = null; private LibVLC mLibVLC = null; private MediaPlayer mMediaPlayer = null; private int mVideoHeight = 0; private int mVideoWidth = 0; private int mVideoVisibleHeight = 0; private int mVideoVisibleWidth = 0; private int mVideoSarNum = 0; private int mVideoSarDen = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final ArrayList<String> args = new ArrayList<>(); args.add("-vvv"); mLibVLC = new LibVLC(this, args); mMediaPlayer = new MediaPlayer(mLibVLC); mVideoSurfaceFrame = (FrameLayout) findViewById(R.id.video_surface_frame); if (USE_SURFACE_VIEW) { ViewStub stub = (ViewStub) findViewById(R.id.surface_stub); mVideoSurface = (SurfaceView) stub.inflate(); if (ENABLE_SUBTITLES) { stub = (ViewStub) findViewById(R.id.subtitles_surface_stub); mSubtitlesSurface = (SurfaceView) stub.inflate(); mSubtitlesSurface.setZOrderMediaOverlay(true); mSubtitlesSurface.getHolder().setFormat(PixelFormat.TRANSLUCENT); } mVideoView = mVideoSurface; } else { ViewStub stub = (ViewStub) findViewById(R.id.texture_stub); mVideoTexture = (TextureView) stub.inflate(); mVideoView = mVideoTexture; } } @Override protected void onDestroy() { super.onDestroy(); mMediaPlayer.release(); mLibVLC.release(); } @Override protected void onStart() { super.onStart(); final IVLCVout vlcVout = mMediaPlayer.getVLCVout(); if (mVideoSurface != null) { vlcVout.setVideoView(mVideoSurface); if (mSubtitlesSurface != null) vlcVout.setSubtitlesView(mSubtitlesSurface); } else vlcVout.setVideoView(mVideoTexture); vlcVout.attachViews(this); final Media media = new Media(mLibVLC, Uri.parse("rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mp4")); mMediaPlayer.setMedia(media); media.release(); mMediaPlayer.play(); if (mOnLayoutChangeListener == null) { mOnLayoutChangeListener = new View.OnLayoutChangeListener() { private final Runnable mRunnable = new Runnable() { @Override public void run() { updateVideoSurfaces(); } }; @Override public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { if (left != oldLeft || top != oldTop || right != oldRight || bottom != oldBottom) { mHandler.removeCallbacks(mRunnable); mHandler.post(mRunnable); } } }; } mVideoSurfaceFrame.addOnLayoutChangeListener(mOnLayoutChangeListener); } @Override protected void onStop() { super.onStop(); if (mOnLayoutChangeListener != null) { mVideoSurfaceFrame.removeOnLayoutChangeListener(mOnLayoutChangeListener); mOnLayoutChangeListener = null; } mMediaPlayer.stop(); mMediaPlayer.getVLCVout().detachViews(); } private void changeMediaPlayerLayout(int displayW, int displayH) { /* Change the video placement using the MediaPlayer API */ switch (CURRENT_SIZE) { case SURFACE_BEST_FIT: mMediaPlayer.setAspectRatio(null); mMediaPlayer.setScale(0); break; case SURFACE_FIT_SCREEN: case SURFACE_FILL: { Media.VideoTrack vtrack = mMediaPlayer.getCurrentVideoTrack(); if (vtrack == null) return; final boolean videoSwapped = vtrack.orientation == Media.VideoTrack.Orientation.LeftBottom || vtrack.orientation == Media.VideoTrack.Orientation.RightTop; if (CURRENT_SIZE == SURFACE_FIT_SCREEN) { int videoW = vtrack.width; int videoH = vtrack.height; if (videoSwapped) { int swap = videoW; videoW = videoH; videoH = swap; } if (vtrack.sarNum != vtrack.sarDen) videoW = videoW * vtrack.sarNum / vtrack.sarDen; float ar = videoW / (float) videoH; float dar = displayW / (float) displayH; float scale; if (dar >= ar) scale = displayW / (float) videoW; /* horizontal */ else scale = displayH / (float) videoH; /* vertical */ mMediaPlayer.setScale(scale); mMediaPlayer.setAspectRatio(null); } else { mMediaPlayer.setScale(0); mMediaPlayer.setAspectRatio(!videoSwapped ? ""+displayW+":"+displayH : ""+displayH+":"+displayW); } break; } case SURFACE_16_9: mMediaPlayer.setAspectRatio("16:9"); mMediaPlayer.setScale(0); break; case SURFACE_4_3: mMediaPlayer.setAspectRatio("4:3"); mMediaPlayer.setScale(0); break; case SURFACE_ORIGINAL: mMediaPlayer.setAspectRatio(null); mMediaPlayer.setScale(1); break; } } private void updateVideoSurfaces() { int sw = getWindow().getDecorView().getWidth(); int sh = getWindow().getDecorView().getHeight(); // sanity check if (sw * sh == 0) { Log.e(TAG, "Invalid surface size"); return; } mMediaPlayer.getVLCVout().setWindowSize(sw, sh); ViewGroup.LayoutParams lp = mVideoVie
评论
    相关推荐