Newest 'libx264' Questions - Stack Overflow
Les articles publiés sur le site
-
libx264 fails on HTTP Live Streaming (FFmpeg)
12 juillet 2016, par shintaroidI want to live stream with
HTTP Live Streaming
, but I have problem withlibx264
or maybe something other.My hardware and software environment:
- Macbook Pro
- VirtualBox with Ubuntu 16.04
Nginx
andFFmpeg
(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 usempeg2video
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 appropriateFFmpeg
command for HTTP Live Streaming (I tried FFserver but there is error something likecannot rename hls
)anyone shed some light on my problem?
-
Ffmpeg ./configure not found
7 juin 2016, par Justin TullockI'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 PotatoI 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_wangI 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 KhattakI 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.