[ffmpeg] 不能正常播放视频,播放窗口绿屏

2024-08-21 10:18

本文主要是介绍[ffmpeg] 不能正常播放视频,播放窗口绿屏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

popcorn player 使用 ffmpeg-2.3 + Linux + SDL1.2


【问题】popcorn播放视频, 播放窗口绿屏幕


【分析】dump AVFrame 图像帧(数据源) --> dump SDL_Overlay 图像帧(目标数据)


【结果】dump AVFrame 图像帧(数据源), OK;dump SDL_Overlay 图像帧(目标数据), Fail.


【原因】

错误的做法:
static int videoImage_display(VideoState *video_states, AVFrame *frame)
{
    //传递AVFrame 的数据给SDL_Overlayer 

    //AVPicture picture;
     SDL_Rect rect;
     AVPicture pict = {{0}};

     SDL_LockYUVOverlay(video_states->layer1);
     // SDL_Overlayer的pixels指针指向AVFrame的数据
     video_states->layer1->pixels[0] = frame->data[0];
     video_states->layer1->pixels[1] = frame->data[1];
     video_states->layer1->pixels[2] = frame->data[2];

     video_states->layer1->pitches[0] = frame->linesize[0];
     video_states->layer1->pitches[1] = frame->linesize[2];
     video_states->layer1->pitches[2] = frame->linesize[1];

     SDL_DisplayYUVOverlay(video_states->layer1,  &rect), 

正确的做法:
static int videoImage_display(VideoState *video_states, AVFrame *frame)
{
     //AVPicture picture;
     SDL_Rect rect;
     AVPicture pict = {{0}};

     SDL_LockYUVOverlay(video_states->layer1);

     //video_states->layer1->pixels[0] = frame->data[0];
     //video_states->layer1->pixels[1] = frame->data[1];
     //video_states->layer1->pixels[2] = frame->data[2];

     //video_states->layer1->pitches[0] = frame->linesize[0];
     //video_states->layer1->pitches[1] = frame->linesize[2];
     //video_states->layer1->pitches[2] = frame->linesize[1];

     pict.data[0] = video_states->layer1->pixels[0];
     pict.data[1] = video_states->layer1->pixels[2];
     pict.data[2] = video_states->layer1->pixels[1];
     pict.linesize[0] = video_states->layer1->pitches[0];
     pict.linesize[1] = video_states->layer1->pitches[2];
     pict.linesize[2] = video_states->layer1->pitches[1];

     // AVFrame的数据拷贝到SDL_Overlay存放数据的内存区域
     /*scale_image call sws_scale() */
     scale_image(frame->data, frame->linesize,
                          frame->width, frame->height, frame->format,
                          pict.data, pict.linesize,
                          frame->width, frame->height, AV_PIX_FMT_YUV420P,
                          SWS_BICUBIC);

        SDL_DisplayYUVOverlay(video_states->layer1,  &rect);


这篇关于[ffmpeg] 不能正常播放视频,播放窗口绿屏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1092873

相关文章

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

Python如何将OpenCV摄像头视频流通过浏览器播放

《Python如何将OpenCV摄像头视频流通过浏览器播放》:本文主要介绍Python如何将OpenCV摄像头视频流通过浏览器播放的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完... 目录方法1:使用Flask + MJPEG流实现代码使用方法优点缺点方法2:使用WebSocket传输视

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

基于Linux的ffmpeg python的关键帧抽取

《基于Linux的ffmpegpython的关键帧抽取》本文主要介绍了基于Linux的ffmpegpython的关键帧抽取,实现以按帧或时间间隔抽取关键帧,文中通过示例代码介绍的非常详细,对大家的学... 目录1.FFmpeg的环境配置1) 创建一个虚拟环境envjavascript2) ffmpeg-py

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务

Python使用FFmpeg实现高效音频格式转换工具

《Python使用FFmpeg实现高效音频格式转换工具》在数字音频处理领域,音频格式转换是一项基础但至关重要的功能,本文主要为大家介绍了Python如何使用FFmpeg实现强大功能的图形化音频转换工具... 目录概述功能详解软件效果展示主界面布局转换过程截图完成提示开发步骤详解1. 环境准备2. 项目功能结

SpringBoot使用ffmpeg实现视频压缩

《SpringBoot使用ffmpeg实现视频压缩》FFmpeg是一个开源的跨平台多媒体处理工具集,用于录制,转换,编辑和流式传输音频和视频,本文将使用ffmpeg实现视频压缩功能,有需要的可以参考... 目录核心功能1.格式转换2.编解码3.音视频处理4.流媒体支持5.滤镜(Filter)安装配置linu

使用WPF实现窗口抖动动画效果

《使用WPF实现窗口抖动动画效果》在用户界面设计中,适当的动画反馈可以提升用户体验,尤其是在错误提示、操作失败等场景下,窗口抖动作为一种常见且直观的视觉反馈方式,常用于提醒用户注意当前状态,本文将详细... 目录前言实现思路概述核心代码实现1、 获取目标窗口2、初始化基础位置值3、创建抖动动画4、动画完成后

电脑软件不能安装到C盘? 真相颠覆你的认知!

《电脑软件不能安装到C盘?真相颠覆你的认知!》很多人习惯把软件装到D盘、E盘,刻意绕开C盘,这种习惯从哪来?让我们用数据和案例,拆解背后的3大原因... 我身边不少朋友,在使用电脑安装软件的时候,总是习惯性的把软件安装到D盘或者E盘等位置,刻意避开C盘。如果你也有这样的习惯,或者不明白为什么要这么做,那么我

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四