① java使用ffmpeg進行視頻截圖,不成功,程序也沒報錯!
我用的是基於C++的ffmpeg開發,ffmpeg原本是針對linux下的GCC編譯器,當然通過MinGW也可以在win下進行編譯,但是需要安裝額外的編譯環境,你可以上chinavideo上去看看,那上面說的很清楚,的你所說的問題也不是很難,多看看開發文檔就可以解決了。
② 如何用android NDK編譯FFmpeg
Android內置的編解碼器實在太少,於是我們需要FFmpeg。Android提供了NDK,為我們使用FFmpeg這種C語言代碼提供了方便。
不過為了用NDK編譯FFmpeg,還真的花費了不少時間,也得到了很多人的幫助,最應該謝謝havlenapetr。我覺得我現在這些方法算是比較簡潔的了--
下面就盡量詳細的說一下我是怎麼在項目中使用FFmpeg的,但是基於我混亂的表達能力,有不明白的就問我。
你得了解JNI和Android NDK的基本用法,若覺得我的文章還不錯,可以看之前寫的JNI簡單入門和Android NDK入門
首先創建一個標準的Android項目vPlayer
android create project -n vPlayer -t 8 -p vPlayer -k me.abitno.vplayer -a PlayerView
然後在vPlayer目錄里
mkdir jni && cd jni
wget http //ffmpeg org/releases/ffmpeg-0.6.tar.bz2
tar xf ffmpeg-0.6.tar.bz2 && mv ffmpeg-0.6 ffmpeg && cd ffmpeg
在ffmpeg下新建一個config.sh,內容如下,注意把PREBUILT和PLATFORM設置正確。另外裡面有些參數你也可以自行調整,我主要是為了配置一個播放器而這樣設置的。
#!/bin/bash
PREBUILT=/home/abitno/Android/android-ndk-r4/build/prebuilt/linux-x86/arm-eabi-4.4.0
PLATFORM=/home/abitno/Android/android-ndk-r4/build/platforms/android-8/arch-arm
./configure --target-os=linux \
--arch=arm \
--enable-version3 \
--enable-gpl \
--enable-nonfree \
--disable-stripping \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffserver \
--disable-ffprobe \
--disable-encoders \
--disable-muxers \
--disable-devices \
--disable-protocols \
--enable-protocol=file \
--enable-avfilter \
--disable-network \
--disable-mpegaudio-hp \
--disable-avdevice \
--enable-cross-compile \
--cc=$PREBUILT/bin/arm-eabi-gcc \
--cross-prefix=$PREBUILT/bin/arm-eabi- \
--nm=$PREBUILT/bin/arm-eabi-nm \
--extra-cflags="-fPIC -DANDROID" \
--disable-asm \
--enable-neon \
--enable-armv5te \
--extra-ldflags="-Wl,-T,$PREBUILT/arm-eabi/lib/ldscripts/armelf.x -Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib $PREBUILT/lib/gcc/arm-eabi/4.4.0/crtbegin.o $PREBUILT/lib/gcc/arm-eabi/4.4.0/crtend.o -lc -lm -ldl"
運行config.sh開始configure
chmod +x config.sh
./config.sh
configure完成後,編輯剛剛生成的config.h,找到這句
#define restrict restrict
Android的GCC不支持restrict關鍵字,於是修改成下面這樣
#define restrict
編輯libavutil/libm.h,把其中的static方法都刪除。
分別修改libavcodec、libavfilter、libavformat、libavutil、libpostproc和libswscale下的Makefile,把下面兩句刪除
include $(SUBDIR)../subdir.mak
include $(SUBDIR)../config.mak
在ffmpeg下添加一個文件av.mk,內容如下
# LOCAL_PATH is one of libavutil, libavcodec, libavformat, or libswscale
#include $(LOCAL_PATH)/../config-$(TARGET_ARCH).mak
include $(LOCAL_PATH)/../config.mak
OBJS :=
OBJS-yes :=
MMX-OBJS-yes :=
include $(LOCAL_PATH)/Makefile
# collect objects
OBJS-$(HAVE_MMX) += $(MMX-OBJS-yes)
OBJS += $(OBJS-yes)
FFNAME := lib$(NAME)
FFLIBS := $(foreach,NAME,$(FFLIBS),lib$(NAME))
FFCFLAGS = -DHAVE_AV_CONFIG_H -Wno-sign-compare -Wno-switch -Wno-pointer-sign
FFCFLAGS += -DTARGET_CONFIG=\"config-$(TARGET_ARCH).h\"
ALL_S_FILES := $(wildcard $(LOCAL_PATH)/$(TARGET_ARCH)/*.S)
ALL_S_FILES := $(addprefix $(TARGET_ARCH)/, $(notdir $(ALL_S_FILES)))
ifneq ($(ALL_S_FILES),)
ALL_S_OBJS := $(patsubst %.S,%.o,$(ALL_S_FILES))
C_OBJS := $(filter-out $(ALL_S_OBJS),$(OBJS))
S_OBJS := $(filter $(ALL_S_OBJS),$(OBJS))
else
C_OBJS := $(OBJS)
S_OBJS :=
endif
C_FILES := $(patsubst %.o,%.c,$(C_OBJS))
S_FILES := $(patsubst %.o,%.S,$(S_OBJS))
FFFILES := $(sort $(S_FILES)) $(sort $(C_FILES))
接下來要添加一系列的Android.mk,在jni根目錄下的內容如下
include $(all-subdir-makefiles)
在ffmpeg目錄下,Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_STATIC_LIBRARIES := libavformat libavcodec libavutil libpostproc libswscale
LOCAL_MODULE := ffmpeg
include $(BUILD_SHARED_LIBRARY)
include $(call all-makefiles-under,$(LOCAL_PATH))
libavformat/Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
include $(LOCAL_PATH)/../av.mk
LOCAL_SRC_FILES := $(FFFILES)
LOCAL_C_INCLUDES := \
$(LOCAL_PATH) \
$(LOCAL_PATH)/..
LOCAL_CFLAGS += $(FFCFLAGS)
LOCAL_CFLAGS += -include "string.h" -Dipv6mr_interface=ipv6mr_ifindex
LOCAL_LDLIBS := -lz
LOCAL_STATIC_LIBRARIES := $(FFLIBS)
LOCAL_MODULE := $(FFNAME)
include $(BUILD_STATIC_LIBRARY)
libavcodec/Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
include $(LOCAL_PATH)/../av.mk
LOCAL_SRC_FILES := $(FFFILES)
LOCAL_C_INCLUDES := \
$(LOCAL_PATH) \
$(LOCAL_PATH)/..
LOCAL_CFLAGS += $(FFCFLAGS)
LOCAL_LDLIBS := -lz
LOCAL_STATIC_LIBRARIES := $(FFLIBS)
LOCAL_MODULE := $(FFNAME)
include $(BUILD_STATIC_LIBRARY)
libavfilter、libavutil、libpostproc和libswscale下的Android.mk內容如下
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
include $(LOCAL_PATH)/../av.mk
LOCAL_SRC_FILES := $(FFFILES)
LOCAL_C_INCLUDES := \
$(LOCAL_PATH) \
$(LOCAL_PATH)/..
LOCAL_CFLAGS += $(FFCFLAGS)
LOCAL_STATIC_LIBRARIES := $(FFLIBS)
LOCAL_MODULE := $(FFNAME)
include $(BUILD_STATIC_LIBRARY)
最外層的jni/Android.mk和jni/ffmpeg/Android.mk我只是隨便這樣寫的,你應該根據自己的需求改寫。
最後運行ndk-build,經過漫長的等待就編譯完成了。至於具體怎麼應用可能以後會寫,我變得太懶了。。。
轉載,僅供參考,祝你愉快,滿意請採納。
③ java用什麼軟體編寫編程軟體工具推薦
一、軟體工具
1、java
IntelliJ IDEA(純屬於個人喜好),有社區版和商用版,商用版本需要花錢,當然有不花錢的辦法,直接網路或私聊。
IntelliJ IDEA的優點就不多做解釋,介紹它的幾個容易被忽視的用法:
Split Right/Down、Local History、F11快捷鍵、tab limit、Http Client、markdown
另外介紹idea幾款插件:
1)Dark Purple Theme:深紫色主題
2)Background Image Plus:背景圖片插件
ps:看看2者結合的效果,要的就是賞心悅目,我有大量二次元bg圖片,可以私聊。
3)Maven Helper:查看maven相關依賴以及快速排除依賴
4)SonarLint:代碼規范和質量檢測
5)leetcode editor:刷演算法題必備
6)Free Mybatis plugin:mybatis插件
2、資料庫
1)關系型:navicat、DBeaver(開源免費)、plsql(oracle)
2)redis:Redis Desktop Manager
3)mongdb:Robo 3T
4)elasticsearch:elasticsearch-head、kibana(elk)
3、伺服器
1)linux ssh:MobaXterm、FinalShell(吃內存) 、xshell、SecureCRT、putty
2)docker:Portainer可視化工具、harbor私有鏡像倉庫
3)kubernetes:Kuboard、Rancher
4)git:gitLab私有代碼庫
5)maven:nexus私服
6)ci/cd:jenkins
4、網路請求
1)webservice:SoapUi
2)http:Postman、idea http Client
3)抓包:Fiddler
4)遠程:向日葵、TeamViewer
5)內網穿透:花生殼
6)推流:FFmpeg
二、其他工具
1、開源工具
1)java工具包:Hutool、Guava
2)java反編譯工具:jd-gui、Luyten
3)jvm診斷命令:jps、jstack、jstat、jmap、jinfo
4)jvm分析工具:Dump Analyzer(IBM)、jvisualvm(jdk)、arthas(阿里)
5)zookeeper:ZooInspector
6)etl:kettle、datax
7)pdf工具:wkhtmltopdf(html轉pdf)
8)文本編輯器:Sublime Text 3
9)動態桌面:UPUPOO(老版)
2、技術文檔
1)博客:docsite(markdown),可以看看阿里的Nacos官網
2)面試:JavaGuide面試基本知識點
3)文檔存儲:網路雲盤、阿里雲盤、有道雲筆記
4)規范:阿里巴巴Java開發規范、Codelf人工智慧命名
5)技術學習:GitHub/Gitee、開源中國、博客園、b站、今日頭條
6)書籍:effectivejava、java編程思想、java並發編程藝術、Java數據結構與演算法、深入理解java虛擬機、HeadFirst設計模式。ps:私聊有pdf電子版
7)接單:開源眾包、程序員客棧、碼市、英選、快碼
3、spring-boot學習推薦
1)cloud-platform:Cloud-Platform: 國內首個Spring Cloud微服務化RBAC的管理平台,核心採用Spring Boot 2.4、Spring Cloud 2020.0.0 & Alibaba,前端採用d2-admin中台框架。 記得上邊點個star 關注更新
2)microservices-platform:Cloud-Platform: 國內首個Spring Cloud微服務化RBAC的管理平台,核心採用Spring Boot 2.4、Spring Cloud 2020.0.0 & Alibaba,前端採用d2-admin中台框架。 記得上邊點個star 關注更新
3)jeecg-boot:jeecg-boot: 「企業級低代碼平台」前後端分離架構SpringBoot 2.x,SpringCloud,Ant Design&Vue,Mybatis-plus,Shiro,JWT。強大的代碼生成器讓前後端代碼一鍵生成,無需寫任何代碼! 引領新的開發模式OnlineCoding->代碼生成->手工MERGE,幫助Java項目解決70%重復工作,讓開發更關注業務,既能快速提高效率,幫助公司節省成本,同時又不失靈活性。
4)agile-bpm-basic:agile-bpm-basic: 【工作流-流程管理】【智慧協同OA】【移動辦公】【SpringBoot2-快速開發平台】 企業級流程解決方案, 前後端分離,模塊化,超低耦合。 基於activiti5.22,零java代碼即可做到復雜業務的流程實施
④ 使用JAVA調用ffmpeg組件進行視頻轉換時不成功
FFMPEG沒有java可以直接調用的API,網上那些基本上是通過調用cmd命令來實現轉換的。這種方法很容易出錯,效率低而且也不容易調試。最好的辦法是讓提供商提供flv格式的文件。如果不行你只有測試一下直接用FFMPEG的圖形界面轉看結果如何,然後嘗試更換參數,視頻文件和FFMPEG版本。