Eclipse集成ijkplayer并实现本地和网络视频播放等
概述
详细
原文地址: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的步骤:
-
以ijkplayer-armv7a文件夹为例,删除选中的这四个文件。
-
将ijkplayer-armv7a\src\main目录下的所有文件拷贝到ijkplayer-armv7a目录下。
-
删除src文件夹。
-
将java文件夹名更改为src。
其他工程也是这样操作。
这里没有导入ijkplayer-exo该工程,这个是google的一个开源播放器,我这里不用所以就没有导入,如果需要用的话还需要编译ijkplayer-exo。
导入工程发现几个问题如下图所示:
这问题是因为找不到‘Java’文件夹,之前将该文件夹改为src了,所有找不到很正常。
打开各个工程下的.classpath文件,删除<classpathentry kind="src" path="java"/>这一行。
然后在eclipse下刷新(refresh)下各工程就可以了。
1 2 3 4 5 6 7 8 9 10 | <? 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 > |
(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,发现没有问题了。
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相关代码。
1 2 3 4 | import tv.danmaku.ijk.media.exo.IjkExoMediaPlayer; IjkExoMediaPlayer IjkExoMediaPlayer = new IjkExoMediaPlayer(mAppContext); mediaPlayer = IjkExoMediaPlayer; |
三、运行效果
界面效果图如下所示:
该demo可以播放本地视频文件,以及网络流媒体。当然记得别选择用IjkExoMediaPlayer(没有配exo)。
修改后的demo:
主页面可以填写流的地址进行播放,或者选择本地视频播放。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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 ); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | 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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?