gpt4 book ai didi

android - FFMpeg(Android) av_read_frame 或 avcodec_decode_video2 返回相同的颜色

转载 作者:行者123 更新时间:2023-12-04 23:09:34 40 4
gpt4 key购买 nike

过去两周我一直在试验 FFMpeg,但遇到了一些麻烦......
首先,我一直在使用 Galaxy S3,它工作得非常好,给了我有史以来最好的照片,但我最近换了 Galaxy NEXUS,这给了我很多问题......

我在做什么:我只是从视频中提取帧

我在做什么:

while(av_read_frame(gFormatCtx, &packet)>=0)
{
// Is this a packet from the video stream?
if(packet.stream_index==videoStream)
{
// Decode video frame
avcodec_decode_video2(gVideoCodecCtx, pFrame, &frameFinished, &packet);
// Did we get a video frame?
if(frameFinished)
{//and so on... But our problem is already here...

好的,现在 pFrame正在持有我的框架的 YUV 表示...所以,为了检查我从 avcodec_decode_video2(...) 得到什么函数我只是写 pFrame到一个文件,这样我就可以用网络上的任何 YUV 阅读器看到它。
char yuvFileName[100];
sprintf(yuvFileName,"/storage/sdcard0/yuv%d.yuv",index);
FILE* fp = fopen(yuvFileName, "wb");
int y;
// Write pixel data
for(y=0; y<gVideoCodecCtx->height; y++)
{
fwrite(pFrame->data[0]+y*pFrame->linesize[0], 1, gVideoCodecCtx->width, fp);
}
for(y=0; y<gVideoCodecCtx->height/2; y++)
{
fwrite(pFrame->data[1]+y*pFrame->linesize[1], 1, gVideoCodecCtx->width/2, fp);
}
for(y=0; y<gVideoCodecCtx->height/2; y++)
{
fwrite(pFrame->data[2]+y*pFrame->linesize[2], 1, gVideoCodecCtx->width/2, fp);
}
fclose(fp);

好的,现在我的结果在文件存储@ /storage/sdcard0/blabla.YUV 上。在我的 Galaxy Nexus 根内存中。

但是如果我用(例如 XnView,它旨在正确显示 YUV 类型)打开文件,我只会在图片上看到深绿色。

令我困扰的是,Galaxy S3 上一切正常,但 GNexus 上出现故障......

所以这是我的问题:为什么它在 Galaxy Nexus 上不起作用?

Gnexus 和 armeabiv7 之间的兼容性问题?

我不知道 !

问候,
切姆

最佳答案

可能是你的帧没有解码好,因为解码器还没有得到关键帧。当我处理直播流时,这发生在我身上。所以在你保存生成的帧之前等待第一个关键帧。并使用 pFrame->width 而不是 gVideoCodecCtx->width

关于android - FFMpeg(Android) av_read_frame 或 avcodec_decode_video2 返回相同的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12953979/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com