gpt4 book ai didi

java - 使用 LibVLC for android 创建视频播放器

转载 作者:太空宇宙 更新时间:2023-11-03 10:18:23 25 4
gpt4 key购买 nike

我正在尝试使用最后一个 LibVLC 为 Android 应用创建视频播放器。

问题是我不知道这个库是如何工作的,我找不到示例来帮助我(正如这里所说的 https://bitbucket.org/edwardcw/libvlc-android-sample )

所以我自己尝试创建视频播放器:

public class VideoPlayerActivity extends AppCompatActivity implements IVideoPlayer, GestureDetector.OnDoubleTapListener, IDelayController {

private static LibVLC LibVLC() {
return VLCInstance.get();
}

private static MediaPlayer MediaPlayer() {
return VLCInstance.getMainMediaPlayer();
}

@Override
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

Toast.makeText(getApplicationContext(), "Ca start VideoPlayerActivity !!", Toast.LENGTH_SHORT).show();
if (!VLCInstance.testCompatibleCPU(this)) {
// exit(RESULT_CANCELED);
return;
}
extras = getIntent().getExtras();
mUri = extras.getParcelable(PLAY_EXTRA_ITEM_LOCATION);
Toast.makeText(getApplicationContext(), "Oui ça start le VideoPlayer", Toast.LENGTH_SHORT).show();
setContentView(R.layout.player_test);
}

@Override
public void onResume() {
super.onResume();

mSurfaceView = (SurfaceView) findViewById(R.id.player_surface_test);
setSurfaceLayout(100, 100, 100, 100, 100, 100);
mSurfaceHolder = mSurfaceView.getHolder();
mSurfaceFrame = (FrameLayout) findViewById(R.id.player_surface_frame_test);
mSurfaceHolder.addCallback(mSurfaceCallback);
}

private static class ConfigureSurfaceHolder {
private final Surface surface;
private boolean configured;

private ConfigureSurfaceHolder(Surface surface) {
this.surface = surface;
}
}

@Override
public void setSurfaceLayout(int width, int height, int visible_width, int visible_height, int sar_num, int sar_den) {

/*if (width * height == 0)
return;*/

// store video size
mVideoHeight = height;
mVideoWidth = width;
mVideoVisibleHeight = visible_height;
mVideoVisibleWidth = visible_width;
mSarNum = sar_num;
mSarDen = sar_den;
Toast.makeText(this, "mVideoHeight = " + mVideoHeight, Toast.LENGTH_SHORT).show();
}

@Override
public int configureSurface(Surface surface, final int width, final int height, final int hal) {
if (AndroidUtil.isICSOrLater() || surface == null)
return -1;
if (width * height == 0)
return 0;
Log.i(TAG, "configureSurface: " + width +"x"+height);

final ConfigureSurfaceHolder holder = new ConfigureSurfaceHolder(surface);

final Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
if (mSurface == holder.surface && mSurfaceHolder != null) {
if (hal != 0)
mSurfaceHolder.setFormat(hal);
mSurfaceHolder.setFixedSize(width, height);
}
synchronized (holder) {
holder.configured = true;
holder.notifyAll();
}
}
});
try {
synchronized (holder) {
while (!holder.configured)
holder.wait();
}
} catch (InterruptedException e) {
return 0;
}
return 1;
}

@Override
public void eventHardwareAccelerationError() {
}

private void startVideo() {
// LibVLC lib = new LibVLC();
mMediaPlayer = VLCInstance.getMainMediaPlayer();
Media media = new Media(VLCInstance.get(), mUri.getPath());
media.parse();
Toast.makeText(this, "le media dure : "+media.getDuration(), Toast.LENGTH_SHORT).show();
// Toast.makeText(this, "le media dure : "+media., Toast.LENGTH_SHORT).show();
mMediaPlayer.setMedia(media);
//mMediaPlayer.setVideoTrackEnabled(true);
//media.release();
// mMediaPlayer.setEqualizer(VLCOptions.getEqualizer());
// mMediaPlayer.setVideoTitleDisplay(MediaPlayer.Position.Disable, 0);
int sw = getWindow().getDecorView().getWidth();
int sh = getWindow().getDecorView().getHeight();
VLCInstance.get().setWindowSize(sw, sh);
mMediaPlayer.play();
Toast.makeText(this, "le player a une valeur de : "+mMediaPlayer.isPlaying(), Toast.LENGTH_SHORT).show();
// media.parse();
// media.release();
// mMediaPlayer.setMedia(media);
// mMediaPlayer.play();
}

private final SurfaceHolder.Callback mSurfaceCallback = new SurfaceHolder.Callback() {
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
if(MediaPlayer() != null) {
width = 100;
height =100;
Toast.makeText(getApplicationContext(), "surface width = "+width, Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), "surface height = "+height, Toast.LENGTH_SHORT).show();
final Surface newSurface = holder.getSurface();
if (mSurface != newSurface) {
mSurface = newSurface;
Toast.makeText(getApplicationContext(), "surfaceChanged: " + mSurface, Toast.LENGTH_SHORT).show();
LibVLC().attachSurface(mSurface, VideoPlayerActivity.this);
mSurfaceReady = true;
startVideo();
//mHandler.sendEmptyMessage(1);
}
}
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
Log.i(TAG, "surfaceDestroyed");
if(MediaPlayer() != null) {
mSurface = null;
LibVLC().detachSurface();
mSurfaceReady = false;
}
}
};

private final Handler mHandler = new VideoPlayerHandler(this);

private static class VideoPlayerHandler extends WeakHandler<VideoPlayerActivity> {
public VideoPlayerHandler(VideoPlayerActivity owner) {
super(owner);
}

@Override
public void handleMessage(Message msg) {
VideoPlayerActivity activity = getOwner();
if(activity == null) // WeakReference could be GC'ed early
return;

switch (msg.what) {
case 1:
activity.startVideo();
break;
default:
break;
}
}
};

public static void start(Context context, Uri uri) {
start(context, uri, null, false, -1);
}

public static void start(Context context, Uri uri, boolean fromStart) {
start(context, uri, null, fromStart, -1);
}

public static void start(Context context, Uri uri, String title) {
start(context, uri, title, false, -1);
}

private static void start(Context context, Uri uri, String title, boolean fromStart, int openedPosition) {
Intent intent = new Intent(context, VideoPlayerActivity.class);


intent.setAction(PLAY_FROM_VIDEOGRID);
intent.putExtra(PLAY_EXTRA_ITEM_LOCATION, uri);
intent.putExtra(PLAY_EXTRA_ITEM_TITLE, title);
intent.putExtra(PLAY_EXTRA_FROM_START, fromStart);
intent.putExtra(PLAY_EXTRA_OPENED_POSITION, openedPosition);

/*if (openedPosition != -1)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);*/
Toast.makeText(context, "uri = "+uri.toString(), Toast.LENGTH_SHORT).show();
context.startActivity(intent); // /!\ start the activity /!\ !!!
}

@Override
public void showAudioDelaySetting() {

}

@Override
public void showSubsDelaySetting() {

}

@Override
public void endDelaySetting() {

}

@Override
public boolean onSingleTapConfirmed(MotionEvent motionEvent) {
return false;
}

@Override
public boolean onDoubleTap(MotionEvent motionEvent) {
return false;
}

@Override
public boolean onDoubleTapEvent(MotionEvent motionEvent) {
return false;
}
}

为了启动 videoPlayerActivity,我调用了 start(Context context, Uri uri)它将创建 Activity 。

要恢复此代码:

oncreat()之后我调用onResum()这将调用 mSurfaceHolder.addCallback(mSurfaceCallback);这个回调调用 startVideo()应该开始播放视频,但没有开始..

因此,如果有人有关于如何使用上一个 LibVLC 创建简单视频播放器的示例,或者有我失败的想法,那将会很有帮助

最佳答案

请查看我创建的以下示例存储库。它没有所有花里胡哨的东西,但它只是播放任何有效的视频 url。它使用 mrmaffen 友情提供的 VLC SDK:

https://github.com/gareoke/VLCPlayer

关于java - 使用 LibVLC for android 创建视频播放器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30941173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com