概述

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包。

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

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

1 更改目录结构

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

  2. 将ijkplayer-armv7a\src\main目录下的所有文件拷贝到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大师发表,拒绝转载,转载需要作者授权

Eclipse集成ijkplayer并实现本地和网络视频播放等的更多相关文章

  1. eclipse集成ijkplayer项目

    1.ijkplayer是什么 ijkplayer是b站开源的一个视频插件,基于ffmpeg, 支持 Android 和 iOS,可以代替android自带的videview,有不错的体验,支持的视频文 ...

  2. git与eclipse集成之clone远程仓库到本地

    1. Git与Eclipse集成 1.1. Clone远程仓库到本地 1.1.1.        获取远程仓库地址(选择北京,访问速度比深圳快) 1.1.2.        将远程仓库导入到Eclip ...

  3. maven之一:maven安装和eclipse集成

    maven作为一个项目构建工具,在开发的过程中很受欢迎,可以帮助管理项目中的bao依赖问题,另外它的很多功能都极大的减少了开发的难度,下面来介绍maven的安装及与eclipse的集成. maven的 ...

  4. maven安装和eclipse集成

    maven作为一个项目构建工具,在开发的过程中很受欢迎,可以帮助管理项目中的bao依赖问题,另外它的很多功能都极大的减少了开发的难度,下面来介绍maven的安装及与eclipse的集成. maven的 ...

  5. marven与Eclipse集成配置

    maven作为一个项目构建工具,在开发的过程中很受欢迎,可以帮助管理项目中的bao依赖问题,另外它的很多功能都极大的减少了开发的难度,下面来介绍maven的安装及与eclipse的集成. maven的 ...

  6. maven2 + tomcat6 + eclipse集成配置

    转载:http://wenku.baidu.com/view/d64147c676eeaeaad1f330d4.html?re=view /*maven2 + tomcat6 + eclipse集成配 ...

  7. eclipse集成testng插件

    一.TestNG简介 TestNG是一个开源自动化测试框架,它受到JUnit和NUnit的启发,而引入了许多新的创新功能,如依赖测试,分组概念,使测试更强大,更容易做到. 它旨在涵盖所有类别的测试:单 ...

  8. Eclipse集成Gradle 【Eclipse在线安装Gradle插件方法】

    本章将介绍了Eclipse集成Gradle.以下是将Gradle插件添加到Eclipse的步骤. 步骤1 - 打开Eclipse Marketplace 打开在系统中安装好的Eclipse. 转到 J ...

  9. 【EJB学习笔记】——EJB开发环境搭建(Eclipse集成JBoss)

    之前一直用的EJB开发环境是他们搭建好的,直接拿来用,不过还是感觉老吃别人嚼好的不太好吃,所以自己动手来玩一玩. EJB开发依赖的最基本的环境:JDK.Eclipse.JBoss,这里简单介绍一下最基 ...

随机推荐

  1. arcgis python添加几何属性

    import arcpy import numpy import math def AddGeometryAttributes(fc, geomProperties, lUnit, aUnit, cs ...

  2. KStudio window上编译uclinux

     可能没有几个人能像我这样在Windows下编译Linux内核,甚至于同时进行内核调试.这种事情我不是第一个做到的,至少我们公司的原TKStudio部门已经做过.在TKStudio网站上,提供了一个L ...

  3. matlab 使用OPENCV

    +cv就是 测试: h=cv.imread('c:\h.jpg');

  4. [Git ] Git 使用规范流程

    reference : http://www.ruanyifeng.com/blog/2015/08/git-use-process.html 团队开发中,遵循一个合理.清晰的Git使用流程,是非常重 ...

  5. 快速近似最近邻搜索库 FLANN - Fast Library for Approximate Nearest Neighbors

    What is FLANN? FLANN is a library for performing fast approximate nearest neighbor searches in high ...

  6. Flask 学习(二)路由

    Flask  路由 在说明什么是 Flask 路由之前,详细阐述下 Flask “Hello World” 这一 最小应用的代码. Flask “Hello World” from flask imp ...

  7. MySQL运行状态show status中文详解

    状态名 作用域 详细解释 Aborted_clients Global 由于客户端没有正确关闭连接导致客户端终止而中断的连接数 Aborted_connects Global 试图连接到MySQL服务 ...

  8. 访问者模式讨论篇:java的动态绑定与双分派

    java的动态绑定 所谓的动态绑定就是指程执行期间(而不是在编译期间)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法.java继承体系中的覆盖就是动态绑定的,看一下如下的代码: class ...

  9. python中的exec()、eval()以及complie()

    参考博客:http://www.cnblogs.com/yyds/p/6276746.html 1.eval函数 函数的作用: 计算指定表达式的值.也就是说它要执行的python代码只能是单个表达式( ...

  10. Discuz常见小问题-如何修改自己发布的帖子

    在发布的帖子的下方就有编辑的按钮,可以直接点击进去编辑