Newest 'libx264' Questions - Stack Overflow

http://stackoverflow.com/questions/tagged/libx264

Les articles publiés sur le site

  • libx264 fails on HTTP Live Streaming (FFmpeg)

    12 juillet 2016, par shintaroid

    I want to live stream with HTTP Live Streaming, but I have problem with libx264 or maybe something other.

    My hardware and software environment:

    • Macbook Pro
    • VirtualBox with Ubuntu 16.04
    • Nginx and FFmpeg (in Ubuntu)

    I am able to stream a static video file (in Ubuntu with Nginx and FFmpeg). The FFmpeg command is as following:

    $ffmpeg -i /my/sample/video.mp4 -codec:v libx264 -f hls /output/file.m3u8
    

    But when it comes to webcam (live streaming), Mac OS Safari fails to open the stream. I used the following command:

    $ffmpeg -i /dev/video0 -codec:v libx264 -f hls /output/file.m3u8
    

    I guess it's the problem of libx264 because when I use mpeg2video encoder, Mac OS Safari indeed can play the stream:

    $ffmpeg -i /dev/video0 -codec:v mpeg2video -f hls /output/file.m3u8
    

    I know there is a library called video4linux2, should I use video4linux2 for capturing my webcam? But I don't know the appropriate FFmpeg command for HTTP Live Streaming (I tried FFserver but there is error something like cannot rename hls)

    anyone shed some light on my problem?

  • Ffmpeg ./configure not found

    7 juin 2016, par Justin Tullock

    I'm trying to install ffmpeg with libvpx & libx264 on my vps. Centos07. I've followed these instructions https://trac.ffmpeg.org/wiki/CompilationGuide/Centos to the T.

    Now when I try to run

    cd ~/ffmpeg; ./configure --enable-libvpx --enable-gpl --enable-libx264
    

    it returns

    -bash: ./configure: No such file or directory
    

    When I try ffmpeg -v

    ffmpeg: error while loading shared libraries: libx264.so.148: cannot open shared object file: No such file or directory
    

    and ldd $(which ffmpeg) returns

    root@host [~/ffmpeg_sources]# ldd $(which ffmpeg)
    linux-vdso.so.1 =>  (0x00007fff4fb86000)
    libxcb.so.1 => /lib64/libxcb.so.1 (0x00007f4972e27000)
    libxcb-shm.so.0 => /lib64/libxcb-shm.so.0 (0x00007f4972c23000)
    libxcb-xfixes.so.0 => /lib64/libxcb-xfixes.so.0 (0x00007f4972a1a000)
    libxcb-shape.so.0 => /lib64/libxcb-shape.so.0 (0x00007f4972816000)
    libx264.so.148 => not found
    libm.so.6 => /lib64/libm.so.6 (0x00007f4972513000)
    liblzma.so.5 => /lib64/liblzma.so.5 (0x00007f49722ee000)
    libbz2.so.1 => /lib64/libbz2.so.1 (0x00007f49720de000)
    libz.so.1 => /lib64/libz.so.1 (0x00007f4971ec7000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4971cab000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f49718e9000)
    libXau.so.6 => /lib64/libXau.so.6 (0x00007f49716e4000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f4973056000)
    

    I've followed all the instructions exactly - is there something I'm missing?

  • Unknown Codec error at ffserver

    23 mai 2016, par Potato

    I installed ffmpeg following this page, https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu

    As you see I enabled x264. But when I run ffserver, I get

    /etc/ffserver.conf:16: Unknown VideoCodec: libx264
    /etc/ffserver.conf:24: Unknown AudioCodec: libfaac
    

    My conf file is

    HTTPPort 8080
    RTSPPort 8090
    HTTPBindAddress 0.0.0.0
    RTSPBindAddress 0.0.0.0
    MaxClients 1000
    MaxBandwidth 1000000
    
    
    Launch ffmpeg -f v4l2 -i /dev/video0 -f alsa -ac 1 -i hw:1
    FileMaxSize 400K
    
    
    
    Format rtp
    Feed feed1.ffm
    VideoCodec libx264
    VideoFrameRate 24
    VideoBitRate 100
    VideoSize 320x240
    #AVPresetVideo default
    #AVPresetVideo baseline
    AVOptionVideo flags +global_header
    
    AudioCodec libfaac
    AudioBitRate 32
    AudioChannels 1
    AudioSampleRate 22050
    AVOptionAudio flags +global_header
    
    

    Well, what can I do more.

  • using X264 and librtmp to send live camera frame, but the flash can't show

    9 mai 2016, par brian_wang

    I am using X264 and librtmp to send my live camera frame, all the things seems right. but my web test flash can't show the correct video. Sometimes it seems correct, but when I re-click play button, it doesn't show any picture on the flash.

    Here is my X264 config code

    x264_param_default_preset(&x264param, "ultrafast", "zerolatency");
    x264param.i_threads = 2;
    x264param.i_width = width;
    x264param.i_height = height;
    x264param.i_log_level = X264_LOG_DEBUG;
    x264param.i_fps_num = x264param.i_timebase_num= fps;
    x264param.i_fps_den = x264param.i_timebase_den=1;
    x264param.i_frame_total = 0;
    
    x264param.i_frame_reference =1;
    //x264param.i_frame_reference = 2;
    x264param.i_keyint_min = 25;
    x264param.i_keyint_max = fps*3;
    x264param.i_scenecut_threshold = 40;
    
    x264param.b_deblocking_filter = 1;
    x264param.b_cabac = 0;
    x264param.analyse.i_trellis = 0;
    x264param.analyse.b_chroma_me = 1;
    
    x264param.vui.i_sar_width = 0;
    x264param.vui.i_sar_height = 0;
    x264param.i_bframe_bias = 0;
    x264param.b_interlaced= 0;
    x264param.analyse.i_subpel_refine = 6; /* 0..5 -> 1..6 */
    x264param.analyse.i_me_method = X264_ME_DIA;//X264_ME_HEX?X264_ME_DIA
    x264param.analyse.i_me_range = 16;
    x264param.analyse.i_direct_mv_pred = X264_DIRECT_PRED_AUTO;
    x264param.i_deblocking_filter_alphac0 = 0;
    x264param.i_deblocking_filter_beta = 0;
    //x264param.analyse.intra = X264_ANALYSE_I4x4;
    x264param.analyse.intra = X264_ANALYSE_I4x4;//  | X264_ANALYSE_PSUB16x16 | X264_ANALYSE_BSUB16x16;
    x264param.analyse.inter = X264_ANALYSE_I4x4 | X264_ANALYSE_PSUB16x16 | X264_ANALYSE_BSUB16x16; 
    //edit 2014-7-28
    x264param.analyse.b_transform_8x8 = 1;
    //x264param.analyse.b_transform_8x8 = 0;
    x264param.analyse.b_fast_pskip = 1;
    x264param.i_bframe = 0;
    //x264param.b_intra_refresh
    x264param.analyse.b_weighted_bipred = 0;
    
    //// Intra refres:
    x264param.i_keyint_max = 250;
    x264param.b_intra_refresh = 0;
    ////Rate control:
    //x264param.rc.i_rc_method = X264_RC_CRF;
    
    //Rate Control
    x264param.rc.f_ip_factor = 1.4f;
    x264param.rc.f_pb_factor = 1.3f;
    x264param.rc.f_qcompress = 1.0;
    x264param.rc.i_qp_min = 20;//20;
    x264param.rc.i_qp_max = 32;
    x264param.rc.i_qp_step = 1;
    
    switch (0)
    {
    case 0: /* 1 PASS ABR */
        x264param.rc.i_rc_method = X264_RC_ABR;
        x264param.rc.i_bitrate = 300; // max = 5000
        x264param.rc.b_mb_tree = 0;
        break;
    case 1: /* 1 PASS CQ */
        x264param.rc.i_rc_method = X264_RC_CQP;
        x264param.rc.i_qp_constant = 26;//10 - 51
        break;
    }
    
    //For streaming:
    x264param.b_repeat_headers = 1;
    x264param.b_annexb = 1;
    x264_param_apply_profile(&x264param, "baseline");
    encoder = x264_encoder_open(&x264param);
    x264_picture_init( &pic_in );
    x264_picture_alloc(&pic_in, X264_CSP_I420, width, height);
    
    pic_in.img.i_csp = X264_CSP_I420|X264_CSP_VFLIP;
    pic_in.img.i_plane = 3;
    pic_in.i_type = X264_TYPE_AUTO;
    

    Sending To RTMP:

    sws_scale(convertCtx,&a,&scribe,0,height, pic_in.img.plane, pic_in.img.i_stride);
    int i_nal;
    int i_frame_size = x264_encoder_encode( encoder, &nal, &i_nal, &pic_in, &pic_out );
    if(i_frame_size <= 0){
        printf("\t!!!FAILED encode frame \n");
    }else{
        for (int i = 0,last=0; i < i_nal;i++)  
        {
            fwrite(nal[i].p_payload, 1, i_frame_size-last, fpw1);
            if (nal[i].i_type == NAL_SPS) {
                sps_len = nal[i].i_payload-4;
                sps  = new unsigned char[sps_len];
                memcpy(sps,nal[i].p_payload+4,sps_len);
            } else if (nal[i].i_type == NAL_PPS) {
                pps_len = nal[i].i_payload-4;
                pps  = new unsigned char[sps_len];
                memcpy(pps,nal[i].p_payload+4,pps_len);
                send_video_sps_pps(); 
                free(sps);
                free(pps);
            } else {
                send_rtmp_video(nal[i].p_payload,i_frame_size-last);
                break;
            }
            last += nal[i].i_payload;
        }
    }
    

    Send PPS and SPS

    void send_video_sps_pps(){
    if(rtmp!= NULL){
        RTMPPacket * packet;
        unsigned char * body;
        int i;
    
        packet = (RTMPPacket *)malloc(RTMP_HEAD_SIZE+1024);
        memset(packet,0,RTMP_HEAD_SIZE);
    
        packet->m_body = (char *)packet + RTMP_HEAD_SIZE;
        body = (unsigned char *)packet->m_body;
        i = 0;
        body[i++] = 0x17;
        body[i++] = 0x00;
    
        body[i++] = 0x00;
        body[i++] = 0x00;
        body[i++] = 0x00;
    
        /*AVCDecoderConfigurationRecord*/
        body[i++] = 0x01;
        body[i++] = sps[1];
        body[i++] = sps[2];
        body[i++] = sps[3];
        body[i++] = 0xff;
    
        /*sps*/
        body[i++]   = 0xe1;
        body[i++] = (sps_len >> 8) & 0xff;
        body[i++] = sps_len & 0xff;
        memcpy(&body[i],sps,sps_len);
        i +=  sps_len;
    
        /*pps*/
        body[i++]   = 0x01;
        body[i++] = (pps_len >> 8) & 0xff;
        body[i++] = (pps_len) & 0xff;
        memcpy(&body[i],pps,pps_len);
        i +=  pps_len;
    
        packet->m_packetType = RTMP_PACKET_TYPE_VIDEO;
        packet->m_nBodySize = i;
        packet->m_nChannel = 0x04;
        packet->m_nTimeStamp = 0;
        packet->m_hasAbsTimestamp = 0;
        packet->m_headerType = RTMP_PACKET_SIZE_MEDIUM;
        packet->m_nInfoField2 = rtmp->m_stream_id;
    
        RTMP_SendPacket(rtmp,packet,TRUE);
        free(packet);   
        rtmp_start_time = GetTickCount();
    }else{
        std::cout<<"RTMP is not ready"<code>

    Send video Frame

    void send_rtmp_video(unsigned char * buf,int len){
    RTMPPacket * packet;
    long timeoffset = GetTickCount() - rtmp_start_time; 
    
    int type = buf[0]&0x1f;
    
    packet = (RTMPPacket *)malloc(RTMP_HEAD_SIZE+len+9);
    memset(packet,0,RTMP_HEAD_SIZE);
    
    packet->m_body = (char *)packet + RTMP_HEAD_SIZE;
    packet->m_nBodySize = len + 9;
    
    /*send video packet*/
    unsigned char *body = (unsigned char *)packet->m_body;
    memset(body,0,len+9);
    
    /*key frame*/
    body[0] = 0x27;
    if (type == NAL_SLICE_IDR) {
        body[0] = 0x17;
    }
    
    body[1] = 0x01;   /*nal unit*/
    body[2] = 0x00;
    body[3] = 0x00;
    body[4] = 0x00;
    
    body[5] = (len >> 24) & 0xff;
    body[6] = (len >> 16) & 0xff;
    body[7] = (len >>  8) & 0xff;
    body[8] = (len ) & 0xff;
    
    /*copy data*/
    memcpy(&body[9],buf,len);
    
    packet->m_hasAbsTimestamp = 0;
    packet->m_packetType = RTMP_PACKET_TYPE_VIDEO;
    if(rtmp != NULL){
        packet->m_nInfoField2 = rtmp->m_stream_id;
    }
    packet->m_nChannel = 0x04;
    packet->m_headerType = RTMP_PACKET_SIZE_LARGE;
    packet->m_nTimeStamp = timeoffset;
    
    if(rtmp != NULL){
        RTMP_SendPacket(rtmp,packet,TRUE);
    }
    free(packet);
    

    }

  • How to use x264 source code after compiling it

    8 mai 2016, par Zia Khattak

    I need to use the x264 code to compress and stream video from a camera in real time as part of my university project (first using computer and then dsp kit) (and vary quantization value when required). I am totally new to this domain and have absolutely no background.

    So far I have compiled the code using the given method in http://www.ayobamiadewole.com/Blog/How-to-build-x264-or-libx264.dll-in-Windows and created the x264.exe and libx264.dll

    I need help with what to do next in order to use the code for my purpose.

    All help is appreciated.