
这是引入库部分,注释掉的是我写的用不上的,其中crypto需要在sdk中全局查找拷贝来的
foot@foot-VirtualBox:~/qtFile/videoDemo/videoDemo$ tree
.
├── main.cpp
├── mainwindow.cpp
├── mainwindow.h
├── mainwindow.ui
├── tpmanager
│ ├── crypto1.1
│ │ ├── libcrypto.a
│ │ ├── libcrypto.so -> libcrypto.so.1.1
│ │ ├── libcrypto.so.1.1
│ │ ├── libssl.a
│ │ ├── libssl.so -> libssl.so.1.1
│ │ └── libssl.so.1.1
│ ├── include
│ │ ├── cdx_config.h
│ │ ├── CdxKeyedVector.h
│ │ ├── libcedarc
│ │ │ └── include
│ │ │ ├── cdc_config.h
│ │ │ ├── memoryAdapter.h
│ │ │ ├── sc_interface.h
│ │ │ ├── sdecoder.h
│ │ │ ├── typedef.h
│ │ │ ├── vbasetype.h
│ │ │ ├── vdecoder.h
│ │ │ ├── veAdapter.h
│ │ │ ├── veInterface.h
│ │ │ └── vencoder.h
│ │ ├── libcedarx
│ │ │ ├── base
│ │ │ │ └── include
│ │ │ │ ├── AwMessageQueue.h
│ │ │ │ ├── AwPool.h
│ │ │ │ ├── CdxAtomic.h
│ │ │ │ ├── CdxBase64.h
│ │ │ │ ├── CdxBinary.h
│ │ │ │ ├── CdxBitReader.h
│ │ │ │ ├── CdxBuffer.h
│ │ │ │ ├── CdxDebug.h
│ │ │ │ ├── CdxEnumCommon.h
│ │ │ │ ├── CdxISOLang.h
│ │ │ │ ├── CdxKeyedVector.h
│ │ │ │ ├── CdxList.h
│ │ │ │ ├── CdxList.i
│ │ │ │ ├── CdxLock.h
│ │ │ │ ├── cdx_log.h
│ │ │ │ ├── CdxMemory.h
│ │ │ │ ├── CdxMessage.h
│ │ │ │ ├── CdxMeta.h
│ │ │ │ ├── CdxQueue.h
│ │ │ │ ├── CdxSocketUtil.h
│ │ │ │ ├── CdxStrUtil.h
│ │ │ │ ├── CdxSysinfo.h
│ │ │ │ ├── CdxTime.h
│ │ │ │ ├── CdxTypes.h
│ │ │ │ ├── CdxUrl.h
│ │ │ │ └── SmartDnsService.h
│ │ │ ├── external
│ │ │ │ └── include
│ │ │ │ ├── adecoder
│ │ │ │ │ └── adecoder.h
│ │ │ │ ├── aencoder
│ │ │ │ │ └── aencoder.h
│ │ │ │ └── sdecoder
│ │ │ │ └── sdecoder.h
│ │ │ ├── parser
│ │ │ │ └── include
│ │ │ │ ├── awPlayReadyLicense.h
│ │ │ │ └── CdxParser.h
│ │ │ ├── playback
│ │ │ │ └── include
│ │ │ │ ├── deinterlace.h
│ │ │ │ ├── layerControl.h
│ │ │ │ ├── player.h
│ │ │ │ ├── soundControl.h
│ │ │ │ └── subtitleControl.h
│ │ │ └── stream
│ │ │ └── include
│ │ │ ├── AwRtpStream.h
│ │ │ ├── CdxSeqBuffer.h
│ │ │ ├── CdxStreamErrno.h
│ │ │ └── CdxStream.h
│ │ ├── PostProcessCom.h
│ │ ├── tplayer.h
│ │ ├── videoOutPort.h
│ │ └── xplayer
│ │ └── include
│ │ ├── mediaInfo.h
│ │ ├── xplayer.h
│ │ └── xplayerUtil.h
│ ├── jpegdecode
│ │ └── libjpegdecode.so
│ ├── lib
│ │ ├── libadecoder.so
│ │ ├── libasound.so -> libasound.so.2.0.0
│ │ ├── libasound.so.2 -> libasound.so.2.0.0
│ │ ├── libasound.so.2.0.0
│ │ ├── libawrecorder.so
│ │ ├── libcdx_playback.so
│ │ ├── libcrypto.so -> libcrypto.so.1.0.0
│ │ ├── libcrypto.so.1.0.0
│ │ ├── libscaledown.so
│ │ ├── libsubdecoder.so
│ │ ├── libuapi.so
│ │ ├── libvenc_common.so
│ │ ├── libvenc_h264.so
│ │ ├── libvenc_h265.so
│ │ ├── libvenc_jpeg.so
│ │ ├── libVE.so
│ │ ├── libvideoengine.so
│ │ ├── libxplayer.so
│ │ ├── libz.a
│ │ ├── libz.so -> libz.so.1.2.8
│ │ ├── libz.so.1 -> libz.so.1.2.8
│ │ └── libz.so.1.2.8
│ ├── libcedarc
│ │ └── lib
│ │ ├── libaftertreatment.la
│ │ ├── libaftertreatment.so
│ │ ├── libcdc_base.la
│ │ ├── libcdc_base.so
│ │ ├── libfbm.la
│ │ ├── libfbm.so
│ │ ├── libMemAdapter.la
│ │ ├── libMemAdapter.so
│ │ ├── libOmxCore.la
│ │ ├── libOmxCore.so
│ │ ├── libOmxVdec.la
│ │ ├── libOmxVdec.so
│ │ ├── libOmxVenc.la
│ │ ├── libOmxVenc.so
│ │ ├── libsbm.la
│ │ ├── libsbm.so
│ │ ├── libvdecoder.la
│ │ ├── libvdecoder.so
│ │ ├── libvenc_base.la
│ │ ├── libvenc_base.so
│ │ ├── libvencoder.la
│ │ └── libvencoder.so
│ ├── libcedarx
│ │ └── lib
│ │ ├── libcdx_base.la
│ │ ├── libcdx_base.so
│ │ ├── libcdx_common.la
│ │ ├── libcdx_common.so
│ │ ├── libcdx_parser.la
│ │ ├── libcdx_parser.so
│ │ ├── libcdx_stream.la
│ │ └── libcdx_stream.so
│ ├── tmetadataretriever
│ │ └── libtmetadataretriever.so
│ ├── tplayer
│ │ └── libtplayer.so
│ └── trecorder
│ └── libtrecorder.so
├── User
│ ├── tpmanager.cpp
│ └── tpmanager.h
├── videoDemo.pro
└── videoDemo.pro.user
文件结构树部分就是整个demo项目的结构,我是将package->allwinner->tina_multimedia
的部分内容拷贝到项目中,其中User
文件夹是参考tplayerdemo.c
的CallbackForTPlayer
写的。
最后mainwindow.cpp
写的内容是
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
TPlayer* tplayer = TPlayerCreate(CEDARX_PLAYER);
TPlayerSetNotifyCallback(tplayer,myCallback,NULL);
if(TPlayerSetDataSource(tplayer,"http://192.168.0.123:9999/explorer?path=upload%2F2025-03%2F4.mp4",NULL) != 0)
{
printf("TPlayerSetDataSource() return fail.\n");
}
else
{
printf("TPlayerSetDataSource() end\n");
}
if(TPlayerPrepare(tplayer)!= 0)
{
printf("TPlayerPrepare return fail.\n");
}else{
printf("TPlayerPrepare end\n");
}
if(TPlayerStart(tplayer) != 0)
{
printf("TPlayerStart() return fail.\n");
}else{
printf("started.\n");
}
qInfo() << "video is create now" ;
}
//最简单的一个tplayer播放流程
总结,折腾几天,发现tplayer没有提供视频数据帧的方法,想着能通过tplayer来实现在qt中播放视频,但是源码是开源的,应该能实现在qt中播放,我不会改。如果我说的有什么错误或者不妥之处,还请大佬指正。