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

> FFmpeg的使用

FFmpeg录制/压缩/上传视频等;使用FFmpeg压缩视频;使用 FFmpeg 和 libx264(一个第三方的视频编码器) 来编译;利用FFmpeg API ,YUV编码为H264、PCM编码为AAC;多段视频合并?


-- 指定 decoder 和 encoder,因为我需要的是视频压缩,所以编码器(encoder)我就只需要 x264(视频编码) 和 aac(音频编码),至于解码器,挑几个常用的就可以了
定制化的压缩处理。如设置视频尺寸、设置码率、码率模式、帧率、视频质量等级、压缩速度等

-- 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的移动端例子: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/54583571 , https://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

你可能感兴趣的:(音视频方案)