⑴ android ijkplayer详细使用步骤
ijkplayer是Bilibili基于ffmpeg开发并开源的轻量级视频播放器,支持播放本地网络视频,也支持流媒体播放。支持Android&iOS。
ijkplayer的编译这里不多阐述,我也是直接获取别人编译完成的so库文件,直接使用的。如果你对ijkplayer的编译感兴趣,可以网络一下,有很多文章。
使用ijkplayer
导包
ijkplayer源码官方下载地址:https://github.com/Bilibili/ijkplayer
上面是官方提供的ijkplayer的源码地址,但是它是没有编译过的。下面我给大家分享一份编译好的ijkplayer源码,由于比较大,分了三个包才上传完成,需要三个包都下载后才能一起解压:
编译好的ijkplayer.part1
编译好的ijkplayer.part2
编译好的ijkplayer.part3
我们下载完成,进入android/ijkplayer目录:
ijkplayer-java:ijkplayer的一些操作封装及定义。这里面是通用的API接口,里面最主要的是IMediaPlayer,它是用来渲染显示多媒体的。
ijkplayer-exo:google开源的一个新的播放器ExoPlayer,在Demo中和ijkplayer对比用的。通过安装ijkplayer可以发现setting里面可以选择不同player来渲染多媒体显示,该模块下面就是一个MediaPlayer。
ijkplayer-example:测试程序
ijkplayer-{arch}:编译出来的各个版本的.so文件。
官方提供的Demo的代码还是挺多的,甚至还用了otto,需要对官方的demo进行精简,去除一些用不到的代码。
首先需要的是ijkplayer-{arch}、ijkplayer-Java两个库。exo是Google提供的新的播放器,这里不需要,直接砍掉。其次是ijkplayer-example里的,我们需要的只有tv.danmaku.ijk.media.example.widget.media包下的部分类。
注:
链接库ijkplayer-arm64,ijkplayer-armv5,ijkplayer-armv7a,ijkplayer-x86,ijkplayer-x86_64是不同体系架构的动态链接库,在当前工程结构里面作为一个模块,如果不想做兼容多平台问题,可以删除其他目录结构,单独保留自己需要的平台目录。
新建一个工程:
(1)把ijkplayer-armv7a/src/main/libs下的文件拷贝到新工程app目录的libs下。
(2)把ijkplayer-java/build/outputs/aar/ijkplayer-java-release.aar复制到新工程app目录的libs下。
(3)修改APP下的build.gradle, 主要设置.so及.aar的位置:
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "25.0.0"
defaultConfig {
applicationId "com.hx.ijkplayer_demo"
minSdkVersion 14
targetSdkVersion 24
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs'] /**在libs文件夹下找so文件*/
}
}
}
repositories {
mavenCentral()
flatDir {
dirs 'libs' /**在libs文件夹下找aar文件*/
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', mole: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:24.2.1'
testCompile 'junit:junit:4.12'
compile(name: 'ijkplayer-java-release', ext: 'aar') /**编译ijkplayer-java-release.aar文件*/
}
(4)复制ijkplayer-example下面的tv.danmaku.ijk.media.example.widget.media到新的工程,删掉一些不需要类。
(5)IjkVideoView里面还是有很多如exo等没用的东西,删!具体可以参见我后面的Demo。
(6)Manifest
...
<activity android:name=".MainActivity"
android:screenOrientation="sensorLandscape"
android:configChanges="orientation|keyboardHidden">
...
</activity>
...
<uses-permission android:name="android.permission.INTERNET"/>
⑵ 如何修改android exoplayer 播放器ui
安卓4.0智能高清网络播放器,有什么好处,怎样使用
⑶ ijkplayer支持rtsp吗
ijkplayer是Bilibili基于ffmpeg开发并开源的轻量级视频播放器,支持播放本地网络视频,也支持流媒体播放。支持Android&iOS。
ijkplayer的编译这里不多阐述,我也是直接获取别人编译完成的so库文件,直接使用的。如果你对ijkplayer的编译感兴趣,可以网络一下,有很多文章。
使用ijkplayer
导包
ijkplayer源码官方下载地址:https://github.com/Bilibili/ijkplayer
上面是官方提供的ijkplayer的源码地址,但是它是没有编译过的。下面我给大家分享一份编译好的ijkplayer源码,由于比较大,分了三个包才上传完成,需要三个包都下载后才能一起解压:
编译好的ijkplayer.part1
编译好的ijkplayer.part2
编译好的ijkplayer.part3
我们下载完成,进入android/ijkplayer目录:
ijkplayer-java:ijkplayer的一些操作封装及定义。这里面是通用的API接口,里面最主要的是IMediaPlayer,它是用来渲染显示多媒体的。
ijkplayer-exo:google开源的一个新的播放器ExoPlayer,在Demo中和ijkplayer对比用的。通过安装ijkplayer可以发现setting里面可以选择不同player来渲染多媒体显示,该模块下面就是一个MediaPlayer。
ijkplayer-example:测试程序
ijkplayer-{arch}:编译出来的各个版本的.so文件。
官方提供的Demo的代码还是挺多的,甚至还用了otto,需要对官方的demo进行精简,去除一些用不到的代码。
首先需要的是ijkplayer-{arch}、ijkplayer-Java两个库。exo是Google提供的新的播放器,这里不需要,直接砍掉。其次是ijkplayer-example里的,我们需要的只有tv.danmaku.ijk.media.example.widget.media包下的部分类。
注:
链接库ijkplayer-arm64,ijkplayer-armv5,ijkplayer-armv7a,ijkplayer-x86,ijkplayer-x86_64是不同体系架构的动态链接库,在当前工程结构里面作为一个模块,如果不想做兼容多平台问题,可以删除其他目录结构,单独保留自己需要的平台目录。
新建一个工程:
(1)把ijkplayer-armv7a/src/main/libs下的文件拷贝到新工程app目录的libs下。
(2)把ijkplayer-java/build/outputs/aar/ijkplayer-java-release.aar复制到新工程app目录的libs下。
(3)修改APP下的build.gradle, 主要设置.so及.aar的位置:
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "25.0.0"
defaultConfig {
applicationId "com.hx.ijkplayer_demo"
minSdkVersion 14
targetSdkVersion 24
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs'] /**在libs文件夹下找so文件*/
}
}
}
repositories {
mavenCentral()
flatDir {
dirs 'libs' /**在libs文件夹下找aar文件*/
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', mole: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:24.2.1'
testCompile 'junit:junit:4.12'
compile(name: 'ijkplayer-java-release', ext: 'aar') /**编译ijkplayer-java-release.aar文件*/
}
(4)复制ijkplayer-example下面的tv.danmaku.ijk.media.example.widget.media到新的工程,删掉一些不需要类。
(5)IjkVideoView里面还是有很多如exo等没用的东西,删!具体可以参见我后面的Demo。
(6)Manifest
...
<activity android:name=".MainActivity"
android:screenOrientation="sensorLandscape"
android:configChanges="orientation|keyboardHidden">
...
</activity>
...
<uses-permission android:name="android.permission.INTERNET"/>
⑷ android 怎么使用 ijkplayer
ijkplayer-java:ijkplayer的一些操作封装及定义。这里面是通用的API接口,里面最主要的是IMediaPlayer,它是用来渲染显示多媒体的。
ijkplayer-exo:google开源的一个新的播放器ExoPlayer,在Demo中和ijkplayer对比用的。通过安装ijkplayer可以发现setting里面可以选择不同player来渲染多媒体显示,该模块下面就是一个MediaPlayer。
ijkplayer-example:测试程序
ijkplayer-{arch}:编译出来的各个版本的.so文件。
官方提供的Demo的代码还是挺多的,甚至还用了otto,需要对官方的demo进行精简,去除一些用不到的代码。
首先需要的是ijkplayer-{arch}、ijkplayer-Java两个库。exo是Google提供的新的播放器,这里不需要,直接砍掉。其次是ijkplayer-example里的,我们需要的只有tv.danmaku.ijk.media.example.widget.media包下的部分类。
注:
链接库ijkplayer-arm64,ijkplayer-armv5,ijkplayer-armv7a,ijkplayer-x86,ijkplayer-x86_64是不同体系架构的动态链接库,在当前工程结构里面作为一个模块,如果不想做兼容多平台问题,可以删除其他目录结构,单独保留自己需要的平台目录。
新建一个工程:
(1)把ijkplayer-armv7a/src/main/libs下的文件拷贝到新工程app目录的libs下。
(2)把ijkplayer-java/build/outputs/aar/ijkplayer-java-release.aar复制到新工程app目录的libs下。
(3)修改APP下的build.gradle, 主要设置.so及.aar的位置:
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "25.0.0"
defaultConfig {
applicationId "com.hx.ijkplayer_demo"
minSdkVersion 14
targetSdkVersion 24
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs'] /**在libs文件夹下找so文件*/
}
}
}
repositories {
mavenCentral()
flatDir {
dirs 'libs' /**在libs文件夹下找aar文件*/
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', mole: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:24.2.1'
testCompile 'junit:junit:4.12'
compile(name: 'ijkplayer-java-release', ext: 'aar') /**编译ijkplayer-java-release.aar文件*/
}
⑸ 如何实现微信8.0爆炸和烟花表情特效
Lottie 是一套着名的跨平台动画效果解决方案, 支持iOS、Android、Web 和 React Native(所以我们的设计师对它也非常熟悉), 设计师使用Adobe After Effects设计好的动画导出成 JSON 格式,通过lottie,各平台使用这份json就可实现设计师的动画效果,不用各自去写复杂的动画逻辑,也省去了很多沟通成本。
根据lottie的Android源码,其大致原理是:
解析json->layer对象的映射->layer对象为layerview构造出各种path等->数据全部准备好就是不断的执行view的draw方法完成绘制
Android端的实现是基于Drawable,最终都是对canvas的操作。lottieDrawable中的setComposition方法中的buildCompositionLayer开始真正的解析layer和绘制
layer的类型与 AE中的图层的对应关系为:
Lottie - 轻松实现复杂的动画效果
lottie源码分析
[github:android地址] ( https://github.com/airbnb/lottie-android )
[github:ios地址] (] https://github.com/airbnb/lottie-ios/tree/lottie/objectiveC )
如此酷炫又带音效的动画相当于透明视频了。如何在移动设备上播放透明视频呢?一般MP4格式的视频是没有透明通道的。可以分离出Alpha通道,再通过OpenGL ES重新实现Alpha通道和RGB通道的混合,从而实现在端上播放带透明通道的视频。
这个方案字节跳动和企鹅电竞用于直播间送礼动画,两家的开源方案在此,其原理是一模一样的:
字节跳动:[ https://github.com/bytedance/AlphaPlayer] ( https://github.com/bytedance/AlphaPlayer )
企鹅电竞: https://github.com/Tencent/vap
AlphaPlayer的播放器是基于exoPlayer实现的,vap是自定义解码器,由于兼容性的原因,我本来更倾向于选择AlphaPlayer。但是后来发现vap做得更完善一些。对比AlphaPlayer的优势有:
行。
用lotttie方案已在我们的产品中实现“烟花”和“爆竹”的效果。但是美术嚷嚷效果不好。我们还是实现了,并且在播放动画的同时,还创建了一个音频播放器播放音效。
烟花:
此方案局限在于:
相比于lottie方案的好处:
如何使用:
AE将最终合成导出为png序列,然后使用VPA所提供工具合成带透明通道数据的MP4视频。
效果:
暂和lottie方案一致。(已接入实现)因为暂时使用同一份AE素材导出。不过显而易见地可以做得更精细,可能资源也会更大,目前mp4加2s的音效只有400k。
此处另外补一张此方案的效果对比一下,烟雾效果比lottie方案要逼真多了。
After Effects CC 全套入门教程 https://www.bilibili.com/video/BV1At411i7yZ?p=6&t=645
AE在我们项目中的应用除了上述特效动画,还有VE视频编辑模板。VE视频剪辑方案是一个集AE(Adore After Effects)和Pr(Premiere)软件功能为一体的视频处理方案。从视频特效的角度来看,它是一个类似After Effects的基于图层和特效插件系统的视频处理架构;从视频编辑的角度来讲,它是类似一个多轨道的含视频滤镜、贴纸、文字动画、轨道动画、视频特效、视频转场、视频动画为一体的视频编辑系统。
对于一个模板配置数据json进行分析(由VE配套工具导出)
附件 super_mosaic_config.json
对上述聊天特效烟花json数据进行分析(由lotttie配套ae插件导出)
附件 YanHua_ChengHong_750×750.json
从以下几个问题分析json数据结构
⑹ exo解码和原生解码哪个好
各有各的优缺点,存在即合理。
事物都有两面性,软解码和硬解码的并存,存在即合理,没有哪个最好,以后两者都会更好,而对于如何选择,根据项目需要。
举个例子,CPU相当于公司的CEO,GPU相当于公司技术总监、产品经理之类,来了一个需求,如果采用软解码,那就是让CEO去画原型,去一线写代码,这期间还要忙着各种大小的事物处理,如果采用硬解码,那就是CEO朝技术总监、产品经理发指令,让他们去完成一件事,并且定期查询完成的程度。
硬解码:就是调用GPU的专门模块进行解码,由显卡核心GPU来对视频进行解码工作。
软解码:通过软件让CPU来对视频进行解码处理。
对于硬解码和软解码的选择,这个真心说不上哪个更好,根据项目的需要,现在几乎所有的设备都支持硬解码和软解码,仅支持一种的Android移动设备已经属于古董级的,我是没见到过,之前更多的人愿意选择软解码,更大的原因是因为硬件解码支持的格式较少,而软解码对于格式是不受限制的。
现在随着硬件的不断提高,解码技术的不断成熟和完善,我是更倾向硬解码,但硬件提升的同时,CPU也在不断的优化和提高,现在也不需要像之前那样尽可能节省CPU,现在处于性能过剩的时代,CPU已经很难处于负荷状态,选择软解码或者硬解码都是没有谁对谁错,刚刚图上已经贴出和标记两者的优点,根据项目需要选择。
当时选择硬解码的ExoPlayer,是因为只需要播放m3u8格式的视频,画面上没有那么高的追求,对于这样的需求,硬解码更符合公司的口味和用户的体验,至少可以节省更多的电量。
⑺ android exoplayer 怎么样
公司项目了大概一个月了吧 exoplayer项目基本没有太大的问题
根据友盟返回的数据来看 大概有千分之四的人不能使用 兼容性问题还是存在的
出于一些原因 下版本已经打算放弃exoplayer...say goodbye.还是
vitamio好用些。
⑻ Android TV(一)(入门准备)
以下内容是对Google Android TV文档的翻译,可能存在错误,请读者以官方文档为准
官方地址
在文档中Google对Android TV的提出了许多要求,如果你只是使用它的一些UI元素,你可以不用太注意这些要求。
官方地址 镜像地址
TV应用在手机和平板电脑上使用相同的项目结构。这意味着你可以修改已经存在的应用使其在电视设备上运行或者在你已知的Android知识上创建新的应用。这部分内容主要是准备开发环境和开发TV应用的一些最低要求。(开发TV应用和手机应用本质是一致的,下面的一些要求只是你要使用到一些Google的库(Leanback support)或者要将应用在GooglePlay上线,否则,要求不必遵守)
Supported Media Formats
DRM
android.drm
ExoPlayer
android.media.MediaPlayer
这一部分主要关于如何修改一个已存在的Android项目或者创建一个新的项目。
下面是让app在电视设备上运行的主要部分:
1.Activity for TV,在manifest中声明一个activity。
2.TV Support Libraries
1.SDK tools version 24.0.0 或者更高
2.SDK with android5.0 或者更高
3.创建或更新项目(如果你要修改已存在的Android项目应该是该项目的target为5.0或者更高)
可以兼容到API17
如果一个应用打算运行在电视设备上它必须在manifest文件中声明一个TV activity。如下:
如果设置required属性为true,你的APP在设备上将只运行leanback ui。
运行在TV设备上的应用不需要通过触摸屏幕来输入。
v17 leanback library 为电视应用程序提供用户界面部件,特别是用于媒体播放的应用程序。
v7 recyclerview library
v7 cardview library
在完成上述步骤之后,是时候开始为大屏幕构建应用程序了!检查这些额外的主题,以帮助您建立您的应用程序的电视:
构建电视播放应用
帮助用户搜索内容
Building TV Games
Building TV Channels
⑼ Flutter TextTrue ios 视频渲染 YUV420 转换 BGRA
网易云信播放器 Flutter 封装
事情是这样的 我们公司的业务是有 视频播放这一块业务 而且 是基于网易云信的 视频服务的 做的开发 。公司的App开发框架是使用 Flutter , 那么问题来了 Flutter 怎么 实现视频播放嘞 , 官方给出的解决方案 是 ### video_player 这个库的 实现 是 原生端做视频解码 然后通过 Texture 的方式 映射到 Flutter 中 但是解码器 IOS 使用的是 官方的 AVPlayer (苹果官方提供的播放器 啥都好 就是不支持流媒体播放 ) Android 解码器则是 exoplayer 很好很nice
但是
网易云信的视频 是加密的 只有自己的 播放器sdk 在能解码播放 android 和 ios 都支持流媒体 so 只能自己封装
Android 使用 SurfaceTexture 衔接 视频流 正常 但是 ios emmm 网易云信 播放器 返回 的 编码格式 是 NELP_YUV420 就是 YUV420 直接映射到 Flutter 黑屏 但是有声音
因为Skia 引擎底层只支持了 BGRA 格式的视频数据 所以 和黑屏了
首先我们吧 YUV420 转换成 CVPixelBufferRef 方法如下
该方法依赖 libyuv 请自行导入
然后是 pixelBuffer To SampleBuffer
最后吧 SmapleBuffer 转换 BGRA
方法如何使用