android ijk 播放器,[流媒体]ijkplayer 播放器,android平台使用说明
ijkplayer 编译
编译可以参考官方说明
简要步骤说明:
将代码下载到本地
git clone https://github.com/Bilibili/ijkplayer
设定ndk环境
下载对应平台的ndk工具包,官网地址
设置ndk的编译环境,因为我使用的是mac,就直接
export ANDROID_NDK=/ndk-path
初始化ijkplayer为android编译环境
./init-android.sh
编译ffmpeg之前准备
因为ijkplayer还是依赖于ffmpeg的一些功能,所以在进行ijkplayer的编译之前,首先需要满足ffmpeg的编译条件。最主要的就是yasm的安装,以mac为例,安装yasm
brew install yasm
开始编译ffmpeg
cd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
编译ijkplayer
./compile-ijk.sh all
ijkplayer 的使用
使用前的说明
在完成上面的编译过程之后,可以在ijkplayer中发现一个android工程,简要的目录如下:
+---/path-to-ijkplayer/android/ijkplayer
|
+---ijkplayer-arm64
|
+---ijkplayer-armv5
|
+---ijkplayer-armv7a
|
+---ijkplayer-x86
|
+---ijkplayer-x86-64
|
+---ijkplayer-java
|
+---ijkplayer-exo
|
+---tools
如上目录为ijkplayer在android平台上需要用到的库,从命名上可以看出,以上modules中包含了这几类:
ijkplayer-arm*和ijkplayer-x86*,实现了不同平台下的so库。
ijkplayer-java和ijkplayer-exo, 为封装好的ijkplayer的java层api。
tools,编译需要用到的脚本程序
如何使用
新建android工程,命名为:ijkplayer-demo。
讲上文中表示出来的文件夹全部拷贝到新建的android工程目录下。
修改新建工程中的settings.gradle:
include ':ijkplayer-armv5', ':ijkplayer-x86_64'
include ':ijkplayer-armv7a'
include ':ijkplayer-arm64'
include ':ijkplayer-x86'
include ':ijkplayer-java'
include ':ijkplayer-exo'
include ':app'
修改/path-to-ijkplayer-demp/build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
ext {
compileSdkVersion = 23
buildToolsVersion = "23.0.3"
targetSdkVersion = 23
versionCode = 800000
versionName = "0.8.0"
}
task clean(type: Delete) {
delete rootProject.buildDir
}
修改/path-to-ijkplayer-demp/app/build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "25.0.1"
defaultConfig {
applicationId "com.test.ijkplayer.hankun.ijkplayer_test"
minSdkVersion 21
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.1.1'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
compile project(':ijkplayer-java')
compile project(':ijkplayer-arm64')
compile project(':ijkplayer-armv5')
compile project(':ijkplayer-armv7a')
compile project(':ijkplayer-x86')
compile project(':ijkplayer-x86_64')
}
给app添加权限
AndroidManifest.xml
```
app的布局文件
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.test.ijkplayer.hankun.ijkplayer_test.MainActivity">
android:layout_width="368dp"
android:layout_height="495dp"
tools:layout_editor_absoluteY="8dp"
tools:layout_editor_absoluteX="8dp">
android:id="@+id/button_prepare"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="start"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true" />
android:id="@+id/show_screen"
android:layout_width="400dp"
android:layout_height="200dp"
android:layout_below="@+id/button_prepare"
/>
MainActivity代码
package com.test.ijkplayer.hankun.ijkplayer_test;
import android.content.Context;
import android.graphics.SurfaceTexture;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Surface;
import android.view.TextureView;
import android.view.View;
import android.widget.Button;
import tv.danmaku.ijk.media.player.IMediaPlayer;
import tv.danmaku.ijk.media.player.IjkMediaPlayer;
public class MainActivity extends AppCompatActivity {
private String source_url = "rtsp://192.168.1.106:8554/test.mkv";
private Context _ctx = this;
public IjkMediaPlayer player = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
player = new IjkMediaPlayer();
TextureView tv = (TextureView)findViewById(R.id.show_screen);
tv.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
try {
player.setSurface(new Surface(surface));
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
return false;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
}
});
Button btn_prepare = (Button) findViewById(R.id.button_prepare);
btn_prepare.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// init player
IjkMediaPlayer.loadLibrariesOnce(null);
IjkMediaPlayer.native_profileBegin("libijkplayer.so");
player.setOnPreparedListener(mPreparedListener);
try {
player.setDataSource(_ctx, Uri.parse(source_url));
player.prepareAsync();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
IMediaPlayer.OnPreparedListener mPreparedListener = new IMediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(IMediaPlayer mp) {
player.start();
}
};
}
到这里,就完成了一个最简单的ijkplayer的demo。剩下的就是认真看ijkplayer的实现了。
android ijk 播放器,[流媒体]ijkplayer 播放器,android平台使用说明相关推荐
- Android vitamio、节操、ijkplayer视频播放器优缺点对比
Vitamio 是一款 Android 与 iOS 平台上的全能多媒体开发框架 Vitamio 能够流畅播放720P甚至1080P高清MKV,FLV,MP4,MOV,TS,RMVB等常见格式的视频,还 ...
- IJKPlayer播放器支持https流程
前言: 笔者最近一段时间在搞视频直播相关的东西,虽然很早以前,也做过基于腾讯云.Anychat.容联云等几个第三方的实时视频直播,但是当时的播放器完全采用了第三方的东西,本次则是使用的ijkplaye ...
- 基于IJK打造自己的播放器(一) 简单集成使用ijkPlayer播放hls视频
一 前言 ijk播放器的背景我就不多说了.随便一搜就有,我想说的是,这篇文章只是教大家适合使用ijkplayer. 这里适合新手.简单说一下我们常用的播放视频.一般来说,播放视频分成视频显示控件.视频 ...
- 智能android电视更换播放器,GitHub - qfwc258/TvPlayer: android智能电视播放器,可以播放各电视台节目,播放基于ijkplayer的实现。...
TvPlayer 1,android智能电视播放器,可以播放各电视台节目,播放基于ijkplayer的实现 2,测试的源地址可能失效,如需测试可以自己更换播放源.HttpUtils.getOfflin ...
- android集成EasyPlayer播放器播放实时流媒体视屏
android集成EasyPlayer播放器播放实时流媒体视屏 最近公司项目需要实现一个rtsp实时流媒体视频的播放,在移动端尝试了多个第三方能播放rtsp流实时视频的软件后发现EasyPlayer的 ...
- 智能android电视更换播放器,GitHub - kaigeLove/TvPlayer: android智能电视播放器,可以播放各电视台节目,播放基于ijkplayer的实现。...
TvPlayer 1,android智能电视播放器,可以播放各电视台节目,播放基于ijkplayer的实现 2,测试的源地址可能失效,如需测试可以自己更换播放源.HttpUtils.getOfflin ...
- 智能android电视更换播放器,GitHub - xioxu/TvPlayer: android智能电视播放器,可以播放各电视台节目,播放基于ijkplayer的实现。...
TvPlayer 1,android智能电视播放器,可以播放各电视台节目,播放基于ijkplayer的实现 2,测试的源地址可能失效,如需测试可以自己更换播放源.HttpUtils.getOfflin ...
- ijkplayer播放器剖析(一)让ijkplayer播起来
一.引言: ijkplayer是一款对FFmpeg封装非常好的第三方开源播放器,遗憾的是,ijkplayer2.0似乎不开源,并且1.0版本更新也基本停止了,很多公司都会采用ijkplayer作为其播 ...
- ijkPlayer播放器快速集成使用
jjdxm_ijkplayer 项目地址: jjdxm_ijkplayer 简介:基于 ijkplayer 简单的 UI 界面 当前项目是基于 ijkplayer 项目进行的播放器界面 UI 封装. ...
最新文章
- 深度学习(DL)与卷积神经网络(CNN)学习随笔-05-基于Python的LeNet之CNN
- 2018ICPC网络赛(焦作站)K题题解
- AndroidStudio JNI: 使用CMake编译tensorflow
- python 32bit数据结构_python实现bitmap数据结构详解
- linux实验三makefile,实验平台上Makefile详细的解释
- 2019.5.18-5.19 ACM-ICPC 全国邀请赛(西安)赛后总结
- 基于TCP协议的进程间通信
- SQL 中表值参数的使用
- 技巧~向URL地址添加参数
- MySQL 游标(CURSOR)
- 字典写入excel_Excel中“先出式”出货的问题,以后出库太方便了
- Web网页设计作业html
- 我的世界服务器标记家位置,我的世界:你真的会看藏宝图吗?学会用标记,位置一次就找对...
- iPhone的AFC(Apple File Conduit)
- java bmp透明底色_C++ 设置透明背景图片
- 体系结构复习2——指令级并行(分支预測和VLIW)
- 如何快速下载720云高清全景图片
- 一般网站上传图片的大小是多少?网站图片上传格式大小建议 附带简单修图方法
- 又来了!10分钟实现微信 “炸屎“大作战
- 1byte、1KB、4KB,1MB、1GB用16进制表示的范围。任意地址范围求字节数