Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >返回相同颜色的FFMpeg(安卓) av_read_frame或avcodec_decode_video2

返回相同颜色的FFMpeg(安卓) av_read_frame或avcodec_decode_video2
EN

Stack Overflow用户
提问于 2012-10-18 11:52:51
回答 1查看 2.6K关注 0票数 0

在过去的两周里,我一直在尝试FFMpeg,但我遇到了一些麻烦……首先,我一直在使用Galaxy S3,它工作得非常好,给我提供了有史以来最好的图片,但我最近切换到Galaxy NEXUS,这给我带来了一堆问题……

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

我做得怎么样:

代码语言:javascript
运行
AI代码解释
复制
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写到一个文件中,这样我就可以在web上的任何YUV阅读器上看到它。

代码语言:javascript
运行
AI代码解释
复制
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);

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

但是如果我用(例如XnView,这意味着要正确地显示YUV类型)打开文件,我在图片上只看到深绿色。

令我困扰的是,在Galaxy S3上一切正常,但在GNexus上却有问题……

所以我的问题是:为什么它不能在Galaxy Nexus上工作?

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

我不知道!

致敬,Cehm

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-05 08:25:25

可能你的帧没有被很好的解码,因为解码器还没有得到关键帧。这发生在我处理实时流的时候。因此,在保存生成的帧之前,请等待第一个关键帧。并使用pFrame->width而不是gVideoCodecCtx->width

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12953979

复制
相关文章
linux命令后台运行
1. command & : 后台运行,你关掉终端会停止运行 2. nohup command & : 后台运行,你关掉终端也会继续运行
RainMark
2019/09/10
9.9K0
DOS命令后台运行
在你批处理的相同目录下新建一个记事本,里面输入: set ws=wscript.createobject("wscript.shell") ws.run "win.bat /start",0 (其中win.bat为你自己的批处理名字,自己改) 然后把这个记事本保存为后缀名为.vbe的文件,到时候你只要运行这个vbe文件
gemron的空间
2019/11/04
2.3K0
在linux后台运行脚本的方法和命令
后台运行脚本 执行脚本test.sh:./test.sh 中断脚本test.sh:ctrl+c 在1的基础上将运行中的test.sh,切换到后台并暂停:ctrl+z 执行ctrl+z后,test.sh在后台是暂停状态(stopped),使用命令:bg number让其在后台开始运行(“number”是使用jobs命令查到的 [ ]中的数字,不是pid) 直接在后台运行脚本test.sh:./test.sh & 查看当前shell环境中已启动的任务情况:jobs 将test.sh切换到前台运行:fg %number(”number”为使用jobs命令查看到的 [ ] 中的数字,不是pid) 中断后台运行的test.sh脚本:先fg %number切换到前台,再ctrl+c;或是直接kill %number 以上两种在后台运行test.sh的方法,当遇到退出当前shell终端时,后台运行的test.sh也就结束了。这是因为以上两种方法使得test.sh在后台运行时,运行test.sh进程的父进程是当前shell终端进程,关闭当前shell终端时,父进程退出,会发送hangup信号给所有子进程,子进程收到hangup以后也会退出。所以要想退出当前shell终端时test.sh继续运行,则需要使用nohup忽略hangup信号。
大数据流动
2020/06/19
3.6K0
docker里运行docker命令
现有环境的jenkins是在docker里面运行的,需要执行docker相关命令才行。
py3study
2020/09/03
1.2K0
docker启动运行命令
列出所有容器,其中 docker ps用于查看正在运行的容器,ps -a则用于查看所有容器
头皮阴都都
2020/05/13
2.8K0
Docker运行命令示例
Docker是一个平台,可让你将应用程序开发,测试和部署为可在几乎任何地方运行的可移植的自给自足的容器。 docker run命令从给定的镜像创建一个容器,并使用给定的命令启动该容器。这是开始使用Docker时应熟悉的第一批命令之一。 在本文中,我们将使用官方的Nginx镜像来展示运行Docker容器的各种方法。 Docker运行命令 docker run命令采用以下形式: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 从中创建容器的镜像名称是docker r
入门笔记
2022/06/02
1.3K0
Docker 容器中运行 Docker 命令
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/145668.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/29
2.7K0
如何使用Docker Compose在容器内运行Linux命令?
Docker Compose 是一个用于定义和运行多容器Docker应用程序的工具。除了可以启动应用程序的多个容器之外,Docker Compose还提供了一种在容器内部执行命令的方式。在本文中,我们将详细介绍如何使用Docker Compose在容器内运行Linux命令,并展示一些常见的应用场景。
网络技术联盟站
2023/06/08
3.2K0
如何使用Docker Compose在容器内运行Linux命令?
Linux||后台运行及查看状态命令
在使用Linux运行程序的时候,常常遇到需要耗费一定时间才能完成的文件,如果在前台运行,此时坐在电脑前的你只能被迫打开其他软件进行摸鱼。
小汪Waud
2023/02/16
7.8K0
Linux||后台运行及查看状态命令
如何在后台运行Linux命令
通常情况下,当你在终端运行一个命令,在你开始输入另外一个命令之前,你必须等待当前命令运行结束。这被称为在前台运行命令,或者前台进程。当一个进程在前台运行时,它占用了你的 shell,并且你可以通过输入设备和它进行交互。
雪梦科技
2020/05/11
8.2K0
如何在后台运行Linux命令
如何在后台运行Linux命令?
通常情况下,在 Linux 终端中运行命令时,我们必须等前一命令执行完成后,在输入并执行后一条命令,称之为在前台或前台进程中运行命令,进程在前台运行时,将占用您的外壳,并且您也可以使用输入设备与其终端进行交互。
杰哥的IT之旅
2020/06/18
3.9K0
如何使程序在Linux后台运行
这样一来,test程序就在后台运行了。但是,这样处理还不够,因为这样做虽然程序是在后台运行了,但log依然不停的输出到当前终端。因此,要让终端彻底的清静,还应将log重定向到指定的文件:
阿凡亮
2020/04/14
9K0
使程序在Linux下后台运行
我们计算的程序都是周期很长的,通常要几个小时甚至一个星期。我们用的环境是用putty远程连接到日本Linux服务器。所以使程序在后台跑有以下三个好处:
SingYi
2022/07/14
4.4K0
在 Linux or windows 上后台运行服务
  此时可以访问 http://ip:8000 验证服务是否成功启动了(详细操作见另一篇文章-Python 一行搭建文件服务器)
我是胖虎啊
2022/06/27
3.4K0
在 Linux or windows 上后台运行服务
在Windows上如何后台运行JuiceFS
JuiceFS的Badger引擎改造完成以后,需要在Windows下面进行后台运行。因为现有的JuiceFS中还没有在Windows下的后台运行实现,所以需要通过其他途径解决。
用户1260683
2022/03/30
3K0
在Windows上如何后台运行JuiceFS
在OS X上运行Docker
本文介绍了如何在OS X上运行Docker,通过使用boot2docker和VirtualBox,使基于Linux的Docker能在OS X上正常运行。同时,还探讨了如何将现有的基于Linux的Docker容器迁移到基于macOS的Docker。
Techeek
2018/01/04
2K0
在OS X上运行Docker
在docker中运行mysql实例
Docker是一种新兴的虚拟化技术,能够一定程度上的代替传统虚拟机。下图是容器跟虚拟机的对比
陈灬大灬海
2019/03/29
4K0
在docker中运行mysql实例
在docker中运行mysql实例
Docker是一种新兴的虚拟化技术,能够一定程度上的代替传统虚拟机。下图是容器跟虚拟机的对比
陈灬大灬海
2019/03/15
3.9K0
在docker中运行Kali Linux
当使用各种工具或创建隔离的环境时,Docker是虚拟化的绝佳替代品。Docker是轻量级的(在Linux上本机运行,没有虚拟机管理程序层),并且是不需要GUI的用例的理想选择。Offensive Security已经创建了一个官方的Kali Linux Docker镜像,名为`kalilinux/kali-rolling`,我们将在本文中用其创建并运行Kali Linux容器。
点火三周
2021/04/30
12K0
在docker中运行Kali Linux
在云主机后台进行python程序运行
nohup python main.py & nohup liunx自带的命令 注意:后面(&)!
py3study
2020/01/20
1.9K0

相似问题

在后台运行Docker命令?

12

在后台运行docker时,在docker中执行命令

17

在后台通过ssh远程运行docker logs命令

177

如何在后台Docker中运行Symfony命令

22

如何使docker命令在后台使用nohup运行

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档