
Recherche avancée
Médias (1)
-
Revolution of Open-source and film making towards open film making
6 octobre 2011, par
Mis à jour : Juillet 2013
Langue : English
Type : Texte
Autres articles (44)
-
Publier sur MédiaSpip
13 juin 2013Puis-je poster des contenus à partir d’une tablette Ipad ?
Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir -
Les formats acceptés
28 janvier 2010, parLes commandes suivantes permettent d’avoir des informations sur les formats et codecs gérés par l’installation local de ffmpeg :
ffmpeg -codecs ffmpeg -formats
Les format videos acceptés en entrée
Cette liste est non exhaustive, elle met en exergue les principaux formats utilisés : h264 : H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 m4v : raw MPEG-4 video format flv : Flash Video (FLV) / Sorenson Spark / Sorenson H.263 Theora wmv :
Les formats vidéos de sortie possibles
Dans un premier temps on (...) -
Les statuts des instances de mutualisation
13 mars 2010, parPour des raisons de compatibilité générale du plugin de gestion de mutualisations avec les fonctions originales de SPIP, les statuts des instances sont les mêmes que pour tout autre objets (articles...), seuls leurs noms dans l’interface change quelque peu.
Les différents statuts possibles sont : prepa (demandé) qui correspond à une instance demandée par un utilisateur. Si le site a déjà été créé par le passé, il est passé en mode désactivé. publie (validé) qui correspond à une instance validée par un (...)
Sur d’autres sites (8645)
-
I can't compile ffmpeg, don't know how to install sdl2 properly
11 mai 2019, par woopwoop399I’m compiling ffmpeg, on windows, with mingw-w64, and I need SDL2 so that the ffplay in ffmpeg compiles. I installed mingw-w64 using the web installer, I installed msys (to run the
./configure
that comes with ffmpeg) using the all in one package provided by mingw-w64. I installed SDL2 by downloading dev binaries from their site and runningmake native
in msys.So, it seems SDL2 isn’t installed properly or something.
Here is the problematic part in
./configure
:if enabled sdl2; then
echo "SDL2-1"
SDL2_CONFIG="${cross_prefix}sdl2-config"
test_pkg_config sdl2 "sdl2 >= 2.0.1 sdl2 < 2.1.0" SDL_events.h SDL_PollEvent
echo "SDL2-2"
if disabled sdl2 && "${SDL2_CONFIG}" --version > /dev/null 2>&1; then
echo "SDL2-3"
sdl2_cflags=$("${SDL2_CONFIG}" --cflags)
sdl2_extralibs=$("${SDL2_CONFIG}" --libs)
echo "SDL2-config ${SDL2_CONFIG}"
echo "SDL2-cflags ${sdl2_cflags}"
echo "SDL2-libs ${sdl2_extralibs}"
test_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x020001" $sdl2_cflags &&
echo "SDL2-4" &&
test_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x020100" $sdl2_cflags &&
echo "SDL2-5" &&
check_func_headers SDL_events.h SDL_PollEvent $sdl2_extralibs $sdl2_cflags &&
echo "SDL2-6-final" &&
enable sdl2
fi
if test $target_os = "mingw32"; then
sdl2_extralibs=$(filter_out '-mwindows' $sdl2_extralibs)
fi
fiThis is the result of it, it never gets to
SDL2-6-final
andenable sdl2
SDL2-1
SDL2-2
SDL2-3
SDL2-config sdl2-config
SDL2-cflags -I/usr/include/SDL2 -Dmain=SDL_main
SDL2-libs -L/usr/lib -lmingw32 -lSDL2main -lSDL2 -mwindows
SDL2-4
SDL2-5This is the sdl2 installation log :
User@NEW-PC /c/Users/User/Downloads/games/compilers/SDL2-2.0.9
$ make native
make install-package arch=i686-w64-mingw32 prefix=/usr
make[1]: Entering directory `/c/Users/User/Downloads/games/compilers/SDL2-2.0.9'
`bin/sdl2-config' -> `/usr/bin/sdl2-config'
`bin/SDL2.dll' -> `/usr/bin/SDL2.dll'
`include' -> `/usr/include'
`include/SDL2' -> `/usr/include/SDL2'
`include/SDL2/begin_code.h' -> `/usr/include/SDL2/begin_code.h'
`include/SDL2/close_code.h' -> `/usr/include/SDL2/close_code.h'
`include/SDL2/SDL.h' -> `/usr/include/SDL2/SDL.h'
`include/SDL2/SDL_assert.h' -> `/usr/include/SDL2/SDL_assert.h'
`include/SDL2/SDL_atomic.h' -> `/usr/include/SDL2/SDL_atomic.h'
`include/SDL2/SDL_audio.h' -> `/usr/include/SDL2/SDL_audio.h'
`include/SDL2/SDL_bits.h' -> `/usr/include/SDL2/SDL_bits.h'
`include/SDL2/SDL_blendmode.h' -> `/usr/include/SDL2/SDL_blendmode.h'
`include/SDL2/SDL_clipboard.h' -> `/usr/include/SDL2/SDL_clipboard.h'
`include/SDL2/SDL_config.h' -> `/usr/include/SDL2/SDL_config.h'
`include/SDL2/SDL_cpuinfo.h' -> `/usr/include/SDL2/SDL_cpuinfo.h'
`include/SDL2/SDL_egl.h' -> `/usr/include/SDL2/SDL_egl.h'
`include/SDL2/SDL_endian.h' -> `/usr/include/SDL2/SDL_endian.h'
`include/SDL2/SDL_error.h' -> `/usr/include/SDL2/SDL_error.h'
`include/SDL2/SDL_events.h' -> `/usr/include/SDL2/SDL_events.h'
`include/SDL2/SDL_filesystem.h' -> `/usr/include/SDL2/SDL_filesystem.h'
`include/SDL2/SDL_gamecontroller.h' -> `/usr/include/SDL2/SDL_gamecontroller.h'
`include/SDL2/SDL_gesture.h' -> `/usr/include/SDL2/SDL_gesture.h'
`include/SDL2/SDL_haptic.h' -> `/usr/include/SDL2/SDL_haptic.h'
`include/SDL2/SDL_hints.h' -> `/usr/include/SDL2/SDL_hints.h'
`include/SDL2/SDL_joystick.h' -> `/usr/include/SDL2/SDL_joystick.h'
`include/SDL2/SDL_keyboard.h' -> `/usr/include/SDL2/SDL_keyboard.h'
`include/SDL2/SDL_keycode.h' -> `/usr/include/SDL2/SDL_keycode.h'
`include/SDL2/SDL_loadso.h' -> `/usr/include/SDL2/SDL_loadso.h'
`include/SDL2/SDL_log.h' -> `/usr/include/SDL2/SDL_log.h'
`include/SDL2/SDL_main.h' -> `/usr/include/SDL2/SDL_main.h'
`include/SDL2/SDL_messagebox.h' -> `/usr/include/SDL2/SDL_messagebox.h'
`include/SDL2/SDL_mouse.h' -> `/usr/include/SDL2/SDL_mouse.h'
`include/SDL2/SDL_mutex.h' -> `/usr/include/SDL2/SDL_mutex.h'
`include/SDL2/SDL_name.h' -> `/usr/include/SDL2/SDL_name.h'
`include/SDL2/SDL_opengl.h' -> `/usr/include/SDL2/SDL_opengl.h'
`include/SDL2/SDL_opengles.h' -> `/usr/include/SDL2/SDL_opengles.h'
`include/SDL2/SDL_opengles2.h' -> `/usr/include/SDL2/SDL_opengles2.h'
`include/SDL2/SDL_opengles2_gl2.h' -> `/usr/include/SDL2/SDL_opengles2_gl2.h'
`include/SDL2/SDL_opengles2_gl2ext.h' -> `/usr/include/SDL2/SDL_opengles2_gl2ext.h'
`include/SDL2/SDL_opengles2_gl2platform.h' -> `/usr/include/SDL2/SDL_opengles2_gl2platform.h'
`include/SDL2/SDL_opengles2_khrplatform.h' -> `/usr/include/SDL2/SDL_opengles2_khrplatform.h'
`include/SDL2/SDL_opengl_glext.h' -> `/usr/include/SDL2/SDL_opengl_glext.h'
`include/SDL2/SDL_pixels.h' -> `/usr/include/SDL2/SDL_pixels.h'
`include/SDL2/SDL_platform.h' -> `/usr/include/SDL2/SDL_platform.h'
`include/SDL2/SDL_power.h' -> `/usr/include/SDL2/SDL_power.h'
`include/SDL2/SDL_quit.h' -> `/usr/include/SDL2/SDL_quit.h'
`include/SDL2/SDL_rect.h' -> `/usr/include/SDL2/SDL_rect.h'
`include/SDL2/SDL_render.h' -> `/usr/include/SDL2/SDL_render.h'
`include/SDL2/SDL_revision.h' -> `/usr/include/SDL2/SDL_revision.h'
`include/SDL2/SDL_rwops.h' -> `/usr/include/SDL2/SDL_rwops.h'
`include/SDL2/SDL_scancode.h' -> `/usr/include/SDL2/SDL_scancode.h'
`include/SDL2/SDL_sensor.h' -> `/usr/include/SDL2/SDL_sensor.h'
`include/SDL2/SDL_shape.h' -> `/usr/include/SDL2/SDL_shape.h'
`include/SDL2/SDL_stdinc.h' -> `/usr/include/SDL2/SDL_stdinc.h'
`include/SDL2/SDL_surface.h' -> `/usr/include/SDL2/SDL_surface.h'
`include/SDL2/SDL_system.h' -> `/usr/include/SDL2/SDL_system.h'
`include/SDL2/SDL_syswm.h' -> `/usr/include/SDL2/SDL_syswm.h'
`include/SDL2/SDL_test.h' -> `/usr/include/SDL2/SDL_test.h'
`include/SDL2/SDL_test_assert.h' -> `/usr/include/SDL2/SDL_test_assert.h'
`include/SDL2/SDL_test_common.h' -> `/usr/include/SDL2/SDL_test_common.h'
`include/SDL2/SDL_test_compare.h' -> `/usr/include/SDL2/SDL_test_compare.h'
`include/SDL2/SDL_test_crc32.h' -> `/usr/include/SDL2/SDL_test_crc32.h'
`include/SDL2/SDL_test_font.h' -> `/usr/include/SDL2/SDL_test_font.h'
`include/SDL2/SDL_test_fuzzer.h' -> `/usr/include/SDL2/SDL_test_fuzzer.h'
`include/SDL2/SDL_test_harness.h' -> `/usr/include/SDL2/SDL_test_harness.h'
`include/SDL2/SDL_test_images.h' -> `/usr/include/SDL2/SDL_test_images.h'
`include/SDL2/SDL_test_log.h' -> `/usr/include/SDL2/SDL_test_log.h'
`include/SDL2/SDL_test_md5.h' -> `/usr/include/SDL2/SDL_test_md5.h'
`include/SDL2/SDL_test_memory.h' -> `/usr/include/SDL2/SDL_test_memory.h'
`include/SDL2/SDL_test_random.h' -> `/usr/include/SDL2/SDL_test_random.h'
`include/SDL2/SDL_thread.h' -> `/usr/include/SDL2/SDL_thread.h'
`include/SDL2/SDL_timer.h' -> `/usr/include/SDL2/SDL_timer.h'
`include/SDL2/SDL_touch.h' -> `/usr/include/SDL2/SDL_touch.h'
`include/SDL2/SDL_types.h' -> `/usr/include/SDL2/SDL_types.h'
`include/SDL2/SDL_version.h' -> `/usr/include/SDL2/SDL_version.h'
`include/SDL2/SDL_video.h' -> `/usr/include/SDL2/SDL_video.h'
`include/SDL2/SDL_vulkan.h' -> `/usr/include/SDL2/SDL_vulkan.h'
`lib/cmake' -> `/usr/lib/cmake'
`lib/cmake/SDL2' -> `/usr/lib/cmake/SDL2'
`lib/cmake/SDL2/sdl2-config.cmake' -> `/usr/lib/cmake/SDL2/sdl2-config.cmake'
`lib/libSDL2.a' -> `/usr/lib/libSDL2.a'
`lib/libSDL2.dll.a' -> `/usr/lib/libSDL2.dll.a'
`lib/libSDL2.la' -> `/usr/lib/libSDL2.la'
`lib/libSDL2main.a' -> `/usr/lib/libSDL2main.a'
`lib/libSDL2main.la' -> `/usr/lib/libSDL2main.la'
`lib/libSDL2_test.a' -> `/usr/lib/libSDL2_test.a'
`lib/libSDL2_test.la' -> `/usr/lib/libSDL2_test.la'
`lib/pkgconfig' -> `/usr/lib/pkgconfig'
`lib/pkgconfig/sdl2.pc' -> `/usr/lib/pkgconfig/sdl2.pc'
`share/aclocal/sdl2.m4' -> `/usr/share/aclocal/sdl2.m4'
make[1]: Leaving directory `/c/Users/User/Downloads/games/compilers/SDL2-2.0.9'And this is what happens when I just comment out that last check in
./configure
and enable sdl2 anyway :c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib/libSDL2main.a when searching for -lSDL2main
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib/libSDL2.dll.a when searching for -lSDL2
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lSDL2
I tried using msys2 instead, it compiles, but the debugger there doesn’t work for some reason. I need to run the source code of ffmpeg in debugger to have a chance of understanding anything there. I need to use the combination of codeblocks and gdb, and programs compiled with msys2 use weird pathnames like /c/bla/bla/bla/main.c, and codeblocks is righteously weirded out by that. The mingw-w64 uses more sane pathnames, I just checked that.
Checked
ffbuild/config.log
, the problem is here :`c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lSDL2`
More in full :
test_pkg_config sdl2 sdl2 >= 2.0.1 sdl2 < 2.1.0 SDL_events.h SDL_PollEvent
pkg-config --exists --print-errors sdl2 >= 2.0.1 sdl2 < 2.1.0
check_func_headers SDL_events.h SDL_PollEvent -Dmain=SDL_main -IC:/msys/include/SDL2 -mwindows -LC:/msys/lib -lmingw32 -lSDL2main -lSDL2
test_ld cc -Dmain=SDL_main -IC:/msys/include/SDL2 -mwindows -LC:/msys/lib -lmingw32 -lSDL2main -lSDL2
test_cc -Dmain=SDL_main -IC:/msys/include/SDL2 -mwindows -LC:/msys/lib
BEGIN /tmp/ffconf.atBoPojc/test.c
1 #include
2 #include
3 long check_SDL_PollEvent(void) { return (long) SDL_PollEvent; }
4 int main(void) { int ret = 0;
5 ret |= ((intptr_t)check_SDL_PollEvent) & 0xFFFF;
6 return ret; }
END /tmp/ffconf.atBoPojc/test.c
gcc -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1 -D__printf__=__gnu_printf__ -D_WIN32_WINNT=0x0600 -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c11 -Dmain=SDL_main -IC:/msys/include/SDL2 -mwindows -LC:/msys/lib -c -o /tmp/ffconf.atBoPojc/test.o /tmp/ffconf.atBoPojc/test.c
C:/Users/User/AppData/Local/Temp/ffconf.atBoPojc/test.c: In function 'check_SDL_PollEvent':
C:/Users/User/AppData/Local/Temp/ffconf.atBoPojc/test.c:3:41: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
long check_SDL_PollEvent(void) { return (long) SDL_PollEvent; }
^
gcc -Wl,--nxcompat,--dynamicbase -Wl,--high-entropy-va -Wl,--as-needed -Wl,--image-base,0x140000000 -Dmain=SDL_main -IC:/msys/include/SDL2 -mwindows -LC:/msys/lib -o /tmp/ffconf.atBoPojc/test.exe /tmp/ffconf.atBoPojc/test.o -lmingw32 -lSDL2main -lSDL2
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib/libSDL2main.a when searching for -lSDL2main
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib\libSDL2main.a when searching for -lSDL2main
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib/libSDL2main.a when searching for -lSDL2main
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lSDL2main
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib/libSDL2.dll.a when searching for -lSDL2
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib/libSDL2.a when searching for -lSDL2
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib\libSDL2.a when searching for -lSDL2
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib/libSDL2.dll.a when searching for -lSDL2
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/msys/lib/libSDL2.a when searching for -lSDL2
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lSDL2
collect2.exe: error: ld returned 1 exit statusOkay, I managed to compile. I removed the sdl libraries from
C:/msys/lib
, and added them toC:\Program Files\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\lib
-
EXC_BAD_ACCESS at avformat_find_stream_info in FFMPEG
27 décembre 2018, par Mubin MallI achieved IP Camera streaming using ffmpeg with the help of this library : https://github.com/kolyvan/kxmovie also I am recording IPCamera streaming coming and same is done using ffmpeg.
Now I am facing one issue as soon as I add R5ProStreaming.framework in project and run application in real device application is getting crashed at
if (avformat_find_stream_info(formatCtx, NULL) < 0)
here.
And when I remove that framework and move it to trash and run again then all working fine.- (kxMovieError) openInput: (NSString *) path
{
AVFormatContext *formatCtx = NULL;
if (_interruptCallback) {
formatCtx = avformat_alloc_context();
if (!formatCtx)
return kxMovieErrorOpenFile;
AVIOInterruptCB cb = {interrupt_callback, (__bridge void *)(self)};
formatCtx->interrupt_callback = cb;
}
AVDictionary *opts = 0;
//
av_dict_set(&opts, "rtsp_transport", "tcp", 0);
if (avformat_open_input(&formatCtx, [path cStringUsingEncoding: NSUTF8StringEncoding], NULL, &opts) < 0) {
av_log(NULL, AV_LOG_ERROR, "Couldn't open file\n");
return kxMovieErrorStreamInfoNotFound;
}
if (avformat_open_input(&formatCtx, [path cStringUsingEncoding: NSUTF8StringEncoding], NULL, NULL) < 0) {
if (formatCtx)
avformat_free_context(formatCtx);
return kxMovieErrorOpenFile;
}
//-----APP IS GETTING CRASHED HERE AND GIVING EXC_BAD_ACCESS---//
if (avformat_find_stream_info(formatCtx, NULL) < 0)
{
avformat_close_input(&formatCtx);
return kxMovieErrorStreamInfoNotFound;
}
//
av_dump_format(formatCtx, 0, [path.lastPathComponent cStringUsingEncoding: NSUTF8StringEncoding], false);
_formatCtx = formatCtx;
inputFormatCtx = _formatCtx;
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"newdemo" ofType:@".mov"];
if (filePath)
{
NSLog(@"%s - %d # File found", __PRETTY_FUNCTION__, __LINE__);
}
else
{
NSLog(@"%s - %d # File NOT found", __PRETTY_FUNCTION__, __LINE__);
}
/*
* av_find_input_format(const char *short_name)
*
* Find AVInputFormat based on the short name of the input format.
*/
AVInputFormat *inputFormat = av_find_input_format([@"mpeg" UTF8String]);
if (inputFormat)
{
NSLog(@"%s - %d # inputFormat identifed", __PRETTY_FUNCTION__, __LINE__);
}
else
{
NSLog(@"%s - %d # inputFormat NOT identifed", __PRETTY_FUNCTION__, __LINE__) ;
}
const char *utf8FilePath = [filePath UTF8String];
NSLog(@"%s - %d # utf8FilePath = %s", __PRETTY_FUNCTION__, __LINE__, utf8FilePath);
/*
* avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options)
*
* Open an input stream and read the header. The codecs are not opened.
*/
int openInputValue =0;
NSLog(@"%s - %d # openInputValue = %d", __PRETTY_FUNCTION__, __LINE__, openInputValue);
if (openInputValue == 0)
{
NSLog(@"%s - %d # Can open the file", __PRETTY_FUNCTION__, __LINE__);
}
else
{
NSLog(@"%s - %d # Cannot open the file", __PRETTY_FUNCTION__, __LINE__);
avformat_close_input(&inputFormatCtx);
}
/*
* Read packets of a media file to get stream information.
*
* avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options)
*/
// int streamInfoValue = avformat_find_stream_info(inputFormatCtx, NULL);
// NSLog(@"%s - %d # streamInfoValue = %d", __PRETTY_FUNCTION__, __LINE__, streamInfoValue);
//
// if (streamInfoValue < 0)
// {
// NSLog(@"%s - %d # streamInfoValue Error", __PRETTY_FUNCTION__, __LINE__);
// avformat_close_input(&inputFormatCtx);
// }
/*
* nb_streams : Number of Audio and Video streams of the input file
*/
NSUInteger inputStreamCount = inputFormatCtx->nb_streams;
NSLog(@"%s - %d # inputStreamCount = %lu", __PRETTY_FUNCTION__, __LINE__, (unsigned long)inputStreamCount);
for(unsigned int i = 0; istreams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO)
{
NSLog(@"%s - %d # Found Video Stream", __PRETTY_FUNCTION__, __LINE__);
inputVideoStreamIndex = i;
inputVideoStream = inputFormatCtx->streams[i];
}
if(inputFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO)
{
NSLog(@"%s - %d # Found Audio Stream", __PRETTY_FUNCTION__, __LINE__);
inputAudioStreamIndex = i;
inputAudioStream = inputFormatCtx->streams[i];
}
}
if(inputVideoStreamIndex == -1 && inputAudioStreamIndex == -1)
{
NSLog(@"%s - %d # Have not found any Video or Audio stream", __PRETTY_FUNCTION__, __LINE__);
}
/*
* Finding duration of the stream
*/
if(inputFormatCtx->duration == AV_NOPTS_VALUE)
{
NSLog(@"%s - %d # Undefined timestamp value", __PRETTY_FUNCTION__, __LINE__);
if(_videoStream != -1 && inputFormatCtx->streams[_videoStream])
{
// if(inputFormatCtx->streams[_videoStream]->duration != AV_NOPTS_VALUE)
// {
inputEndtimeInt64 = (inputFormatCtx->streams[_videoStream]->duration)/(inputFormatCtx->streams[_videoStream]->time_base.den/inputFormatCtx->streams[_videoStream]->time_base.num);
// }
// else
// {
// inputEndtimeInt64 = (inputFormatCtx->duration)/(AV_TIME_BASE);
//
// }
}
else if(_audioStream != -1 && inputFormatCtx->streams[_audioStream])
{
// if(inputFormatCtx->streams[_audioStream]->duration != AV_NOPTS_VALUE)
// {
inputEndtimeInt64 = (inputFormatCtx->streams[_audioStream]->duration)/(AV_TIME_BASE);
// }
// else
// {
// inputEndtimeInt64 = (inputFormatCtx->duration)/(AV_TIME_BASE);
//
// }
}
}
else
{
NSLog(@"%s - %d # Defined timestamp value", __PRETTY_FUNCTION__, __LINE__);
inputEndtimeInt64 = (inputFormatCtx->duration)/(AV_TIME_BASE);
}
NSLog(@"%s - %d # inputEndtimeInt64 = %lld", __PRETTY_FUNCTION__, __LINE__, inputEndtimeInt64);
/*
* Finding out the frame rate
*/
if(_videoStream != -1 && inputFormatCtx->streams[_videoStream])
{
framesPerSec = (inputFormatCtx->streams[_videoStream]->r_frame_rate.num)/ (inputFormatCtx->streams[_videoStream]->r_frame_rate.den);
}
else
{
framesPerSec = 24;
}
numberOfFrames = framesPerSec * (int) inputEndtimeInt64;
NSLog(@"%s - %d # numberOfFrames = %d", __PRETTY_FUNCTION__, __LINE__, numberOfFrames);
/*
* Seek to timestamp ts.
*
* avformat_seek_file(AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags)
*/
if(avformat_seek_file(inputFormatCtx, inputAudioStreamIndex, INT64_MIN, outputStartTimeInt64, INT64_MAX, AVSEEK_FLAG_FRAME) < 0)
{
NSLog(@"%s - %d # Seek OK", __PRETTY_FUNCTION__, __LINE__);
}
else
{
NSLog(@"%s - %d # Seek ERROR", __PRETTY_FUNCTION__, __LINE__);
}
/*
* Creating output file path1
*/
// NSString * timestamp = [NSString stringWithFormat:@"%f",[[NSDate date] timeIntervalSince1970] * 1000];
//
// NSArray *directoryPathsArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
// NSString *documentsDirectory = [directoryPathsArray objectAtIndex:0];
// NSString *outputFilePath = [NSString stringWithFormat:@"%@/%@.mov",documentsDirectory,timestamp]; // Not working if we replace .avi with .mp4
NSString* filename = [NSString stringWithFormat:@"IPCamera%d.mov", _currentFile];
NSString* outputFilePath = [NSTemporaryDirectory() stringByAppendingPathComponent:filename];
_url = [NSURL fileURLWithPath:outputFilePath];
/*
* Return the output format in the list of registered output formats
* which best matches the provided parameters, or return NULL if
* there is no match.
*
* av_guess_format(const char *short_name, const char *filename, const char *mime_type)
*/
outputFormat = av_guess_format(NULL, [outputFilePath UTF8String], NULL);
NSLog(@"%s - %d # outputFormat->name = %s", __PRETTY_FUNCTION__, __LINE__, outputFormat->name);
if(outputFormat == NULL)
{
NSLog(@"%s - %d # outputFormat == NULL", __PRETTY_FUNCTION__, __LINE__);
}
else
{
/*
* Allocate an AVFormatContext.
*/
outputContext = avformat_alloc_context();
if(outputContext)
{
outputContext->oformat = outputFormat; // The output container format.
snprintf(outputContext->filename, sizeof(outputContext->filename), "%s", [outputFilePath UTF8String]);
}
else
{
NSLog(@"%s - %d # outputContext == NULL", __PRETTY_FUNCTION__, __LINE__);
}
}
outputVideoCodec = outputAudioCodec = NULL;
/*
* video_codec = default video codec
*/
if(outputFormat->video_codec != AV_CODEC_ID_NONE && inputVideoStream != NULL)
{
/*
* Find a registered encoder with a matching codec ID.
*
* avcodec_find_encoder(enum AVCodecID id)
*/
outputVideoCodec = avcodec_find_encoder(outputFormat->video_codec);
if(NULL == outputVideoCodec)
{
NSLog(@"%s - %d # Could Not Find Vid Encoder", __PRETTY_FUNCTION__, __LINE__);
}
else
{
NSLog(@"%s - %d # Found Out Vid Encoder", __PRETTY_FUNCTION__, __LINE__);
/*
* Add a new stream to a media file.
*
* avformat_new_stream(AVFormatContext *s, const AVCodec *c)
*/
outputVideoStream = avformat_new_stream(outputContext, outputVideoCodec);
if(NULL == outputVideoStream)
{
NSLog(@"%s - %d # Failed to Allocate Output Vid Strm", __PRETTY_FUNCTION__, __LINE__);
}
else
{
NSLog(@"%s - %d # Allocated Video Stream", __PRETTY_FUNCTION__, __LINE__);
/*
* Copy the settings of the source AVCodecContext into the destination AVCodecContext.
*
* avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src)
*/
if(avcodec_copy_context(outputVideoStream->codec, inputFormatCtx->streams[inputVideoStreamIndex]->codec) != 0)
{
NSLog(@"%s - %d # Failed to Copy Context", __PRETTY_FUNCTION__, __LINE__);
}
else
{
AVStream *st = _formatCtx->streams[_videoStream];
outputVideoStream->sample_aspect_ratio.den = outputVideoStream->codec->sample_aspect_ratio.den; // denominator
outputVideoStream->sample_aspect_ratio.num = st->codec->sample_aspect_ratio.num; // numerator
NSLog(@"%s - %d # Copied Context 1", __PRETTY_FUNCTION__, __LINE__);
outputVideoStream->codec->codec_id = st->codec->codec_id;
outputVideoStream->codec->time_base.num = st->codec->time_base.num;
outputVideoStream->codec->time_base.den = STREAM_FRAME_RATE;
outputVideoStream->time_base.num = st->time_base.num;
outputVideoStream->time_base.den = st->time_base.den;
outputVideoStream->r_frame_rate.num =st->r_frame_rate.num;
outputVideoStream->nb_frames = STREAM_NB_FRAMES;
outputVideoStream->r_frame_rate.den = st->r_frame_rate.den;
outputVideoStream->avg_frame_rate.den = st->avg_frame_rate.num;
outputVideoStream->avg_frame_rate.num = st->avg_frame_rate.num;
// outputVideoStream->duration = st->duration;
}
}
}
}
if(outputFormat->audio_codec != AV_CODEC_ID_NONE && inputAudioStream != NULL)
{
outputAudioCodec = avcodec_find_encoder(outputFormat->audio_codec);
if(NULL == outputAudioCodec)
{
NSLog(@"%s - %d # Could Not Find Out Aud Encoder", __PRETTY_FUNCTION__, __LINE__);
}
else
{
NSLog(@"%s - %d # Found Out Aud Encoder", __PRETTY_FUNCTION__, __LINE__);
outputAudioStream = avformat_new_stream(outputContext, outputAudioCodec);
if(NULL == outputAudioStream)
{
NSLog(@"%s - %d # Failed to Allocate Out Vid Strm", __PRETTY_FUNCTION__, __LINE__);
}
else
{
if(avcodec_copy_context(outputAudioStream->codec, inputFormatCtx->streams[inputAudioStreamIndex]->codec) != 0)
{
NSLog(@"%s - %d # Failed to Copy Context", __PRETTY_FUNCTION__, __LINE__);
}
else
{
// AVStream *st = _formatCtx->streams[_audioStream];
NSLog(@"%s - %d # Copied Context 2", __PRETTY_FUNCTION__, __LINE__);
outputAudioStream->codec->codec_id = inputAudioStream->codec->codec_id;
outputAudioStream->codec->codec_tag = 0;
// outputAudioStream->pts = inputAudioStream->pts;
// outputAudioStream->duration = inputAudioStream->duration;
outputAudioStream->time_base.num = inputAudioStream->time_base.num;
outputAudioStream->time_base.den = inputAudioStream->time_base.den;
}
}
}
}
if (!(outputFormat->flags & AVFMT_NOFILE))
{
/*
* Create and initialize a AVIOContext for accessing the resource indicated by url.
*
* avio_open2(AVIOContext **s, const char *url, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options)
*/
if (avio_open2(&outputContext->pb, [outputFilePath UTF8String], AVIO_FLAG_WRITE, NULL, NULL) < 0)
{
NSLog(@"%s - %d # Could Not Open File", __PRETTY_FUNCTION__, __LINE__);
}
}
/* Write the stream header, if any. */
/*
* Allocate the stream private data and write the stream header to an output media file.
*
* avformat_write_header(AVFormatContext *s, AVDictionary **options);
*/
if (avformat_write_header(outputContext, NULL) < 0)
{
NSLog(@"%s - %d # Error Occurred While Writing Header", __PRETTY_FUNCTION__, __LINE__);
}
else
{
NSLog(@"%s - %d # Written Output header", __PRETTY_FUNCTION__, __LINE__);
initDone = true;
}
return kxMovieErrorNone;
}More over I contacted Red5Pro team and asked them regarding that along with video demo. They replied me like this
What’s most likely happening is that the version of FFMPEG that’s being loaded by that project is incompatible with the customized version of it that’s embedded in our SDK, and some duplicate definition error is causing the wrong version to be loaded. It could also be any number of conflicts between one of the libraries in that project with the SDK, or one of the support libraries that the sdk requires ( I have to assume that since it compiled, that you did add the libraries listed in step four here : https://www.red5pro.com/docs/streaming/ios.html#project-setup ) and if that’s the case, I don’t know of a good way to correct the issue as chasing down individual third-party libraries that raise incompatibilities with our SDKs to correct them is beyond the reach of our team. (edited)
Can anybody have idea where to look ?
Thanks
-
Revision 93109 : Compat PHP7 (peut être pas encore suffisant). La structure foreach ...
23 novembre 2015, par marcimat@… — LogCompat PHP7 (peut être pas encore suffisant).
La structure foreach change de comportement et s’applique par défaut sur une copie du tableau passé.
Si on modifie le tableau dans le foreach… bien celui d’origine n’est pas affecté. Pour retrouver
le comportement d’avant dans ces cas là, il faut passer la valeur par référence.
cf.
https://wiki.php.net/rfc/php7_foreach
http://php.net/manual/fr/migration70.incompatible.php