Newest 'x264' Questions - Stack Overflow
Les articles publiés sur le site
-
How to create IDR I-slice frame for H264 bytestream ?
19 mars, par galukI depacketize the H264 video fragments from an IP.RTP stream and save them to video.ivf file. After depacketizing i have only [SPS] ,[PPS] and [non-IDR slice]. I try to create IDR slice by using x264 lib. x264 lib creates IDR frame which consists of 0x000001[SPS] 0x000001[PPS] 0x0001[SE slice] and 0x0001[I slice]. i insert it in the beginning of my file. But when i try to play this with VLC player it doesn't plays well. if i convert it to video.mp4 by ffmpeg i get playablr file. I think the problem is that after creating IDR frame with x264 lib I get SPS and PPS frames different from those that I get from the stream. My question is how to set parameters for x264 if i have real SPS and PPS frames to get the same SPS and PPS frames.
Here is my code:
x264_param_t param;
`x264_param_t param`; `/* Get default params for preset/tuning */ x264_param_default_preset(¶m, "medium", NULL);` `/* Configure non-default params */ param.i_csp = X264_CSP_I420; param.i_width = width;//640 GET FROM SPS !!!!!!!!!! param.i_height = height;//360; GET FROM SPS !!!!!!!!!!!!!! param.b_vfr_input = 0; //frame rate param.b_repeat_headers = 1; param.b_annexb = 1; `x264_t *encoder = x264_encoder_open(¶m);` if (encoder) { // These are the two picture structs. Input must be alloc() // Output will be created by the encode process x264_picture_t pic, pic_out; int r = x264_picture_alloc(&pic, X264_CSP_I420, width, height); if (r == 0) { pic.i_type = X264_TYPE_IDR; int y_bytes = width * height; int uv_bytes = width * height / 4; UCHAR* result = pic.img.plane[0]; // luma for (unsigned int y = 0; y < height; y++) { for (unsigned int x = 0; x < width; x++) pic.img.plane[0][y * width + x] = 0x16; } // chroma for (unsigned int y = 0; y < height / 2; y++) { for (unsigned int x = 0; x < width / 2; x++) { pic.img.plane[1][y * width / 2 + x] = 0x16; pic.img.plane[2][y * width / 2 + x] = 0x80; } } int i_frame_size = x264_encoder_encode(encoder, &nal, &i_nal, &pic, &pic_out); } }`
Maybe i should set another parameters for x264_param_t param which i can get from SPS and PPS
can someone help me with this issue
-
ffmpeg not working after update to Mavericks
24 février, par Hudson BuddyAfter recently updating to Mavericks 10.9.5, my installation of ffmpeg has been bugging out
Error:
dyld: Library not loaded: /usr/local/lib/libx264.142.dylib Referenced from: /usr/local/bin/ffmpeg Reason: image not found Trace/BPT trap: 5
Any thoughts? I'm not very familar with manual compiling and I installed ffmpeg through Homebrew.
I tried uninstalling and doing:
brew install ffmpeg --HEAD brew install ffmpeg --build-from-source
but it spits back a ./configure error
==> ./configure --prefix=/usr/local/Cellar/ffmpeg/2.4.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample If you think configure made a mistake, make sure you are using the latest version from Git. If the latest version fails, report the problem to the ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net. Include the log file "config.log" produced by configure as this will help solve the problem. READ THIS: https://github.com/Homebrew/homebrew/wiki/troubleshooting These open issues may also help: gpac 0.5.0 doesn't build against ffmpeg 2.4.1 (https://github.com/Homebrew/homebrew/issues/32978)
-
Error Linking FFmpeg with libx264 : Undefined Reference to __imp_x264_encoder_open_163
23 février, par zeyuI'm attempting to compile FFmpeg with libx264 support on Windows using MinGW-w64, but I'm encountering a linking error when building . The error points to an undefined reference to in . Here are the details of the error message:libavcodec/avcodec-57.dll__imp_x264_encoder_open_163libx264.o
In fact, I want to run the AccMPEG branch from https://github.com/Alex-q-z/myh264.git, and I am looking to obtain an executable (exe) to run on Windows.
LD libavcodec/avcodec-57.dll E:/MSY/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: libavcodec/libx264.o: in function `X264_init': E:\MSY\home\myh264\ffmpeg-3.4.8/libavcodec/libx264.c:818: undefined reference to `__imp_x264_encoder_open_163' collect2.exe: error: ld returned 1 exit status make: *** [ffbuild/library.mak:103: libavcodec/avcodec-57.dll] Error 1
Here's what I've tried so far:
Ensuring libx264 is compiled with shared library support using .--enable-shared Verifying that the libx264 version is compatible with the version of FFmpeg I'm compiling. Adding the path to libx264 binaries to my PATH environment variable. Environment Details:
OS: Windows 11 MSYS2 MinGW-w64 version: 13.2.0 FFmpeg version: 3.4.8 libx264 version: unknown Questions:
What could be causing this undefined reference error? Is there a specific version of libx264 that's known to work with FFmpeg 3.4.8? Are there additional flags or configurations I should use when compiling libx264 or FFmpeg to avoid this issue? Any guidance or suggestions would be greatly appreciated. Thank you in advance!
In fact, I want to run the AccMPEG branch from https://github.com/Alex-q-z/myh264.git, and I am looking to obtain an executable (exe) to run on Windows.
-
Why is a file unplayable in Windows Media Player ?
21 février, par zhangI have written some code to generate a MP4 video. This is a simplified version of the code:
#include
#include #include #include #include -
#include
extern "C"
{
#include "libavformat/avformat.h"
#include "libavutil/frame.h"
#include "libavcodec/avcodec.h"
#include "libavutil/imgutils.h"
}
using namespace std;
const int output_width = 180;
const int output_height = 320;
int main(int argc, char **argv)
{
AVCodec *output_avc = avcodec_find_encoder_by_name("libx264");
if (!output_avc)
abort();
AVCodecContext *output_cc = avcodec_alloc_context3(output_avc);
if (!output_cc)
abort();
output_cc->time_base.num = output_cc->time_base.den = 1;
output_cc->pix_fmt = AV_PIX_FMT_YUV420P;
output_cc->width = output_width;
output_cc->height = output_height;
if (avcodec_is_open(output_cc) == 0)
{
if (avcodec_open2(output_cc, output_avc, 0) < 0)
abort();
}
string outf = "res.mp4";
AVFormatContext *output_ctx;
avformat_alloc_output_context2(&output_ctx, NULL, NULL, outf.c_str());
AVStream *out_stream = avformat_new_stream(output_ctx, 0);
out_stream->codecpar->codec_id = AV_CODEC_ID_H264;
out_stream->codecpar->codec_type = AVMEDIA_TYPE_VIDEO;
out_stream->codecpar->codec_tag = 0;
out_stream->codecpar->width = output_width;
out_stream->codecpar->height = output_height;
out_stream->codecpar->format = AV_PIX_FMT_YUV420P;
av_dump_format(output_ctx, 0, outf.c_str(), 1);
if (!(output_ctx->oformat->flags & AVFMT_NOFILE))
{
if (avio_open(&output_ctx->pb, outf.c_str(), AVIO_FLAG_WRITE) < 0)
abort();
}
if (avformat_write_header(output_ctx, NULL) < 0)
abort();
AVPacket packet;
AVFrame *frame;
int fileCount = 0;
for (int i = 0; i < 100; i++)
{
frame = av_frame_alloc();
frame->width = output_width;
frame->height = output_height;
frame->format = AV_PIX_FMT_YUV420P;
if (av_image_alloc(frame->data, frame->linesize, frame->width, frame->height, AV_PIX_FMT_YUV420P, 32) < 0)
abort();
frame->pts = 60000 * i;
frame->pkt_dts = 60000 * i;
if (avcodec_send_frame(output_cc, frame) < 0)
abort();
av_frame_free(&frame);
av_new_packet(&packet, 0);
while (avcodec_receive_packet(output_cc, &packet) >= 0)
{
packet.pos = -1;
packet.dts = 4500 * fileCount;
packet.pts = 4500 * fileCount;
packet.duration = 4500;
av_write_frame(output_ctx, &packet);
av_packet_unref(&packet);
av_new_packet(&packet, 0);
fileCount++;
}
av_packet_unref(&packet);
}
avcodec_free_context(&output_cc);
av_write_trailer(output_ctx);
if (output_ctx && !(output_ctx->oformat->flags & AVFMT_NOFILE))
avio_close(output_ctx->pb);
avformat_free_context(output_ctx);
}
Then, I compiled it (with
g++ encode.cpp -lavcodec -lavformat -lavutil -g
and libraries are installed via Ubuntu 20.04 apt) and run it. This is the MP4 file I get (2872 bytes, base64 encoded):AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAAB39tZGF0AAAAAWdkAAys 2UMCnn4QAAADABAAAAMAIPFCmWAAAAABaOvjyyLAAAABBgX//6rcRem95tlIt5Ys2CDZI+7veDI2 NCAtIGNvcmUgMTU1IHIyOTE3IDBhODRkOTggLSBILjI2NC9NUEVHLTQgQVZDIGNvZGVjIC0gQ29w eWxlZnQgMjAwMy0yMDE4IC0gaHR0cDovL3d3dy52aWRlb2xhbi5vcmcveDI2NC5odG1sIC0gb3B0 aW9uczogY2FiYWM9MSByZWY9MyBkZWJsb2NrPTE6MDowIGFuYWx5c2U9MHgzOjB4MTEzIG1lPWhl eCBzdWJtZT03IHBzeT0xIHBzeV9yZD0xLjAwOjAuMDAgbWl4ZWRfcmVmPTEgbWVfcmFuZ2U9MTYg Y2hyb21hX21lPTEgdHJlbGxpcz0xIDh4OGRjdD0xIGNxbT0wIGRlYWR6b25lPTIxLDExIGZhc3Rf cHNraXA9MSBjaHJvbWFfcXBfb2Zmc2V0PS0yIHRocmVhZHM9MTAgbG9va2FoZWFkX3RocmVhZHM9 MSBzbGljZWRfdGhyZWFkcz0wIG5yPTAgZGVjaW1hdGU9MSBpbnRlcmxhY2VkPTAgYmx1cmF5X2Nv bXBhdD0wIGNvbnN0cmFpbmVkX2ludHJhPTAgYmZyYW1lcz0zIGJfcHlyYW1pZD0yIGJfYWRhcHQ9 MSBiX2JpYXM9MCBkaXJlY3Q9MSB3ZWlnaHRiPTEgb3Blbl9nb3A9MCB3ZWlnaHRwPTIga2V5aW50 PTI1MCBrZXlpbnRfbWluPTEgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVh ZD00MCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIzLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5 IHFwc3RlcD00IGlwX3JhdGlvPTEuNDAgYXE9MToxLjAwAIAAAAFliIQAF//+7oK+BTeKk2/DVSCr MT4MeFdCVv4gBUyU0LeeB3T/sW2Y2XML/dzzR/1dfS/wWmJ+KGm0PX/sHuGpnyAn2gs5wsYABhgA WoTf+9Y7PDk9QANDAAAAAUGaJGxBf/rtlHe1U64AATcAAAABQZ5CeILfbxYfLVgA1IEAAAABAZ5h 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 YQAAAAEAAAAATGF2ZjU4LjI5LjEwMA==
And I try to play it in Media Player in Windows 11. It can not play at all and fails with a 0xC00D36C4 error.
Later I compiled and run the same code in Ubuntu 22.04. This time I got a 3161 byte file (base64 encoded) which can be correctly played in Media Player:
AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAACF5tZGF0AAAAGWdkAAys 2UMCnn4QAAADABAAAAMAIPFCmWAAAAAGaOvjyyLAAAACrgYF//+q3EXpvebZSLeWLNgg2SPu73gy NjQgLSBjb3JlIDE2MyByMzA2MCA1ZGI2YWE2IC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENv cHlsZWZ0IDIwMDMtMjAyMSAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9w dGlvbnM6IGNhYmFjPTEgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MzoweDExMyBtZT1o ZXggc3VibWU9NyBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0xIG1lX3JhbmdlPTE2 IGNocm9tYV9tZT0xIHRyZWxsaXM9MSA4eDhkY3Q9MSBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0 X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0tMiB0aHJlYWRzPTEwIGxvb2thaGVhZF90aHJlYWRz PTEgc2xpY2VkX3RocmVhZHM9MCBucj0wIGRlY2ltYXRlPTEgaW50ZXJsYWNlZD0wIGJsdXJheV9j b21wYXQ9MCBjb25zdHJhaW5lZF9pbnRyYT0wIGJmcmFtZXM9MyBiX3B5cmFtaWQ9MiBiX2FkYXB0 PTEgYl9iaWFzPTAgZGlyZWN0PTEgd2VpZ2h0Yj0xIG9wZW5fZ29wPTAgd2VpZ2h0cD0yIGtleWlu dD0yNTAga2V5aW50X21pbj0xIHNjZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByY19sb29rYWhl YWQ9NDAgcmM9Y3JmIG1idHJlZT0xIGNyZj0yMy4wIHFjb21wPTAuNjAgcXBtaW49MCBxcG1heD02 OSBxcHN0ZXA9NCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAWmWIhAAV//7sz34FN2u2Mv14 OUV1GW52wf6mv09Y/+Eq5ywBqFdjI7RiQruDqkHmD84Ah+1pD+u+Ju9pbKoJmVnS6c+DhXKzmU8A AEJAA5Q0japbJSyuwAA24QAAAENBmiRsR/93Hj0GFYn+ROeWur9cQ/zaceE37Gsw8XYMMBmtQahK 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 HWRhdGEAAAABAAAAAExhdmY1OC43Ni4xMDA=
-
h264 ffmpeg : How to initialize ffmpeg to decode NALs created with x264
19 février, par Raul CalvoI encoded some frames using x264, using
x264_encoder_encode()
and after that I createdAVPackets
using a function like this:bool PacketizeNals( uint8_t* a_pNalBuffer, int a_nNalBufferSize, AVPacket* a_pPacket ) { if ( !a_pPacket ) return false; a_pPacket->data = a_pNalBuffer; a_pPacket->size = a_nNalBufferSize; a_pPacket->stream_index = 0; a_pPacket->flags = AV_PKT_FLAG_KEY; a_pPacket->pts = int64_t(0x8000000000000000); a_pPacket->dts = int64_t(0x8000000000000000); }
I call this function like this:
x264_nal_t* nals; int num_nals = encode_frame(pic, &nals); for (int i = 0; i < num_nals; i++) { AVPacket* pPacket = ( AVPacket* )av_malloc( sizeof( AVPacket ) ); av_init_packet( pPacket ); if ( PacketizeNals( nals[i].p_payload, nals[i].i_payload, pPacket ) ) { packets.push_back( pPacket ); } }
Now what I want to do is to decode these
AVPackets
usingavcodec_decode_video2
. I think the problem is that I haven't properly initialized the decoder because to encode I used "ultrafast" profile and "zerolatency" tune (x264) and to decode I don't know how to specify these options to ffmpeg.In some examples I have read people initialize the decoder using the file where the video is stored, but in this case I have the
AVPackets
directly.What I'm doing to try to decode is:
avcodec_init(); avcodec_register_all(); AVCodec* pCodec; pCodec=avcodec_find_decoder(CODEC_ID_H264); AVCodecContext* pCodecContext; pCodecContext=avcodec_alloc_context(); avcodec_open(pCodecContext,pCodec); pCodecContext->width = 320; pCodecContext->height = 200; pCodecContext->extradata = NULL; unsigned int nNumPackets = packets.size(); int frameFinished = 0; for ( auto it = packets.begin(); it != packets.end(); it++ ) { AVFrame* pFrame; pFrame = avcodec_alloc_frame(); AVPacket* pPacket = *it; int iReturn = avcodec_decode_video2( pCodecContext, pFrame, &frameFinished, pPacket ); }
But
iReturn
is always -1.Can anyone help me? Sorry if my knowledge in this area is low, I'm new.