android 录屏自动运行,Android录屏+视频转Gif实现
jerry-wang-1154193-unsplash.jpg
錄屏轉動圖
最近看見一個視頻轉GIF的開源項目:ffmpeg-commands-executor-library,有時會有手機錄屏轉成GIF動圖的需求,都是下載一個錄屏軟件錄屏,再下一個轉換軟件,一般是電腦上的軟件或者在線轉換,效果也不怎么好,就想借這個東西來做一個錄屏轉GIF合一的APP
Android錄屏
Android 5.0+ 可以利用MediaProject 在非 root 情況下實現屏幕錄制,具體過程就是開啟錄屏服務,設置SurfaceView去接收內容,獲取視頻流,然后通過MediaCodec來實現視頻的硬編碼,然后保存為視頻文件
Android 5.0+ 屏幕錄制:介紹了如何進行屏幕錄制還有具體的demo
Android截屏、錄屏工具:可以快速依賴,集成錄屏功能
FFmpeg的使用
1.FFmpeg視頻轉GIF命令,我感覺應該這應該是是最全的命令了,時間單位為s,會根據寬度值自適應高度
String command = "ffmpeg -i " + pathFrom + " -ss " + 跳過開頭時間 + " -t " + 轉換的時間 + " -vf scale=" + gif寬度 + ":-1 -r " + gif幀率 + " " + pathTo;
//ffmpeg-commands-executor-library中的方法
2.使用ffmpeg-commands-executor-library中的方法來執行命令
FFmpegNativeHelper.runCommand(command);
這樣的確可以轉化成功,但是有一個bug,就是每次打開APP只能轉換一次,第二次會失敗,看得出來作者已經沒有維護了,這樣其實也沒什么問題,每次轉換重新打開APP就好了,非常簡單,而且還有其他ffmpeg的功能也可以用。
編譯FFmpeg庫
ffmpeg這么強大的一個開源庫,現在程序有這么大一個bug存在,那肯定是不能忍受的,可以自己去下載ffmpeg源碼然后編譯出在Android上面可以運行的庫。涉及到JNI和NDk,但其實一點都不難,我之前也沒有接觸過,不過看了幾篇教程踩了不少坑也成功了。
在Android中集成FFmpeg:我編譯的庫,可以快速依賴,集成FFmpeg,也有源碼
網上文章很多,但是真的有各種問題,我試了不少,下面兩篇文章完全照著做其實也是不行的,但是改改還是可以搞定。
注意問題
文章里面教的復制的ffmpeg的源碼有點小問題,找不到的就先不要管;
在Android里面報錯找不到c++的類,我們要根據找不到的類的名字去FFmpeg里面去找,然后添加進去;
然后c++中有些明明同一個包下的類找不到,因為在同一個文件夾下面的類其實不用導入,原c++文件導入時候添加了當前包名導致路徑出錯,可以直接刪除導入的代碼(就是import*什么的刪除掉就好了)
其實到了文章最后,也講了之前那個二次調用失敗的問題,并且給出了解決方案:
FFmpeg每次執行完命令后會調用 ffmpeg_cleanup 函數清理內存,并且會調用exit(0)結束當前進程,但是經過我們的修改,exit()的代碼已經被刪掉,而我們的App還在運行,不能殺死進程,所以有些變量的值還在內存中,這樣就會導致下次執行的時候可能會出錯。
打開ffmpeg.c找到剛修改的run函數,然后在 return 前加上如下代碼即可:
nb_filtergraphs = 0;
progress_avio = NULL;
input_streams = NULL;
nb_input_streams = 0;
input_files = NULL;
nb_input_files = 0;
output_streams = NULL;
nb_output_streams = 0;
output_files = NULL;
nb_output_files = 0;
完美方案
但是這個方法只解決了函數清理的問題,這樣去運行命名,還是有問題程序完成后直接退出了,原因很簡單,其實就是c++完成后調用了下面這個函數,是結束當前進程,這個東西還是沒有改好
int exit_program(int ret)
{
if (program_exit)
program_exit(ret);
return ret;
}
只需要改成這樣就好了:
int exit_program(int ret)
{
return ret;
}
支持錄屏后轉gif,支持攝像后轉gif,支持本地視頻轉gif以及各種參數設置(側邊欄菜單中設置)
總結
以上是生活随笔為你收集整理的android 录屏自动运行,Android录屏+视频转Gif实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电大有计算机教程吗,电大教程 计算机概述
- 下一篇: Pillow 10行代码给营业执照模板写