Recherche avancée

Médias (2)

Mot : - Tags -/plugins

Autres articles (47)

  • (Dés)Activation de fonctionnalités (plugins)

    18 février 2011, par

    Pour gérer l’ajout et la suppression de fonctionnalités supplémentaires (ou plugins), MediaSPIP utilise à partir de la version 0.2 SVP.
    SVP permet l’activation facile de plugins depuis l’espace de configuration de MediaSPIP.
    Pour y accéder, il suffit de se rendre dans l’espace de configuration puis de se rendre sur la page "Gestion des plugins".
    MediaSPIP est fourni par défaut avec l’ensemble des plugins dits "compatibles", ils ont été testés et intégrés afin de fonctionner parfaitement avec chaque (...)

  • Activation de l’inscription des visiteurs

    12 avril 2011, par

    Il est également possible d’activer l’inscription des visiteurs ce qui permettra à tout un chacun d’ouvrir soit même un compte sur le canal en question dans le cadre de projets ouverts par exemple.
    Pour ce faire, il suffit d’aller dans l’espace de configuration du site en choisissant le sous menus "Gestion des utilisateurs". Le premier formulaire visible correspond à cette fonctionnalité.
    Par défaut, MediaSPIP a créé lors de son initialisation un élément de menu dans le menu du haut de la page menant (...)

  • D’autres logiciels intéressants

    12 avril 2011, par

    On ne revendique pas d’être les seuls à faire ce que l’on fait ... et on ne revendique surtout pas d’être les meilleurs non plus ... Ce que l’on fait, on essaie juste de le faire bien, et de mieux en mieux...
    La liste suivante correspond à des logiciels qui tendent peu ou prou à faire comme MediaSPIP ou que MediaSPIP tente peu ou prou à faire pareil, peu importe ...
    On ne les connais pas, on ne les a pas essayé, mais vous pouvez peut être y jeter un coup d’oeil.
    Videopress
    Site Internet : (...)

Sur d’autres sites (5764)

  • error : undefined reference to 'av_free_packet(AVPacket*)' when use NDK to compile ffmpeg

    23 juin 2015, par wolfz

    I compiled my cpps to use ffmpeg liberary with ANDROID NDK by my android MK as follow :

       LOCAL_PATH := $(call my-dir)
       DEFINES += -DTARGET_POSIX \
                  -DTARGET_LINUX \
              -D_LINUX \
              -DTARGET_ANDROID \
              -D__STDC_CONSTANT_MACROS

       include $(CLEAR_VARS)  
       LOCAL_MODULE := libavcodec
       LOCAL_SRC_FILES := lib/lib/libavcodec.so
       include $(PREBUILT_SHARED_LIBRARY)  

       include $(CLEAR_VARS)  
       LOCAL_MODULE := libavfilter  
       LOCAL_SRC_FILES := lib/lib/libavfilter.so
       include $(PREBUILT_SHARED_LIBRARY)  

       include $(CLEAR_VARS)  
       LOCAL_MODULE := libavformat  
       LOCAL_SRC_FILES := lib/lib/libavformat.so  
       include $(PREBUILT_SHARED_LIBRARY)  

       include $(CLEAR_VARS)  
       LOCAL_MODULE := libavutil  
       LOCAL_SRC_FILES := lib/lib/libavutil.so  
       include $(PREBUILT_SHARED_LIBRARY)  

       include $(CLEAR_VARS)  
       LOCAL_MODULE := libpostproc  
       LOCAL_SRC_FILES := lib/lib/libpostproc.so  
       include $(PREBUILT_SHARED_LIBRARY)  

       include $(CLEAR_VARS)  
       LOCAL_MODULE := libswresample  
       LOCAL_SRC_FILES := lib/lib/libswresample.so  
       include $(PREBUILT_SHARED_LIBRARY)  

       include $(CLEAR_VARS)  
       LOCAL_MODULE := libswscale  
       LOCAL_SRC_FILES := lib/lib/libswscale.so
       include $(PREBUILT_SHARED_LIBRARY)  

       include $(CLEAR_VARS)
       LOCAL_MODULE:= player
       base := $(LOCAL_PATH)
       LOCAL_SRC_FILES += cores/PlayDemux.cpp \
                      cores/PlayDemuxFFmpeg.cpp \
                      cores/PlayFactoryDemuxer.cpp

       LOCAL_C_INCLUDES += $(LOCAL_PATH) \
               $(LOCAL_PATH)/lib \
               $(LOCAL_PATH)/lib/include \
               $(LOCAL_PATH)/cores/player \
       LOCAL_CPPFLAGS += -Wall -fexceptions $(DEFINES)
       include $(BUILD_STATIC_LIBRARY)

       include $(CLEAR_VARS)
       LOCAL_MODULE:= testmain

       LOCAL_SRC_FILES := \
           testmain.cpp \

       LOCAL_C_INCLUDES += $(LOCAL_PATH) \
                   $(LOCAL_PATH)/lib
       LOCAL_CPPFLAGS += -Wall -fexceptions $(DEFINES)

       LOCAL_SHARED_LIBRARIES := libavcodec \
                   libavformat \
                   libavfilter \
                   libavutil \
                   libpostproc \
                   libswscale \
                   libswresample

       LOCAL_STATIC_LIBRARIES := player

       include $(BUILD_EXECUTABLE)

    but when i do "ndk-build v=1", After compiling, I got :

       Install        : libavcodec.so => libs/armeabi-v7a/libavcodec.so
       install -p /cygdrive/d/player/obj/local/armeabi-v7a/libavcodec.so /cygdrive/d/player/libs/armeabi-v7a/libavcodec.so
       /cygdrive/d/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-strip --strip-unneeded D:/player/libs/armeabi-v7a/libavcodec.so
       Install        : libavfilter.so => libs/armeabi-v7a/libavfilter.so
       install -p /cygdrive/d/player/obj/local/armeabi-v7a/libavfilter.so /cygdrive/d/player/libs/armeabi-v7a/libavfilter.so
       /cygdrive/d/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-strip --strip-unneeded D:/player/libs/armeabi-v7a/libavfilter.so
       Install        : libavformat.so => libs/armeabi-v7a/libavformat.so
       install -p /cygdrive/d/player/obj/local/armeabi-v7a/libavformat.so /cygdrive/d/player/libs/armeabi-v7a/libavformat.so
       /cygdrive/d/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-strip --strip-unneeded D:/player/libs/armeabi-v7a/libavformat.so
       Install        : libavutil.so => libs/armeabi-v7a/libavutil.so
       install -p /cygdrive/d/player/obj/local/armeabi-v7a/libavutil.so /cygdrive/d/player/libs/armeabi-v7a/libavutil.so
       /cygdrive/d/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-strip --strip-unneeded D:/player/libs/armeabi-v7a/libavutil.so
       Install        : libpostproc.so => libs/armeabi-v7a/libpostproc.so
       install -p /cygdrive/d/player/obj/local/armeabi-v7a/libpostproc.so /cygdrive/d/player/libs/armeabi-v7a/libpostproc.so
       /cygdrive/d/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-strip --strip-unneeded D:/player/libs/armeabi-v7a/libpostproc.so
       Install        : libswresample.so => libs/armeabi-v7a/libswresample.so
       install -p /cygdrive/d/player/obj/local/armeabi-v7a/libswresample.so /cygdrive/d/player/libs/armeabi-v7a/libswresample.so
       /cygdrive/d/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-strip --strip-unneeded D:/player/libs/armeabi-v7a/libswresample.so
       Install        : libswscale.so => libs/armeabi-v7a/libswscale.so
       install -p /cygdrive/d/player/obj/local/armeabi-v7a/libswscale.so /cygdrive/d/player/libs/armeabi-v7a/libswscale.so
       /cygdrive/d/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-strip --strip-unneeded D:/player/libs/armeabi-v7a/libswscale.so
       Executable     : testmain
       /cygdrive/d/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-g++  -Wl,--gc-sections  -Wl,-z,nocopyreloc  --sysroot=D:/android/android-ndk-r8e/platforms/android-14/arch-arm  D:/player/obj/local/armeabi-v7a/objs/testmain/testmain.o D:/player/obj/local/armeabi-v7a/libplayer.a D:/android/android-ndk-r8e/sources/cxx-stl/stlport/libs/armeabi-v7a/libstlport_static.a -lgcc D:/player/obj/local/armeabi-v7a/libavcodec.so D:/player/obj/local/armeabi-v7a/libavformat.so D:/player/obj/local/armeabi-v7a/libavfilter.so D:/player/obj/local/armeabi-v7a/libavutil.so D:/player/obj/local/armeabi-v7a/libpostproc.so D:/player/obj/local/armeabi-v7a/libswscale.so D:/player/obj/local/armeabi-v7a/libswresample.so  -no-canonical-prefixes -march=armv7-a  -Wl,--fix-cortex-a8  -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now    -lc -lm  -o D:/player/obj/local/armeabi-v7a/testmain
       D:/android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: D:/player/obj/local/armeabi-v7a/libplayer.a(PlayDemuxFFmpeg.o): in function PlayDemuxFFmpeg::Flush():D:/player/jni/lib/DllAvCodec.h:144: error: undefined reference to 'av_free_packet(AVPacket*)'

    I´m using windows 7 + cygwin + NDKR8,but the lib "libavcodec.so ,libavfilter.so,libavformat.so,libavutil.so,libpostproc.so,libswresample.so,libswscale.so " of ffmpeg was compiled with standalone mothed of NDK using "ubuntu + NDK8".
    and i include the extern "c" code in the head file.

    so, how to correct the error ?

    my DLLavcodec.h is :

    #pragma once
    #include "DllAvUtil.h"

    extern "C" {
     #include <libavcodec></libavcodec>avcodec.h>
    }


    class DllAvCodec : public DllAvCodecInterface
    {
    public:
     static CCriticalSection m_critSection;

     virtual ~DllAvCodec() {}
     virtual void avcodec_register_all()
     {
       ::avcodec_register_all();
     }
     virtual void avcodec_flush_buffers(AVCodecContext *avctx) { ::avcodec_flush_buffers(avctx); }
     virtual int avcodec_open2(AVCodecContext *avctx, AVCodec *codec, AVDictionary **options)
     {
       return ::avcodec_open2(avctx, codec, options);
     }
     virtual int avcodec_open2_dont_call(AVCodecContext *avctx, AVCodec *codec, AVDictionary **options) { *(volatile int *)0x0 = 0; return 0; }
     virtual int avcodec_close_dont_call(AVCodecContext *avctx) { *(volatile int *)0x0 = 0; return 0; }
     virtual AVCodec *avcodec_find_decoder(enum CodecID id) { return ::avcodec_find_decoder(id); }
     virtual AVCodec *avcodec_find_encoder(enum CodecID id) { return ::avcodec_find_encoder(id); }
     virtual int avcodec_close(AVCodecContext *avctx)
     {
       return ::avcodec_close(avctx);
     }
     virtual AVFrame *avcodec_alloc_frame() { return ::avcodec_alloc_frame(); }
     virtual int avpicture_fill(AVPicture *picture, uint8_t *ptr, PixelFormat pix_fmt, int width, int height) { return ::avpicture_fill(picture, ptr, pix_fmt, width, height); }
     virtual int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, int *got_picture_ptr, AVPacket *avpkt) { return ::avcodec_decode_video2(avctx, picture, got_picture_ptr, avpkt); }
     virtual int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt) { return ::avcodec_decode_audio4(avctx, frame, got_frame_ptr, avpkt); }
     virtual int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, int *got_sub_ptr, AVPacket *avpkt) { return ::avcodec_decode_subtitle2(avctx, sub, got_sub_ptr, avpkt); }
     virtual int avcodec_encode_audio(AVCodecContext *avctx, uint8_t *buf, int buf_size, const short *samples) { return ::avcodec_encode_audio(avctx, buf, buf_size, samples); }
     virtual int avcodec_encode_audio2(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr) { return ::avcodec_encode_audio2(avctx, avpkt, frame, got_packet_ptr); }
     virtual int avpicture_get_size(PixelFormat pix_fmt, int width, int height) { return ::avpicture_get_size(pix_fmt, width, height); }
     virtual AVCodecContext *avcodec_alloc_context3(AVCodec *codec) { return ::avcodec_alloc_context3(codec); }
     virtual void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode) { ::avcodec_string(buf, buf_size, enc, encode); }
     virtual void avcodec_get_context_defaults3(AVCodecContext *s, AVCodec *codec) { ::avcodec_get_context_defaults3(s, codec); }

     virtual AVCodecParserContext *av_parser_init(int codec_id) { return ::av_parser_init(codec_id); }
     virtual int av_parser_parse2(AVCodecParserContext *s,AVCodecContext *avctx, uint8_t **poutbuf, int *poutbuf_size,
                       const uint8_t *buf, int buf_size,
                       int64_t pts, int64_t dts, int64_t pos)
     {
       return ::av_parser_parse2(s, avctx, poutbuf, poutbuf_size, buf, buf_size, pts, dts, pos);
     }
     virtual void av_parser_close(AVCodecParserContext *s) { ::av_parser_close(s); }

     virtual AVBitStreamFilterContext *av_bitstream_filter_init(const char *name) { return ::av_bitstream_filter_init(name); }
     virtual int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc,
       AVCodecContext *avctx, const char *args,
       uint8_t **poutbuf, int *poutbuf_size,
       const uint8_t *buf, int buf_size, int keyframe) { return ::av_bitstream_filter_filter(bsfc, avctx, args, poutbuf, poutbuf_size, buf, buf_size, keyframe); }
     virtual void av_bitstream_filter_close(AVBitStreamFilterContext *bsfc) { ::av_bitstream_filter_close(bsfc); }

     virtual void avpicture_free(AVPicture *picture) { ::avpicture_free(picture); }
     virtual void av_free_packet(AVPacket *pkt) { ::av_free_packet(pkt); }
     virtual int avpicture_alloc(AVPicture *picture, PixelFormat pix_fmt, int width, int height) { return ::avpicture_alloc(picture, pix_fmt, width, height); }
     virtual int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic) { return ::avcodec_default_get_buffer(s, pic); }
     virtual void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic) { ::avcodec_default_release_buffer(s, pic); }
     virtual enum PixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum PixelFormat *fmt) { return ::avcodec_default_get_format(s, fmt); }
     virtual AVCodec *av_codec_next(AVCodec *c) { return ::av_codec_next(c); }

     virtual int av_dup_packet(AVPacket *pkt) { return ::av_dup_packet(pkt); }
     virtual void av_init_packet(AVPacket *pkt) { return ::av_init_packet(pkt); }
     virtual int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels, enum AVSampleFormat sample_fmt, const uint8_t *buf, int buf_size, int align) { return ::avcodec_fill_audio_frame(frame, nb_channels, sample_fmt, buf, buf_size, align); }
     virtual void avcodec_free_frame(AVFrame **frame) { return ::avcodec_free_frame(frame); };
    };
  • How to concat mp4 files using libffmpeg in c program ?

    1er août 2013, par chichien

    I know ffmpeg command line is easy, but how to programmatically implement? I'm not good at this,here is some code from internet, it is used to convert .mp4 to .ts,and i made some changes,but the audio stream problem persists:

    #include
    #include
    #include
    #include

    #include "libavformat/avformat.h"
    #include "libavcodec/avcodec.h"
    #include "libavutil/avutil.h"
    #include "libavutil/rational.h"
    #include "libavdevice/avdevice.h"
    #include "libavutil/mathematics.h"
    #include "libswscale/swscale.h"

    static AVStream* add_output_stream(AVFormatContext* output_format_context, AVStream* input_stream)
    {

       AVCodecContext* input_codec_context = NULL;
       AVCodecContext* output_codec_context = NULL;

       AVStream* output_stream = NULL;
       output_stream = av_new_stream(output_format_context, 0);
       if (!output_stream)
       {
           printf("Call av_new_stream function failed\n");
           return NULL;
       }

       input_codec_context = input_stream->codec;
       output_codec_context = output_stream->codec;

       output_codec_context->codec_id = input_codec_context->codec_id;
       output_codec_context->codec_type = input_codec_context->codec_type;
       output_codec_context->codec_tag = input_codec_context->codec_tag;
       output_codec_context->bit_rate = input_codec_context->bit_rate;
       output_codec_context->extradata = input_codec_context->extradata;
       output_codec_context->extradata_size = input_codec_context->extradata_size;

       if (av_q2d(input_codec_context->time_base) * input_codec_context->ticks_per_frame > av_q2d(input_stream->time_base) &amp;&amp; av_q2d(input_stream->time_base) &lt; 1.0 / 1000)
       {
           output_codec_context->time_base = input_codec_context->time_base;
           output_codec_context->time_base.num *= input_codec_context->ticks_per_frame;
       }
       else
       {
           output_codec_context->time_base = input_stream->time_base;
       }
       switch (input_codec_context->codec_type)
       {
       case AVMEDIA_TYPE_AUDIO:
           output_codec_context->channel_layout = input_codec_context->channel_layout;
           output_codec_context->sample_rate = input_codec_context->sample_rate;
           output_codec_context->channels = input_codec_context->channels;
           output_codec_context->frame_size = input_codec_context->frame_size;
           if ((input_codec_context->block_align == 1 &amp;&amp; input_codec_context->codec_id == CODEC_ID_MP3) || input_codec_context->codec_id == CODEC_ID_AC3)
           {
               output_codec_context->block_align = 0;
           }
           else
           {
               output_codec_context->block_align = input_codec_context->block_align;
           }
           break;
       case AVMEDIA_TYPE_VIDEO:
           output_codec_context->pix_fmt = input_codec_context->pix_fmt;
           output_codec_context->width = input_codec_context->width;
           output_codec_context->height = input_codec_context->height;
           output_codec_context->has_b_frames = input_codec_context->has_b_frames;
           if (output_format_context->oformat->flags &amp; AVFMT_GLOBALHEADER)
           {
               output_codec_context->flags |= CODEC_FLAG_GLOBAL_HEADER;
           }
           break;
       default:
           break;
       }

       return output_stream;
    }

    //[[** from ffmpeg.c
    static void write_frame(AVFormatContext *s, AVPacket *pkt, AVCodecContext *avctx, AVBitStreamFilterContext *bsfc){
       int ret;

       while(bsfc){
           AVPacket new_pkt= *pkt;
           int a= av_bitstream_filter_filter(bsfc, avctx, NULL,
                                             &amp;new_pkt.data, &amp;new_pkt.size,
                                             pkt->data, pkt->size,
                                             pkt->flags &amp; AV_PKT_FLAG_KEY);
           if(a>0){
               av_free_packet(pkt);
               new_pkt.destruct= av_destruct_packet;
           } else if(a&lt;0){
               fprintf(stderr, "%s failed for stream %d, codec %s\n",
                       bsfc->filter->name, pkt->stream_index,
                       avctx->codec ? avctx->codec->name : "copy");
               //print_error("", a);
               //if (exit_on_error)
               //    ffmpeg_exit(1);
           }
           *pkt= new_pkt;

           bsfc= bsfc->next;
       }

       ret= av_interleaved_write_frame(s, pkt);
       if(ret &lt; 0){
           //print_error("av_interleaved_write_frame()", ret);
           fprintf(stderr, "av_interleaved_write_frame(%d)\n", ret);
           exit(1);
       }
    }
    //]]**

    int main(int argc, char* argv[])
    {

       const char* input;
       const char* output;
       const char* output_prefix = NULL;
       char* segment_duration_check = 0;
       const char* index = NULL;
       char* tmp_index = NULL;
       const char* http_prefix = NULL;
       long max_tsfiles = NULL;
       double prev_segment_time = 0;
       double segment_duration = 0;

       AVInputFormat* ifmt = NULL;
       AVOutputFormat* ofmt = NULL;
       AVFormatContext* ic = NULL;
       AVFormatContext* oc = NULL;
       AVStream* video_st = NULL;
       AVStream* audio_st = NULL;
       AVCodec* codec = NULL;
       AVDictionary* pAVDictionary = NULL;

       long frame_count = 0;

       if (argc != 3) {
           fprintf(stderr, "Usage: %s inputfile outputfile\n", argv[0]);
           exit(1);
       }

       input = argv[1];
       output = argv[2];

       av_register_all();

       char szError[256] = {0};
       int nRet = avformat_open_input(&amp;ic, input, ifmt, &amp;pAVDictionary);
       if (nRet != 0)
       {
           av_strerror(nRet, szError, 256);
           printf(szError);
           printf("\n");
           printf("Call avformat_open_input function failed!\n");
           return 0;
       }

       if (av_find_stream_info(ic) &lt; 0)
       {
           printf("Call av_find_stream_info function failed!\n");
           return 0;
       }

       ofmt = av_guess_format("mpegts", NULL, NULL);
       if (!ofmt)
       {
           printf("Call av_guess_format function failed!\n");
           return 0;
       }

       oc = avformat_alloc_context();
       if (!oc)
       {
           printf("Call av_guess_format function failed!\n");
           return 0;
       }
       oc->oformat = ofmt;

       int video_index = -1, audio_index = -1;
       for (unsigned int i = 0; i &lt; ic->nb_streams &amp;&amp; (video_index &lt; 0 || audio_index &lt; 0); i++)
       {
           switch (ic->streams[i]->codec->codec_type)
           {
           case AVMEDIA_TYPE_VIDEO:
               video_index = i;
               ic->streams[i]->discard = AVDISCARD_NONE;
               video_st = add_output_stream(oc, ic->streams[i]);
               break;
           case AVMEDIA_TYPE_AUDIO:
               audio_index = i;
               ic->streams[i]->discard = AVDISCARD_NONE;
               audio_st = add_output_stream(oc, ic->streams[i]);
               break;
           default:
               ic->streams[i]->discard = AVDISCARD_ALL;
               break;
           }
       }
       codec = avcodec_find_decoder(video_st->codec->codec_id);
       if (codec == NULL)
       {
           printf("Call avcodec_find_decoder function failed!\n");
           return 0;
       }

       if (avcodec_open(video_st->codec, codec) &lt; 0)
       {
           printf("Call avcodec_open function failed !\n");
           return 0;
       }

       if (avio_open(&amp;oc->pb, output, AVIO_FLAG_WRITE) &lt; 0)
       {
           return 0;
       }

       if (avformat_write_header(oc, &amp;pAVDictionary))
       {
           printf("Call avformat_write_header function failed.\n");
           return 0;
       }

       //[[++
       AVBitStreamFilterContext *bsfc = av_bitstream_filter_init("h264_mp4toannexb");
       //AVBitStreamFilterContext *absfc = av_bitstream_filter_init("aac_adtstoasc");
       if (!bsfc) {
           fprintf(stderr, "bsf init error!\n");
           return -1;
       }
       //]]++

       int decode_done = 0;
       do
       {
           double segment_time = 0;
           AVPacket packet;

           decode_done = av_read_frame(ic, &amp;packet);
           if (decode_done &lt; 0)
               break;

           if (av_dup_packet(&amp;packet) &lt; 0)
           {
               printf("Call av_dup_packet function failed\n");
               av_free_packet(&amp;packet);
               break;
           }

           //[[**
           if (packet.stream_index == audio_index) {
               segment_time = (double)audio_st->pts.val * audio_st->time_base.num / audio_st->time_base.den;
               nRet = av_interleaved_write_frame(oc, &amp;packet);  
           } else if (packet.stream_index == video_index) {
               if (packet.flags &amp; AV_PKT_FLAG_KEY) {
                   segment_time = (double)video_st->pts.val * video_st->time_base.num / video_st->time_base.den;
               } else {
                   segment_time = prev_segment_time;
               }
               //nRet = av_interleaved_write_frame(oc, &amp;packet);  
               write_frame(oc, &amp;packet, video_st->codec, bsfc);
           }
           //]]**

           if (nRet &lt; 0)
           {
               printf("Call av_interleaved_write_frame function failed: %d\n", nRet);
           }
           else if (nRet > 0)
           {
               printf("End of stream requested\n");
               av_free_packet(&amp;packet);
               break;
           }
           av_free_packet(&amp;packet);
           frame_count++;
       }while(!decode_done);

       av_write_trailer(oc);
       printf("frame_count = %d\n", frame_count);

       av_bitstream_filter_close(bsfc);  
       avcodec_close(video_st->codec);
       for(unsigned int k = 0; k &lt; oc->nb_streams; k++)
       {
           av_freep(&amp;oc->streams[k]->codec);
           av_freep(&amp;oc->streams[k]);
       }
       av_free(oc);
       //getchar();
       return 0;
    }

    Compile this code, to got an executable file named muxts, and then :

    $ ./muxts vid1.mp4 vid1.ts

    No error message printed,but the audio stream was unsynchronized and noise。Check the .ts file using ffmpeg :

    $ ffmpeg -i vid1.ts
    ffmpeg version 0.8.14-tessus, Copyright (c) 2000-2013 the FFmpeg developers
     built on Jul 29 2013 17:05:18 with llvm_gcc 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.1.00)
     configuration: --prefix=/usr/local --arch=x86_64 --as=yasm --extra-version=tessus --enable-gpl --enable-nonfree --enable-version3 --disable-ffplay --enable-libvorbis --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-bzlib --enable-zlib --enable-postproc --enable-filters --enable-runtime-cpudetect --enable-debug=3 --disable-optimizations
     libavutil    51.  9. 1 / 51.  9. 1
     libavcodec   53.  8. 0 / 53.  8. 0
     libavformat  53.  5. 0 / 53.  5. 0
     libavdevice  53.  1. 1 / 53.  1. 1
     libavfilter   2. 23. 0 /  2. 23. 0
     libswscale    2.  0. 0 /  2.  0. 0
     libpostproc  51.  2. 0 / 51.  2. 0

    Seems stream 0 codec frame rate differs from container frame rate: 180000.00 (180000/1) -> 90000.00 (180000/2)
    Input #0, mpegts, from &#39;vid1.ts&#39;:
     Duration: 00:00:03.75, start: 0.000000, bitrate: 3656 kb/s
     Program 1
       Metadata:
         service_name    : Service01
         service_provider: FFmpeg
       Stream #0.0[0x100]: Video: h264 (Baseline), yuv420p, 640x480, 90k tbr, 90k tbn, 180k tbc
       Stream #0.1[0x101]: Audio: aac, 48000 Hz, mono, s16, 190 kb/s
    At least one output file must be specified

    What should i do ?

    If this issue fixed , how can i concat multi .ts files into single .mp4 file ?

  • Complie FFMpeg with Xcode5 preview's clang

    2 août 2013, par Yeung

    With release of IOS7 beta, I would like to try compiling ffmpeg for ios7.

    There is a lots answer like this. It use the llvm-gcc as compiler.

    However, seem like Xcode 5 would not include llvm-gcc. Then I have no choice but to use clang to compile.

    I use the following to config :

    export IOS_SDK="/Applications/Xcode5-DP4.app/Contents/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk"

    ./configure $CONFIG_DISABLE_FLAG $CONFIG_ENABLE_FLAG \
    --arch=arm \
    --target-os=darwin \
    --cc=/Applications/Xcode5-DP4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang \
    --as=&#39;gas-preprocessor.pl /Applications/Xcode5-DP4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang&#39; \
    --ar=/Applications/Xcode5-DP4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar  \
    --sysroot=$IOS_SDK \
    --cpu=cortex-a8 \
    --extra-cflags="-arch armv7 -mfpu=neon -mfloat-abi=softfp -ftree-vectorize -ffast-math -funsafe-math-optimizations -fsingle-precision-constant -isysroot ${IOS_SDK} -I${IOS_SDK}/usr/include" \
    --extra-ldflags="-arch armv7 -mfpu=neon -mfloat-abi=softfp -ftree-vectorize -ffast-math -funsafe-math-optimizations -fsingle-precision-constant -isysroot ${IOS_SDK} -L${IOS_SDK}/usr/lib" \
    --enable-pic

    clang would probably not take CFLAGS other than -arch  -isysroot -I into account, but let it be.

    I seems it can complie but I encounter this. Actually, I don't understand the answer in this question. Using the external assembler ? Yes, the toolchains do have a assembler stated it is GNU version 1.38. Using --as=/Application/Xcode5-DP4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/as, it even cannot pass the check as test. It fall back to use &#39;gas-preprocessor.pl $CC&#39;

    Here is the config log to cannot pass :

       check_asm armv6t2 "movt r0, #0"
    check_as
    BEGIN /var/folders/gx/_k242p6s5cb0hss_pvj4s7vh0000gn/T//ffconf.4wwSSmLm.c
       1   void foo(void){ __asm__ volatile("movt r0, #0"); }
    END /var/folders/gx/_k242p6s5cb0hss_pvj4s7vh0000gn/T//ffconf.4wwSSmLm.c
    /Applications/Xcode5-DP4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/as --sysroot=/Applications/Xcode5-DP4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DPIC -arch armv7 -no-cpp-precomp -mfpu=neon -mfloat-abi=softfp -ftree-vectorize -ffast-math -funsafe-math-optimizations -fsingle-precision-constant -isysroot /Applications/Xcode5-DP4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk -I/Applications/Xcode5-DP4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/usr/include -mcpu=cortex-a8 -fPIC -c -o /var/folders/gx/_k242p6s5cb0hss_pvj4s7vh0000gn/T//ffconf.g896h4Sb.o /var/folders/gx/_k242p6s5cb0hss_pvj4s7vh0000gn/T//ffconf.4wwSSmLm.c
    FATAL:/Applications/Xcode5-DP4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../libexec/as/arm/as: I don&#39;t understand &#39;-&#39; flag!
    check_asm armvfp "fadds s0, s0, s0"
    check_as
    BEGIN /var/folders/gx/_k242p6s5cb0hss_pvj4s7vh0000gn/T//ffconf.4wwSSmLm.c
       1   void foo(void){ __asm__ volatile("fadds s0, s0, s0"); }
    END /var/folders/gx/_k242p6s5cb0hss_pvj4s7vh0000gn/T//ffconf.4wwSSmLm.c
    /Applications/Xcode5-DP4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/as --sysroot=/Applications/Xcode5-DP4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DPIC -arch armv7 -no-cpp-precomp -mfpu=neon -mfloat-abi=softfp -ftree-vectorize -ffast-math -funsafe-math-optimizations -fsingle-precision-constant -isysroot /Applications/Xcode5-DP4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk -I/Applications/Xcode5-DP4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/usr/include -mcpu=cortex-a8 -fPIC -c -o /var/folders/gx/_k242p6s5cb0hss_pvj4s7vh0000gn/T//ffconf.g896h4Sb.o /var/folders/gx/_k242p6s5cb0hss_pvj4s7vh0000gn/T//ffconf.4wwSSmLm.c
    FATAL:/Applications/Xcode5-DP4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../libexec/as/arm/as: I don&#39;t understand &#39;-&#39; flag!
    check_asm neon "vadd.i16 q0, q0, q0"
    check_as
    BEGIN /var/folders/gx/_k242p6s5cb0hss_pvj4s7vh0000gn/T//ffconf.4wwSSmLm.c
       1   void foo(void){ __asm__ volatile("vadd.i16 q0, q0, q0"); }
    END /var/folders/gx/_k242p6s5cb0hss_pvj4s7vh0000gn/T//ffconf.4wwSSmLm.c
    /Applications/Xcode5-DP4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/as --sysroot=/Applications/Xcode5-DP4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DPIC -arch armv7 -no-cpp-precomp -mfpu=neon -mfloat-abi=softfp -ftree-vectorize -ffast-math -funsafe-math-optimizations -fsingle-precision-constant -isysroot /Applications/Xcode5-DP4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk -I/Applications/Xcode5-DP4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/usr/include -mcpu=cortex-a8 -fPIC -c -o /var/folders/gx/_k242p6s5cb0hss_pvj4s7vh0000gn/T//ffconf.g896h4Sb.o /var/folders/gx/_k242p6s5cb0hss_pvj4s7vh0000gn/T//ffconf.4wwSSmLm.c
    FATAL:/Applications/Xcode5-DP4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../libexec/as/arm/as: I don&#39;t understand &#39;-&#39; flag!
    check_asm vfpv3 "vmov.f32 s0, #1.0"
    check_as
    BEGIN /var/folders/gx/_k242p6s5cb0hss_pvj4s7vh0000gn/T//ffconf.4wwSSmLm.c
       1   void foo(void){ __asm__ volatile("vmov.f32 s0, #1.0"); }
    END /var/folders/gx/_k242p6s5cb0hss_pvj4s7vh0000gn/T//ffconf.4wwSSmLm.c
    /Applications/Xcode5-DP4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/as --sysroot=/Applications/Xcode5-DP4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DPIC -arch armv7 -no-cpp-precomp -mfpu=neon -mfloat-abi=softfp -ftree-vectorize -ffast-math -funsafe-math-optimizations -fsingle-precision-constant -isysroot /Applications/Xcode5-DP4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk -I/Applications/Xcode5-DP4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/usr/include -mcpu=cortex-a8 -fPIC -c -o /var/folders/gx/_k242p6s5cb0hss_pvj4s7vh0000gn/T//ffconf.g896h4Sb.o /var/folders/gx/_k242p6s5cb0hss_pvj4s7vh0000gn/T//ffconf.4wwSSmLm.c
    FATAL:/Applications/Xcode5-DP4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../libexec/as/arm/as: I don&#39;t understand &#39;-&#39; flag!
    check_asm asm_mod_y "vmul.i32 d0, d0, %y0" :: "x"(0)
    check_as
    BEGIN /var/folders/gx/_k242p6s5cb0hss_pvj4s7vh0000gn/T//ffconf.4wwSSmLm.c
       1   void foo(void){ __asm__ volatile("vmul.i32 d0, d0, %y0" :: "x"(0)); }
    END /var/folders/gx/_k242p6s5cb0hss_pvj4s7vh0000gn/T//ffconf.4wwSSmLm.c
    /Applications/Xcode5-DP4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/as --sysroot=/Applications/Xcode5-DP4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DPIC -arch armv7 -no-cpp-precomp -mfpu=neon -mfloat-abi=softfp -ftree-vectorize -ffast-math -funsafe-math-optimizations -fsingle-precision-constant -isysroot /Applications/Xcode5-DP4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk -I/Applications/Xcode5-DP4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/usr/include -mcpu=cortex-a8 -fPIC -c -o /var/folders/gx/_k242p6s5cb0hss_pvj4s7vh0000gn/T//ffconf.g896h4Sb.o /var/folders/gx/_k242p6s5cb0hss_pvj4s7vh0000gn/T//ffconf.4wwSSmLm.c
    FATAL:/Applications/Xcode5-DP4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../libexec/as/arm/as: I don&#39;t understand &#39;-&#39; flag!
    check_asm gnu_as ".macro m n
    \n:.int 0
    .endm
    m x"

    Yep, with config --disable-asm would complie but it probably not a option.