⑴ 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
方法如何使用