write a c programmer to play mp4 video
时间: 2023-02-12 10:52:23 浏览: 124
由于 MP4 是一种多媒体格式,因此在 C 语言中播放它需要使用第三方库。其中一种常用的库是 FFmpeg。下面是一个简单的 C 程序示例,使用 FFmpeg 库播放 MP4 视频:
```
#include <libavformat/avformat.h>
#include <libavcodec/avcodec.h>
#include <libswscale/swscale.h>
int main(int argc, char *argv[]) {
AVFormatContext *pFormatCtx = NULL;
AVCodecContext *pCodecCtx = NULL;
AVCodec *pCodec = NULL;
AVFrame *pFrame = NULL;
AVPacket packet;
int videoStream, i, numBytes;
uint8_t *buffer = NULL;
struct SwsContext *sws_ctx = NULL;
av_register_all();
if(avformat_open_input(&pFormatCtx, argv[1], NULL, NULL) != 0)
return -1;
if(avformat_find_stream_info(pFormatCtx, NULL) < 0)
return -1;
av_dump_format(pFormatCtx, 0, argv[1], 0);
videoStream = -1;
for(i = 0; i < pFormatCtx->nb_streams; i++)
if(pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO) {
videoStream = i;
break;
}
if(videoStream == -1)
return -1;
pCodecCtx = pFormatCtx->streams[videoStream]->codec;
pCodec = avcodec_find_decoder(pCodecCtx->codec_id);
if(pCodec == NULL) {
fprintf(stderr, "Unsupported codec!\n");
return -1;
}
if(avcodec_open2(pCodecCtx, pCodec, NULL) < 0)
return -1;
pFrame = av_frame_alloc();
numBytes = avpicture_get_size(AV_PIX_FMT_RGB24, pCodecCtx->width,
pCodecCtx->height);
buffer = (uint8_t *)av_malloc(numBytes * sizeof(uint8_t));
sws_ctx = sws_getContext(pCodecCtx->width, pCodecCtx->height,
pCodecCtx->pix_fmt, pCodecCtx->width,
pCodecCtx->height, AV_PIX_FMT_RGB24,
SWS_BILINEAR, NULL, NULL, NULL);
avpicture
阅读全文