zoukankan      html  css  js  c++  java
  • Eclipse集成ijkplayer并实现本地和网络视频播放等

    概述

    Eclipse 集成ijkplayer demo,播放本地视频、和rtmp流。

    详细

    原文地址:Eclipse 集成ijkplayer demo
    http://blog.csdn.net/VNanyesheshou/article/details/53814951

    一、准备工作

    开发环境

    jdk1.8 

    Eclipse Luna Service Release 1 (4.4.1)

    运行环境:

    华为荣耀6(Android4.4)、华为p9(Android7.0)

    准备so:

    需要编译好ijkplayer so,具体如何编译可以参考这篇blog,ijkplayer编译.so 

    实现功能:

    Eclipse集成ijkplayer demo,可以播放本地视频、rtmp流等。

    二、程序实现

    截图程序结构,主要是ijkplayer-example和ijkplayer-example-modify(加强版),其他的都是一些jar包。

    图片.png

    接着上一篇在Mac上编译ijkplayer的.so,现在将这些文件夹拷贝到windows上。(在mac和winds上集成到eclipse上是一样的,只是我这mac上没有安装eclipse)。

    现在开始说集成到Eclipse的步骤:

    1 更改目录结构

    1. 以ijkplayer-armv7a文件夹为例,删除选中的这四个文件。

    2. 将ijkplayer-armv7asrcmain目录下的所有文件拷贝到ijkplayer-armv7a目录下。

    3. 删除src文件夹。

    4. 将java文件夹名更改为src。

    其他工程也是这样操作。

    2 导入各工程到eclipse中。

    这里没有导入ijkplayer-exo该工程,这个是google的一个开源播放器,我这里不用所以就没有导入,如果需要用的话还需要编译ijkplayer-exo。

    导入工程发现几个问题如下图所示:

    这问题是因为找不到‘Java’文件夹,之前将该文件夹改为src了,所有找不到很正常。

    打开各个工程下的.classpath文件,删除<classpathentry kind="src" path="java"/>这一行。

    然后在eclipse下刷新(refresh)下各工程就可以了。

    <?xml version="1.0" encoding="UTF-8"?>  
    <classpath>  
        <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>  
        <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>  
        <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>  
        <classpathentry kind="src" path="java"/>  
        <classpathentry kind="src" path="src"/>  
        <classpathentry kind="src" path="gen"/>  
        <classpathentry kind="output" path="bin/classes"/>  
    </classpath>

    3 编译各个工程

    (1)首先编译ijkplayer-arm64、ijkplayer-armv5、ijkplayer-armv7a、ijkplayer-x86、ijkplayer-x86_64这五个工程,这五个工程类似.

    以arm64为例,右击工程,点击Properties,选择Android,勾选Is Library点击ok. 编译下工程(Build Project),确保没有问题。

    (2)编译ijkplayer-java。

    出现如下图问题:

    AndroidMediaPlayer类中导入的MediaDataSource类找不到,已经导入包名了,importandroid.media.MediaDataSource;

    发现这个类是在Android 6.0(API 23)才有的一个类,将project.properties中target修改为android-23(之前我这里是22)。

    重新build project,发现没有问题了。

    4 编译ijkplayer-example工程

    1 右击ijkplayer-example,点击Properties,选择Andorid,将这几个全部删除。

    添加下图几个

    2 配置preference

    需要导入preference包,和导入appcompat包类似。
    否则会提示该错误Error: No resource found that matches the given name: attr 'preferenceTheme'。并且该preference需要做如下配置,否则运行是setting界面打开失败。

    3 配置otto

    下载otto jar包,在ijkplayer-example目录下新建libs文件夹,将jar包拷贝到libs目录下。右击jar包,点击Build path,点击Add to build path。

    4 修改IjkVideoView类,注释掉exoplayer相关代码。

    import tv.danmaku.ijk.media.exo.IjkExoMediaPlayer;  
      
    IjkExoMediaPlayer IjkExoMediaPlayer = new IjkExoMediaPlayer(mAppContext);  
    mediaPlayer = IjkExoMediaPlayer;

    三、运行效果

    界面效果图如下所示:

    该demo可以播放本地视频文件,以及网络流媒体。当然记得别选择用IjkExoMediaPlayer(没有配exo)。

    修改后的demo:

    主页面可以填写流的地址进行播放,或者选择本地视频播放。

    代码如下:

    package tv.danmaku.ijk.media.example.activities;
    
    import tv.danmaku.ijk.media.example.R;
    import tv.danmaku.ijk.media.example.application.AppActivity;
    import tv.danmaku.ijk.media.example.application.Settings;
    import android.app.ActionBar.LayoutParams;
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.FrameLayout;
    import android.widget.LinearLayout;
    
    public class MainActivity extends AppActivity {
        private final String TAG = "MainActivity";
        
        private LinearLayout mLinearLayout;
        private EditText mUrlEditText;
        private Button mStartButton;
        private Button mFileExplorerButton;
        private View mDividerView;
        
        private Settings mSettings;
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            
            FrameLayout body = (FrameLayout) findViewById(R.id.body);
            
            mLinearLayout = new LinearLayout(this);
            mLinearLayout.setOrientation(LinearLayout.VERTICAL);
    
            mUrlEditText = new EditText(this);
            mUrlEditText.setText("rtmp://live.hkstv.hk.lxdns.com/live/hks");
            mLinearLayout.addView(mUrlEditText, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
            
            mStartButton = new Button(this);
            mStartButton.setText("Start");
            mLinearLayout.addView(mStartButton, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
            
            mFileExplorerButton = new Button(this);
            mFileExplorerButton.setText("File Explorer");
            mLinearLayout.addView(mFileExplorerButton, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
            
            body.addView(mLinearLayout, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
            
            mStartButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    onStartPlay();
                }
            });
            
            mFileExplorerButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    onFileExplorer();
                }
            });
        }
        
        private void onStartPlay() {
            String url = mUrlEditText.getText().toString().trim();
            if (url.isEmpty()) {
                Log.e(TAG, "url is emtpy");
                return;
            }
            VideoActivity.intentTo(this, url, "demo url");
        }
        
        private void onFileExplorer() {
            Intent intent = new Intent(this, FileExplorerActivity.class);
            startActivity(intent);
        }
    }

    填写url,进行播放,如果有问题记得点击setting,修改播放器或其他配置。

    四、其他补充

    参考文章:

    Eclipse 集成ijkplayer demo: http://blog.csdn.net/VNanyesheshou/article/details/53836199

    ijkplayer 编译so: http://blog.csdn.net/VNanyesheshou/article/details/53814951

    注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

  • 相关阅读:
    mtext中的las参数的作用
    并行与CPE
    根据局部性得出最优矩阵乘法写法
    cache中的thrashing问题和应对办法
    csapp(3e)的bomblab的phase_6详解(没有详细到逐行解析的程度)
    计划
    遇到问题怎么处理?
    数据对齐的几问
    python进阶(八、mysql:完整性约束)
    python进阶(七、mysql:表操作、数据操作、数据类型)
  • 原文地址:https://www.cnblogs.com/demodashi/p/8481577.html
Copyright © 2011-2022 走看看