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()实现相应的跳转,达到滑动条拖放进度的目的。仔细想想还是挺优雅的。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值