Giter Site home page Giter Site logo

githubhaohao / learnffmpeg Goto Github PK

View Code? Open in Web Editor NEW
1.4K 19.0 335.0 193.08 MB

Android FFmpeg 音视频开发教程

Java 5.97% CMake 0.14% C++ 63.95% C 29.22% GLSL 0.73%
ffmpeg ffmpeg-opengles android-ffmpeg learn-ffmpeg ffplayer ffmpeg-recorder ffmpeg-render ffmpeg-player

learnffmpeg's Introduction

Github State

字节流动 github stats

learnffmpeg's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

learnffmpeg's Issues

编译失败

有人能给一个编译好的apk吗,谢谢

scale error code:870, mean:Error number 870 occurred

你好,我这边使用glReadPixels抓取的一帧数据,
int width = 1920;
int height = 870;
int frameRate = 60;
int fmt_size = sizeof(unsigned char) * 4;
int row_size = width * fmt_size;
int bufferSize = width * height * fmt_size * 2;
HANDLE hEvent;
unsigned char *_data;
unsigned char *_tmpdata = new unsigned char[bufferSize];
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE /0x8035/,
_tmpdata);
for (int i = 0; i < height; i++) {
memcpy(&_data[i * row_size], &_tmpdata[(height - i - 1) * row_size],
row_size);
}

	EncoderManager::getInstance().encode(_tmpdata, width, height);

先进行转换YUV, scale时报错了。 传入的宽高是一个固定的值: 1920*870, 帮给看看

AVFrame *EncoderManager::toAVFrame(unsigned char *data, int width, int height) {
AVFrame *avFrame = av_frame_alloc();

av_image_alloc(avFrame->data, avFrame->linesize, width,
height, encoder->getCodecContext()->pix_fmt, 1);

std::int32_t row_pitch {};
row_pitch = width * 4;
const int linessizes[2] {
row_pitch, 0
};
const uint8_t *tmp[2] = { (uint8_t *)data, NULL };
SwsContext *sws = sws_getContext(width, height, AV_PIX_FMT_RGBA, width, height,
AV_PIX_FMT_YUV420P, SWS_FAST_BILINEAR, NULL, NULL, NULL);
int ret = sws_scale(sws, tmp, linessizes, 0, encoder->getCodecContext()->height,
avFrame->data, avFrame->linesize);
printfString("toAVFrame scale", ret);
return avFrame;
}

EncoderManager::encode:1920, 870
toAVFrame scale error code:870, mean:Error number 870 occurred
encode sw
MediaCodec::queueInputToEncoder::error input to encoder
queueInputToEncoder result error code:-1, mean:Operation not permitted
EncoderManager::run:frameCount:1

音视频同步

原生的ffmpeg播放rtsp延时 200+ms,这个demo怎么延时了3~4s?是因为加锁的问题吗?

项目克隆下来,跑步起来 博主 你看看啥情况

`Execution failed for task ':app:externalNativeBuildDebug'.

Build command failed.
Error while executing process C:\Users\Administrator\AppData\Local\Android\Sdk\cmake\3.6.4111459\bin\cmake.exe with arguments {--build C:\Users\Administrator\Desktop\LearnFFmpeg\app.cxx\cmake\debug\arm64-v8a --target learn-ffmpeg}
[1/1] Linking CXX shared library C:\Users\Administrator\Desktop\LearnFFmpeg\app\build\intermediates\cmake\debug\obj\arm64-v8a\liblearn-ffmpeg.so
FAILED: cmd.exe /C "cd . && C:\Users\Administrator\AppData\Local\Android\Sdk\ndk\23.1.7779620\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe --target=aarch64-none-linux-android21 --gcc-toolchain=C:/Users/Administrator/AppData/Local/Android/Sdk/ndk/23.1.7779620/toolchains/llvm/prebuilt/windows-x86_64 --sysroot=C:/Users/Administrator/AppData/Local/Android/Sdk/ndk/23.1.7779620/toolchains/llvm/prebuilt/windows-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -std=c++11 -frtti -fexceptions -std=gnu++11 -fno-limit-debug-info -static-libstdc++ -Wl,--build-id=sha1 -Wl,--no-rosegment -Wl,--fatal-warnings -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,liblearn-ffmpeg.so -o C:\Users\Administrator\Desktop\LearnFFmpeg\app\build\intermediates\cmake\debug\obj\arm64-v8a\liblearn-ffmpeg.so CMakeFiles/learn-ffmpeg.dir/learn-ffmpeg.cpp.o CMakeFiles/learn-ffmpeg.dir/util/GLUtils.cpp.o CMakeFiles/learn-ffmpeg.dir/common/AVPacketQueue.cpp.o CMakeFiles/learn-ffmpeg.dir/player/FFMediaPlayer.cpp.o CMakeFiles/learn-ffmpeg.dir/player/HWCodecPlayer.cpp.o CMakeFiles/learn-ffmpeg.dir/player/PlayerWrapper.cpp.o CMakeFiles/learn-ffmpeg.dir/player/decoder/AudioDecoder.cpp.o CMakeFiles/learn-ffmpeg.dir/player/decoder/DecoderBase.cpp.o CMakeFiles/learn-ffmpeg.dir/player/decoder/VideoDecoder.cpp.o CMakeFiles/learn-ffmpeg.dir/player/render/video/NativeRender.cpp.o CMakeFiles/learn-ffmpeg.dir/player/render/video/VRGLRender.cpp.o CMakeFiles/learn-ffmpeg.dir/player/render/video/VideoGLRender.cpp.o CMakeFiles/learn-ffmpeg.dir/player/render/audio/AudioGLRender.cpp.o CMakeFiles/learn-ffmpeg.dir/player/render/audio/OpenSLRender.cpp.o CMakeFiles/learn-ffmpeg.dir/recorder/SingleVideoRecorder.cpp.o CMakeFiles/learn-ffmpeg.dir/recorder/SingleAudioRecorder.cpp.o CMakeFiles/learn-ffmpeg.dir/recorder/MediaRecorderContext.cpp.o CMakeFiles/learn-ffmpeg.dir/recorder/GLCameraRender.cpp.o CMakeFiles/learn-ffmpeg.dir/recorder/MediaRecorder.cpp.o -LC:/Users/Administrator/Desktop/LearnFFmpeg/app/src/main/cpp/../jniLibs/arm64-v8a -lavformat -lavcodec -lavfilter -lswresample -lswscale -lavutil -lfdk-aac -lx264 -landroid -lmediandk -lEGL -lGLESv3 -lOpenSLES -llog -lm -lz -latomic -lm && cd ."
ld: error: relocation R_AARCH64_ADR_PREL_PG_HI21 cannot be used against symbol ff_cos_32; recompile with -fPIC

`

找不到 GLESv3

编译的时候,找不到 openGL的库

/Users/yummylau/ffmpeg/android-ndk-r21b/toolchains/llvm/prebuilt/darwin-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: cannot find -lGLESv3

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.