日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

android 录屏自动运行,Android录屏+视频转Gif实现

發(fā)布時(shí)間:2023/12/31 Android 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 录屏自动运行,Android录屏+视频转Gif实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

jerry-wang-1154193-unsplash.jpg

錄屏轉(zhuǎn)動(dòng)圖

最近看見一個(gè)視頻轉(zhuǎn)GIF的開源項(xiàng)目:ffmpeg-commands-executor-library,有時(shí)會(huì)有手機(jī)錄屏轉(zhuǎn)成GIF動(dòng)圖的需求,都是下載一個(gè)錄屏軟件錄屏,再下一個(gè)轉(zhuǎn)換軟件,一般是電腦上的軟件或者在線轉(zhuǎn)換,效果也不怎么好,就想借這個(gè)東西來做一個(gè)錄屏轉(zhuǎn)GIF合一的APP

Android錄屏

Android 5.0+ 可以利用MediaProject 在非 root 情況下實(shí)現(xiàn)屏幕錄制,具體過程就是開啟錄屏服務(wù),設(shè)置SurfaceView去接收內(nèi)容,獲取視頻流,然后通過MediaCodec來實(shí)現(xiàn)視頻的硬編碼,然后保存為視頻文件

Android 5.0+ 屏幕錄制:介紹了如何進(jìn)行屏幕錄制還有具體的demo

Android截屏、錄屏工具:可以快速依賴,集成錄屏功能

FFmpeg的使用

1.FFmpeg視頻轉(zhuǎn)GIF命令,我感覺應(yīng)該這應(yīng)該是是最全的命令了,時(shí)間單位為s,會(huì)根據(jù)寬度值自適應(yīng)高度

String command = "ffmpeg -i " + pathFrom + " -ss " + 跳過開頭時(shí)間 + " -t " + 轉(zhuǎn)換的時(shí)間 + " -vf scale=" + gif寬度 + ":-1 -r " + gif幀率 + " " + pathTo;

//ffmpeg-commands-executor-library中的方法

2.使用ffmpeg-commands-executor-library中的方法來執(zhí)行命令

FFmpegNativeHelper.runCommand(command);

這樣的確可以轉(zhuǎn)化成功,但是有一個(gè)bug,就是每次打開APP只能轉(zhuǎn)換一次,第二次會(huì)失敗,看得出來作者已經(jīng)沒有維護(hù)了,這樣其實(shí)也沒什么問題,每次轉(zhuǎn)換重新打開APP就好了,非常簡單,而且還有其他ffmpeg的功能也可以用。

編譯FFmpeg庫

ffmpeg這么強(qiáng)大的一個(gè)開源庫,現(xiàn)在程序有這么大一個(gè)bug存在,那肯定是不能忍受的,可以自己去下載ffmpeg源碼然后編譯出在Android上面可以運(yùn)行的庫。涉及到JNI和NDk,但其實(shí)一點(diǎn)都不難,我之前也沒有接觸過,不過看了幾篇教程踩了不少坑也成功了。

在Android中集成FFmpeg:我編譯的庫,可以快速依賴,集成FFmpeg,也有源碼

網(wǎng)上文章很多,但是真的有各種問題,我試了不少,下面兩篇文章完全照著做其實(shí)也是不行的,但是改改還是可以搞定。

注意問題

文章里面教的復(fù)制的ffmpeg的源碼有點(diǎn)小問題,找不到的就先不要管;

在Android里面報(bào)錯(cuò)找不到c++的類,我們要根據(jù)找不到的類的名字去FFmpeg里面去找,然后添加進(jìn)去;

然后c++中有些明明同一個(gè)包下的類找不到,因?yàn)樵谕粋€(gè)文件夾下面的類其實(shí)不用導(dǎo)入,原c++文件導(dǎo)入時(shí)候添加了當(dāng)前包名導(dǎo)致路徑出錯(cuò),可以直接刪除導(dǎo)入的代碼(就是import*什么的刪除掉就好了)

其實(shí)到了文章最后,也講了之前那個(gè)二次調(diào)用失敗的問題,并且給出了解決方案:

FFmpeg每次執(zhí)行完命令后會(huì)調(diào)用 ffmpeg_cleanup 函數(shù)清理內(nèi)存,并且會(huì)調(diào)用exit(0)結(jié)束當(dāng)前進(jìn)程,但是經(jīng)過我們的修改,exit()的代碼已經(jīng)被刪掉,而我們的App還在運(yùn)行,不能殺死進(jìn)程,所以有些變量的值還在內(nèi)存中,這樣就會(huì)導(dǎo)致下次執(zhí)行的時(shí)候可能會(huì)出錯(cuò)。

打開ffmpeg.c找到剛修改的run函數(shù),然后在 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;

完美方案

但是這個(gè)方法只解決了函數(shù)清理的問題,這樣去運(yùn)行命名,還是有問題程序完成后直接退出了,原因很簡單,其實(shí)就是c++完成后調(diào)用了下面這個(gè)函數(shù),是結(jié)束當(dāng)前進(jìn)程,這個(gè)東西還是沒有改好

int exit_program(int ret)

{

if (program_exit)

program_exit(ret);

return ret;

}

只需要改成這樣就好了:

int exit_program(int ret)

{

return ret;

}

支持錄屏后轉(zhuǎn)gif,支持?jǐn)z像后轉(zhuǎn)gif,支持本地視頻轉(zhuǎn)gif以及各種參數(shù)設(shè)置(側(cè)邊欄菜單中設(shè)置)

總結(jié)

以上是生活随笔為你收集整理的android 录屏自动运行,Android录屏+视频转Gif实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。