IjkVideoView 加 AndroidMediaController 视频播放

本文介绍如何在Android应用中集成IjkLib播放器,并提供了一个简单的示例代码。通过设置依赖、布局文件及主要代码,实现了视频播放功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

依赖:

   compile 'com.github.leifzhang:IjkLib:0.4.4'

布局:

    <tv.danmaku.ijk.media.widget.media.IjkVideoView
        android:id="@+id/ijvideo"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </tv.danmaku.ijk.media.widget.media.IjkVideoView>


主要代码:

 

   
public class Main2Activity extends AppCompatActivity {

    private VideoView vv_video1;
    private String s="http://ips.ifeng.com/video19.ifeng.com/video09/2014/06/16/1989823-102-086-0009.mp4";
    private IjkVideoView mIjvideo;

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

        mIjvideo = findViewById(R.id.ijvideo);
        IjkMediaPlayer.loadLibrariesOnce(null);
        IjkMediaPlayer.native_profileBegin("libijkplayer.so");
        AndroidMediaController controller = new AndroidMediaController(this, false);
        mIjvideo.setMediaController(controller);
// 链接
        String url = "http://ips.ifeng.com/video19.ifeng.com/video09/2014/06/16/1989823-102-086-0009.mp4";
        mIjvideo.setVideoURI(Uri.parse(url));
        mIjvideo.start();
    }
    //在生命周期中设置 暂停
    @Override
    protected void onPause() {
        super.onPause();
        mIjvideo.pause();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        IjkMediaPlayer.native_profileEnd();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mIjvideo.resume();
    }
}






IjkVideoView是Android中用于播放视频的一个组件,它是基于ijkplayer的封装。ijkplayer是一个基于FFmpeg库的跨平台视频播放器。要实现IjkVideoView的水平镜像功能,可以通过设置其SurfaceHolder的Canvas进行绘制变换,或者直接调整视频源的参数来实现水平翻转效果。 以下是实现IjkVideoView水平镜像的基本步骤: 1. 确保你的项目中已经集成了ijkplayer,如果还没有集成,需要先进行集成。 2. 在你的布局文件中或者代码中添IjkVideoView组件,并初始化它。 3. 设置IjkVideoView的视频输出层为SurfaceView。 4. 在视频开始播放前,获取到IjkVideoView的SurfaceHolder。 5. 使用SurfaceHolder的Canvas对象进行绘制时,应用`Canvas.scale(-1, 1)`来实现水平翻转。 6. 可以通过设置MediaFormat或者使用ijkplayer的API来调整视频播放参数,实现水平镜像。 示例代码片段如下: ```java IjkVideoView videoView = findViewById(R.id.ijkvideoview); // ... 其他初始化代码 ... // 获取SurfaceHolder并设置Canvas的变换矩阵 SurfaceHolder holder = videoView.getHolder(); holder.addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { Canvas canvas = holder.lockCanvas(); if (canvas != null) { // 设置水平翻转 canvas.scale(-1, 1); // 这里可以添你的绘制代码 holder.unlockCanvasAndPost(canvas); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { } }); // 开始播放视频 videoView.setVideoPath("your_video_path"); videoView.start(); ``` 需要注意的是,这种Canvas级别的变换可能会有性能上的考虑,特别是在播放高分辨率视频时。因此,如果对性能有较高要求,建议从视频解码层面就进行镜像处理,而不是在渲染时变换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值