[FFmpeg-user] Streaming YUV file in PIX_FMT_RGBA format to VLC player
Hema A
hema.angamuthu at gmail.com
Thu Oct 27 13:58:46 CEST 2011
Hi,
I am trying to stream a YUV file whose pix format is PIX_FMT_RGBA, to a VLC
player. I use H264 codec for encoding using FFMPEG. Earlier i had used YUV
file with PIX_FMT_YUV420P format and i could successfully stream the YUV
video with the same source implementation. Can anybody let me know if the
below code needs any additional change for encoding a YUV file in RGBA
format and does VLC player support playing such files?
I have specified the following in the code;
//Allocate codec context
codec = avcodec_find_encoder(CODEC_ID_H264);
c = mpegtsstream->codec;
//c->profile= FF_PROFILE_H264_BASELINE;
c->coder_type=FF_CODER_TYPE_VLC;
c->bit_rate = 400000;
c->width = 480
c->height = 800
c->time_base= (AVRational){1,10}; //frames per second
c->gop_size = 250; /* emit one intra frame every 250 frames */
c->max_b_frames=0;
c->pix_fmt = PIX_FMT_RGBA;
c->me_range = 16;
c->max_qdiff = 4;
c->qmin = 10;
c->qmax = 35;
c->qcompress = 0.3;
avcodec_open(c, codec);
Created AVFrame, filled the raw data from the YUV file into AVPicture...
frame = avcodec_alloc_frame();
numBytes = avpicture_get_size(PIX_FMT_RGBA, c->width, c->height);
buffer = (uint8_t *)av_malloc(numBytes*sizeof(uint8_t));
.
..
...
for(;;)
{
sizein = fread(buffer, 1, numBytes, f);
...
...
avpicture_fill((AVPicture*)frame, buffer, PIX_FMT_RGBA, c->width,
c->height);
frame->interlaced_frame = 1; //if wanted and in video parameters defined
frame->top_field_first = 1;
fd->framebuf_size = avcodec_encode_video(c, fd->frame_buffer, numBytes,
frame);
The encoded buffer will be encapsulted with Mpeg-ts and RTP protocol, and
streamed to the VLC player. I have used av_interleaved_write_frame() for
writing the frames into Mpeg-ts and RTP context.
Thanks in advance,
Hema
More information about the ffmpeg-user
mailing list