ffmpeg开发:视频数据在qt显示

使用SDL在Qt窗口上显示。sdl1在Qt直接使用putenv窗口HWND就行,sdl2废除了这个api。

sdl2该怎么用呢?其实也很简单。先获取Qt的窗口句柄,windows下QWidget.winId()获取窗口句柄强制转化为HWND类型,后SDL_CreateWindowFrom((void*)窗口句柄)即可把视频显示到Qt窗口上。

实现视频的播放与暂停功能可使用SuspendThread函数暂停解码程序的运行,播放可使用ResumeThread恢复解码程序的运行。

视频播放器的快进快退功能我是使用av_seek_frame()函数实现,具体是现获取当前视频的时间,然后减去或加上快进或慢退的时间然后使用av_seek_frame函数。注意该函数的最后一个参数如果设置成AVSEEK_FLAG_BACKWARD可能会导致函数执行错误,设置成AVSEEK_FLAG_ANY就会正常。函数第三个参数为跳转的秒数乘以1000000.。

视频的滑动条拖动进度可以使用Qt的horizontalSlider控件配合ffmpeg的av_seek_frame()函数来实现。在程序中,以视频的总长度为该slider的长度,以后视频每前进一段时间,更新视频的时间。拖动滑动条可设置相应的信号和槽捕获提出视频改变的大小,后根据现有视频时间增加或减小,后av_seek_frame()实现相应的跳转,达到滑动条拖放进度的目的。仔细想想还是挺优雅的。




你可能感兴趣的:(qt,ffmpeg)