您的位置:首页 > 编程语言 > Java开发

FFmpeg的使用及NDK编译FFmpeg库(windows下Eclipse )

2017-01-02 20:36 459 查看
> FFmpeg的使用

FFmpeg录制/压缩/上传视频等

使用FFmpeg压缩视频

使用 FFmpeg 和 libx264(一个第三方的视频编码器) 来编译

利用FFmpeg API ,YUV编码为H264、PCM编码为AAC

指定 decoder 和 encoder,因为我需要的是视频压缩,所以编码器(encoder)我就只需要 x264(视频编码) 和 aac(音频编码),至于解码器,挑几个常用的就可以了

定制化的压缩处理。如设置视频尺寸、设置码率、码率模式、帧率、视频质量等级、压缩速度等
https://github.com/mabeijianxi/small-video-record.  https://github.com/mabeijianxi/FFmpeg4Android

多段视频合并?

  FFmpeg全名是Fast Forward MPEG(Moving Picture Experts Group):FFmpeg能够在各个平台(Linux、Mac OS X、Microsoft Windows、BSDs、Solaris等)和架构(x86、arm、mips等)中运行和编译,经得起考验。

  利用FFmpeg玩转Android视频录制与压缩(一)- http://blog.csdn.net/mabeijianxi/article/details/63335722
  利用FFmpeg玩转Android视频录制与压缩(二)- http://blog.csdn.net/mabeijianxi/article/details/72983362
  利用FFmpeg玩转Android视频录制与压缩(三)- http://blog.csdn.net/mabeijianxi/article/details/73011313
   

FFmpeg-Android拍摄压缩Demo- http://www.jianshu.com/p/fd748001ca53
手把手图文并茂教你用Android Studio编译FFmpeg库并移植- http://blog.csdn.net/hejjunlin/article/details/52661331
任何一个视频 Video 文件,从结构上讲,都是这样一种组成方式:

 由图像和音频构成最基本的内容元素;

 图像经过视频编码压缩格式处理(通常是 H.264);

 音频经过音频编码压缩格式处理(例如 AAC);

 注明相应的元信息(Metadata);

 最后经过一遍容器(Container)封装打包(例如 MP4),构成一个完整的视频文件。

-----------------------------------------------------------------------------------------------------------------------------

FFmpeg编译和移植???

Ubuntu编译Android使用的FFmpeg- https://www.cnblogs.com/furzoom/p/7710126.html
Ubuntu14.04编译Android FFmpeg详细教程- http://blog.csdn.net/poison_h/article/details/51146754
Ubuntu 16.04 编译ffmpeg- http://blog.csdn.net/miaomiao12345678/article/details/52346207?locationNum=2
Ubuntu编译Android FFmpeg3.24- http://m.blog.csdn.net/chezi008/article/details/68949041
> ffmpeg, a collection of libraries and tools to process multimedia content such as audio, video, subtitles and related metadata.

ffmpeg官网: https://ffmpeg.org/download.html
在Android/Ndk环境下FFmpeg的编译及使用, FFmpeg自带了H264、AAC、MP3的解码器,但却没有(或没有好的)相应的编码器。相应的编码器需要使用第三方库。推荐使用的第三方库为x264(H264编码) 、FDK_AAC(AAC编码),lame(MP3编码)。在顺序上,应该先编译好第三方库,最后再编译FFmpeg库。

ffmpeg- http://baike.baidu.com/link?url=KUTLmroDNbtVBFB5o3YvEwp7j8_2p-FTY_6fFI_plGef3l-VZ4nkXpnf_AR-GR3XnhEMYuf1drgnSSxiHM07Ka
音视频类如FFmpeg的博客- http://blog.csdn.net/leixiaohua1020?viewmode=contents
FFmpeg 是一个集录制、转换、音/视频编码解码功能为一体的完整的开源解决方案.FFmpeg 支持 MPEG、DivX、MPEG4、AC3、DV、FLV 等40多种编码,支持AVI、MPEG、OGG、Matroska、ASF 等90多种解码.记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

FFmpeg 主目录下主要有 libavcodec 、 libavformat 和 libavutil 等子目录。其中 libavcodec 用于存放各个encode/decode模块.

> cmake编译ffmpeg

  Studio使用CMake,CMake的优势:

1.可以直接的在C/C++代码中加入断点,进行调试

2.java引用的C/C++中的方法,可以直接ctrl+左键进入

3.对于include的头文件或者库,也可以直接进入

4.不需要配置命令行操作,手动的生成头文件,不需要配置android.useDeprecatedNdk=true属性

  CMake方式的NDK开发,我们得到如下步骤:

1.新建cpp目录,写好C/C++代码。

2.创建且配置CMakeLists.txt文件。

3.build.gradle文件中根据情况进行配置,CMakeLists.txt文件的路径必须配置。

4.java代码中即可调用C/C++代码,运行程序。

5.project的build.gradle文件中,gradle版本不能低于2.2,否则会报错。

Android开发学习之路--Android Studio cmake编译ffmpeg- http://blog.csdn.net/eastmoon502136/article/details/52806640
android studio使用CMAKE编译ffmepg- http://download.csdn.net/download/qq_25817651/9680958#comment
> Window下NDK编译FFmpeg android

Windows下环境Android配置- http://www.9miao.com/thread-57586-1-1.html http://www.roman10.net/2013/08/18/how-to-build-ffmpeg-with-ndk-r9/
用Android NDK编译FFmpeg-  http://www.oschina.net/question/4873_27372

win7下编译android版ffmpeg- http://blog.csdn.net/finewind/article/details/42214343
Android Multimedia框架总结(二十六)利用FFmpeg进行解码直播流- https://mp.weixin.qq.com/s?__biz=MzI2OTQxMTM4OQ==&mid=2247484660&idx=1&sn=462bb0c08bcc06ed57046cf2bf57a659&chksm=eae1f1a6dd9678b0ede52250daf275c5ff840de0ee55c4628509b48ec5b932890031be3c67b8#rd

手把手图文并茂教你用Android Studio编译FFmpeg库并移植- http://mp.weixin.qq.com/s?__biz=MzI2OTQxMTM4OQ==&mid=2247484013&idx=1&sn=3cfdb06c7a4f470555402459c30685df&chksm=eae1f73fdd967e2955ffc79f7cf042440a7e63a60f5650e0a4098aa78feb0566bbe0793cf7b1&scene=21#wechat_redirect

利用FFmpeg玩转Android视频录制与压缩(一)- http://blog.csdn.net/mabeijianxi/article/details/63335722
> Windows下用ndk编译ffmpeg- http://blog.csdn.net/miller1026/article/details/49717025
编译FFmpeg库并移植(important)

Android Studio编译FFmpeg库并移植- https://pan.baidu.com/s/1eRVON4m
最简单的基于FFmpeg的移动端例子:Android HelloWorld- http://blog.csdn.net/leixiaohua1020/article/details/47008825
手把手图文并茂教你用Android Studio编译FFmpeg库并移植- http://blog.csdn.net/hejjunlin/article/details/52661331
实现了一款基于FFMpeg的支持多路视频的实时流媒体播放器:https://github.com/huweijian5/RtspPlayer 

最简单的基于FFmpeg的移动端例子:Android HelloWorld- http://blog.csdn.net/leixiaohua1020/article/details/47008825
window环境下使用ndk编译出android studio/Eclipse能使用的ffmpeg动态库- http://blog.csdn.net/u013252711/article/details/52262514
音视频聊天开发: 7 Android下ffmpeg+x264编译- http://blog.chinaunix.net/uid-15063109-id-4579915.html
windows下用ndk r9编译ffmpeg- http://blog.csdn.net/gycs626/article/details/36378717
windows 下使用 MinGW + msys 编译 ffmpeg- http://blog.csdn.net/leixiaohua1020/article/details/12755173 windows10下编译ffmpeg for android- http://blog.csdn.net/huweijian5/article/details/52840177
1.下载并安装mingw,配置mingw的path环境变量

2.双击mingw目录下的msys.bat,MinGW\msys\1.0\msys.bat

3.修改ffmpeg的一些变量及配置

4.在msys.bat的DOS界面中,cd 切换到ffmpeg目录E:/workplace_eclipse_android/DesacoAV/jni/ffmpeg-3.3.1,并输入执行./build_android.sh命令

生成的so有:swresample,avcodec,avformat,swscale,postproc,avfilter,avdevice,sffstreamer。。。

#!/bin/bash

export TMPDIR=E:/workplace_eclipse_android/ffmpeg/temp

NDK=F:/software_ide/android_eclipse_ide/android-ndk-r10b

SYSROOT=$NDK/platforms/Android-18/arch-arm

TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/windows

CPU=arm

PREFIX=E:/workplace_eclipse_android/ffmpeg/temp

ADDI_CFLAGS="-Os -fpic -marm"

function build_one

{

./configure \

--prefix=$PREFIX \

--enable-shared \

--enable-static \

--enable-asm \

--enable-neon \

--disable-doc \

--disable-ffmpeg \

--disable-ffplay \

--disable-ffprobe \

--disable-ffserver \

--disable-doc \

--disable-symver \

--enable-pthreads \

--enable-small \

--enable-jni \

--enable-mediacodec \

--enable-runtime-cpudetect \

--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \

--target-os=android \

--arch=arm \

--enable-cross-compile \

--sysroot=$SYSROOT \

--extra-cflags="$ADDI_CFLAGS" \

--extra-ldflags="$ADDI_LDFLAGS" \

$ADDITIONAL_CONFIGURE_FLAG

make clean

make

make install

}

build_one

read -p "Press any key to continue."

---------------------------------------

FFmpeg自带了H264、AAC、MP3的解码器,但却没有(或没有好的)相应的编码器。相应的编码器需要使用第三方库。推荐使用的第三方库为x264(H264编码) 、FDK_AAC(AAC编码),lame(MP3编码)。

ffmpeg(视频采集/编码/传输/解码/播放),音视频的格式转换;FFMPEG数据封装格式、多媒体传输协议以及音视频编解码器

Android 使用FFmpeg实现视频录制和视频播放- http://download.csdn.net/download/somnus_comm/8691523
Android最简单的编译FFmpeg成一个SO库- http://blog.csdn.net/chengkaizone/article/details/52984002
NDK环境下FFmpeg及AAC,MP3,X264的编译- http://blog.csdn.net/iamshaofa/article/details/44116743
使用 NDK r9 编译ffmpeg- http://blog.csdn.net/lihenair/article/details/22787547
如何发送RTMP请求??如何搭建RTMP服务器?

  RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。支持该协议的软件包括Adobe Media Server/Ultrant Media Server/red5等。

  Android 使用Rtmp音视频推流- http://blog.csdn.net/a992036795/article/details/54583571https://github.com/blueberryCoder/LiveStream
“如何在android上播放m3u8视频”是android开发者最常见的问题之一。通过Http 协议进行视频流直播最简单的办法就是使用标准的 VideoView. 但只能在android3.0以上的设备上播放m3u8流。因为在Android 3.0引入HTTP/ HTTPS直播和HTTP/ HTTPS渐进式流媒体协议,在android3.1完全支持HTTPS。

流媒体协议(RTP RTCP RTSP RTMP HLS)

Vitamio 是收费的,其实百度的解码库也很强大,而且针对不同架构的CPU做了优化,不过后来好像更新比较慢了,如果公司不舍得花钱的话,可以看下百度的云媒体服务。

vitamio ,webRTC ,ffmpeg ,vlc ,ijkplayer

  先说下 vitamio这个是功能很强大,但是企业收费版的,个人用户可以玩玩. 

目前WebRtc只适合小范围(8人以内)音视频会议,不适合做直播可以用WebRTC来做视频直播吗? 

接下来介绍下 ffmpeg vlc ijkplayer以及选择方案

  ffmpeg是一个非常强大的音视频编解码开源库,目前市场上流行的播放器,大部分都是基于此开发的,包括暴风,腾讯,等等以及上面提到的vitamio,vlc,ijkplayer 

关于ffmpeg源码分析,有兴趣的请看雷霄骅(leixiaohua1020)的专栏

  vlc 支持android开发 ,ijkplayer也支持. 通过反编译网易云音乐,以及YY等音视频app.发现网易云音乐,斗鱼用的ijkplayer,YY用的VLC. 

  那么vlc&ijkplayer相比较各有什么优缺点呐,该如何选择呐?[待深入使用,或者用过的可以交流下] 

其实这个没有深入分析,ijkplayer是bilibili开源的音视频编解码库,对android,iOS进行和很好的抽取封装,易于编译使用.vlc尝试过,稍微复杂些.

RTMP直播推流方案:FFmpeg进行直播推流 百度云推流SDK,七牛推流SDK
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: