我有一个函数,可以获取RTP数据包的有效载荷及其长度。调用此函数后,我将数据推入队列,并在该函数内执行以下操作(使用NdkMediaExtractor.cpp实现),
AMediaDataSource *poMediaDataSource = AMediaDataSource_new();
AMediaDataSource_setUserdata(poMediaDataSource, userData);
AMediaDataSource_setReadAt(poMediaDataSource, setReadAt);
AMediaDataSource_setGetSize(poMediaDataSource, setGetSize);
media_status_t status = AMediaExtractor_setDataSourceCustom(poExtractor, poMediaDataSource);
在setReadAt(void *userData, off64_t offset, void *buffer, size_t size)
回调实现中,我从队列中弹出数据。但是我不了解setReadAt()
函数的工作原理。请帮助我了解MediaExtractor_setDataSourceCustom()
及其回调。
我尝试将100个RTP数据包有效负载写入一个文件(即,仅缓冲100帧用于测试目的),并使用AMediaExtractor_setDataSourceFd()
成功提取了数据。
对于AMediaExtractor_setDataSourceCustom()
方法,我将5帧插入队列,然后致电AMediaExtractor_setDataSourceCustom()
。我很困惑setReadAt()
回调的工作原理。
我希望可以设置数据源,并且需要从媒体提取器成功提取数据。
非常感谢您。