ffmpeg源码
㈠ ffmpeg源码是c还是c++
是c语言开发的。教你一种办法,查看库函数等的源码方法。
网络进入github网站,搜索ffmpeg,找到源码。查看文件类型。
如图
就知道是c语言开发的了
㈡ ffmpeg 有必要学习源码吗
ffmpeg 官方资料 维护的不是很好,很多函数的说明都不够明确。所以学习ffmpeg的最好的方式是看源码。ffmpeg的源码结构还是挺清晰的,可读性比较强,可以从官方的几个例程开始看。网上也有中文的ffmpeg教程,讲解了几个主要函数,可以作为一个参考。如果只是应用的话,光看命令就行了。
㈢ 怎么修改ffmpeg里面的源码,让它实现流共享
while (1) {
AVPacket pkt;
// 不知道pkt是否完整
ret = av_read_frame(f->ctx, &pkt);
if (ret == AVERROR(EAGAIN)) {
av_usleep(10000);
continue;
}
if (ret < 0) {
av_thread_message_queue_set_err_recv(f->in_thread_queue, ret);
break;
}
}
FFMpeg不提供接口,那么就只有修改FFMpeg源码,浏览FFMpeg源码一天后,对外的接口只需要在AVPacket结构体里面增加一个判断包完整性的标志变量,修改源码后的接口调用如下:
while (1) {
AVPacket pkt;
ret = av_read_frame(f->ctx, &pkt);
if (pkt.nLostPackets) {
// Do something.
} else {
// Do something
}
}
㈣ ffmpeg有demo吗
是要编译libjnivideo.so和libjniaudio.so 这两个so因为不同的版本或者修改过的framework是不一样的,所以需要在android源码中 编译出自己的so。我的android 2.1源码是从官网下载回来的,没有经过修改。
下载链接中的native目录下的源码到framework/base目录下具体看他的目录结构。https://github:com/havlenapetr/android_frameworks_base编译主要有3个错误
1.
library 'libjnigraphics.so' not in prelink map
当前目录下的Android.mk 加上
LOCAL_PRELINK_MODULE := false2.
frameworks/base/native/video/jni/surface.cpp:17:36: error: surfaceflinger/Surface.h: No such file or directory
修改头文件
#include <android/surface.h>
#include <ui/Surface.h>
#include <utils/Log.h>
#include <SkBitmap.h>
#include <SkCanvas.h>3.
make: *** 没有规则可以创建“out/target/proct/generic/obj/SHARED_LIBRARIES/libjnivideo_intermediates/LINKED/libjnivideo.so”需要的目标“out/target/proct/generic/obj/lib/libsurfaceflinger_client.so”。 停止。
当前目录下的Android.mk
LOCAL_SHARED_LIBRARIES := /
libskia /
libui /
libutils /
liblog
到这里如果幸运的话可以编译出so。其次是编译libffmpeg_jni.so
需要修改的地方:
1.
jni/jni/Android.mkLOCAL_C_INCLUDES += /
$(LOCAL_PATH)/../libffmpeg /
$(LOCAL_PATH)/../libmediaplayer /
$(LOCAL_PATH)/../include /
$(LOCAL_PATH)/../include/androidifeq ($(IN_NDK),true)
LOCAL_LDLIBS := -llog
else
LOCAL_PRELINK_MODULE := false
LOCAL_LDLIBS := -llog
LOCAL_SHARED_LIBRARIES := liblog
endif
2.
Vector.h#include <new>
#include <stdint.h>
#include <sys/types.h>#include <cutils/log.h>
#include <utils/VectorImpl.h>
#include <utils/TypeHelpers.h>
#include <android/Errors.h>
3.
<utils/TypeHelpers.h>4
VectorImpl.h#include <assert.h>
#include <stdint.h>
#include <sys/types.h>
#include <android/Errors.h>5.
VectorImpl.cpp
#include <string.h>
#include <stdlib.h>
#include <stdio.h>#include <cutils/log.h>
#include <android/Errors.h>
#include <utils/SharedBuffer.h>
#include <utils/VectorImpl.h>
同时也要把刚才两个编译出来的so放到obj/local/armeabi目录下,之后就可以了编译出libffmpeg_jni.so.
最后也要把刚才两个so放到libs/armeabi目录下。要不然运行的时候找不到。
播放的时候太卡了,声音也没有同步。
㈤ FFmpeg和h.264是什么关系,是不是FFmpeg这套源码中有以h.264标准设计的编码器,可以这样理解吗
H.264是一种编码协议,FFMPEG官网上是这样说的:FFmpeg is a complete, cross-platform solution to record, convert and stream audio and video. It includes libavcodec - the leading audio/video codec library. 在FFMPEG中还没有H.264协议的编码支持,这个要结合X264项目来进行H264编码,先把X264装上,然后再进行FFMPEG的配置,至于ffmpeg + x264进行H.264编码可以再查看一些相关的帖子.
㈥ ffmpeg 代码是不是完全开源
是的
本开源代码播放器使用的音视频解码代码来源于ffmpeg-0.6.3(http://www.ffmpeg.org),
jni衔接代码和java层代码来源于havlenapetr(https://github.com/havlenapetr/FFMpeg)。
移植ffmpeg到android的常规关键点网上有很多的帖子可以参考,也可以用文件夹比较工具比较一下,看看添加修改删除了那些文件。
本开源代码的编译环境
1: Android SDK 2.2版,
2: NDK r4版,注意要导出NDK宏,
3: IDE开发环境是 eclips 3.5 版
4: libffplay.so是在Android 2.2版源码目录树中编译出来的,使用Ubuntu10.04和VMware7.1.1版,目前源码不公开
5: libffmpeg.so编译步骤,cd /cygwin/c/ffplay, ./config_r4.sh, $NDK/ndk-build
6: PC主机开发环境是windows xp。
特别注意,此demo只能在 Android SDK 2.2版上使用,其他版本有修改源码,重新编译才行。
此开源代码解决了几个特别关键点,达到实用水平。几个关键点如下:
1:arm汇编代码编译支持,主要是在几个.mk文件中添加LOCAL_ARM_MODE := arm语句,
在config_r4.sh文件中添加--arch=armv5te和--enable-asm 等开关。
2:在ffmpeg config_r4.sh配置文件中关闭了一些不用的选项后,连接时总是报一些莫名其妙的连接错误,
本开源代码给出终极解决方案(在/jni/jni/Android.mk文件中添加 LOCAL_LDLIBS += C:/ffplay/bin/ndk/local/armeabi/libavcodec.a等语句)。
3:修改havlenapetr中的视频显示错误bug,经测试havlenapetr原始代码在模拟器设置为320x480时显示正确,在更大的分辨率下显示错误,
本开源代码已修改好此bug,现在无论什么分辨率都可以正确显示。
此开源代码其他注意事项:
1:jni衔接代码相比havlenapetr精简了几个数量级,更方便网友们研习。
2:此开源代码不包括play,pause,stop,seek和视音频同步等功能实现代码,这部分代码不开源。
3:Android jni层直接输出音频示例,Android jni层直接输出视频示例,基于ffmpeg的Android播放器开源代码,三个工程使用相同的库,相同的方法和技巧,可相互参考。
在moto defy me525上测试通过。
㈦ ffmpeg源码太大了,我只想要H264转到MP4的部分代码,该怎么办
mp4是容器,在容器格式库中找,libavformat
h.264是视频编码在编码库中找,libavcodec
㈧ ffmpeg是基于什么语言编写的
很负责人的告诉你 是用c语言写的 是个庞然大物 集成了编码解码等功能 里面按功能划分成了几个库 也依赖了一些其他的库 FFmpeg被应用于很多的播放器甚至是商业产品中 比如暴风影音 QQ影音等播放器都是基于它开发的 你可以在GitHub上或者FFmpeg官网上找到它的源码
㈨ aforge.video.ffmpeg 源码在哪
AForge.Net 是C#的一个图像计算机视觉库,该库是一个开源项目,提供很多图像的处理,和视频处理功能