当前位置:首页 » 操作系统 » ffmpeg源码

ffmpeg源码

发布时间: 2022-01-21 05:47:07

㈠ 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#的一个图像计算机视觉库,该库是一个开源项目,提供很多图像的处理,和视频处理功能

热点内容
编程常数 发布:2024-09-19 08:06:36 浏览:950
甘肃高性能边缘计算服务器云空间 发布:2024-09-19 08:06:26 浏览:161
win7家庭版ftp 发布:2024-09-19 07:59:06 浏览:714
数据库的优化都有哪些方法 发布:2024-09-19 07:44:43 浏览:268
知乎华为编译器有用吗 发布:2024-09-19 07:32:20 浏览:617
访问虚拟机磁盘 发布:2024-09-19 07:28:13 浏览:668
原地工作算法 发布:2024-09-19 07:28:07 浏览:423
如何设置linux的ip地址 发布:2024-09-19 07:22:25 浏览:750
微信忘记密码如何修改密码 发布:2024-09-19 07:05:07 浏览:80
云服务器怎么上网 发布:2024-09-19 06:56:24 浏览:148