[向各路专家提问]TransFormfilter 开发问题 (音视频同时播放阻塞在第一帧)

mmidd 2008-08-26 05:33:25
媒体文件:

音频:麦克录下的声音,经过mp3压缩
视频:摄像头采集,经过x264压缩

音视频混合存到一个文件中 (每个音视频sample分别加了区分包头写到文件)

目的:播放这个自制的文件

写了一个source filter 读取这个文件分离每个sample发送

写了一个transform filter 一个输入 pin 两个输出pin(一路音频,一路视频)
输入pin解析每个sample 区分音视频发送到对应的输出pin中 (用pSample->Delive方法)

Graph render我的transform filter的两个输出pin

出现问题:

只render 我的 音频,或视频,播放文件正常。
两个输出pin一起render 只能播放一帧视频后程序阻塞,我跟踪阻塞位置是 DoBufferProcessingLoop 的 GetDeliveryBuffer

我将两个输出pin都改成输出视频,正常,可以输出两个视频窗口。

音频打时间戳视频不打 , 视频打时间戳音频不打,音视频都不打时间戳,音视频打时间戳为0或单独一个为0等任何组合都试过了,还只能播放一帧。

是哪里出了问题呢?
...全文
106 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
UDX协议 2008-09-04
  • 打赏
  • 举报
回复
说白了,要音频先render.
Carmack Jiang 2008-09-03
  • 打赏
  • 举报
回复
src->avi splitter->decompressor->video render
->directsound render
xjfox 2008-09-03
  • 打赏
  • 举报
回复
都只放音频可以放么?如果能放,那就是音视频同步有问题了,重点还是时间戳
UDX协议 2008-08-29
  • 打赏
  • 举报
回复
时间戳的问题。

你要保证音聘先Render第一侦就可以了。
xjfox 2008-08-28
  • 打赏
  • 举报
回复
音视频各自都需要一个数据线程。不知道你是在哪里实现创建两个数据线程的。看样子你的source filter是push方式的,那应该有一个数据线程,transform filter又具体做了什么,楼主再描述详细一点
sxcong 2008-08-28
  • 打赏
  • 举报
回复
不用transform ,直接把source连到render上试试
mmidd 2008-08-28
  • 打赏
  • 举报
回复
谢谢楼上!可以参考
还有什么说法吗
mmidd 2008-08-28
  • 打赏
  • 举报
回复
transform filter 的input pin的receive 方法中分析sample并分别发送到音视频的输出pin中 hr = tAudioOutpin->Deliver(pSample);方法发送
每个transform filter的输出pin定义了COutputQueue pOutputQueue 在Deliver中是用 m_pOutputQueue->Receive(pMediaSample);
mmidd 2008-08-27
  • 打赏
  • 举报
回复
无人问津 贴!
Jartru 2008-08-27
  • 打赏
  • 举报
回复
可能是source filter实现有问题,这种情况可以把source filter和transform filter合在一起,用一个独立的线程读取数据,将音、视频分离后的数据分别放到两个不同缓存区,对应的输出PIN从缓存区读取数据后往下发送。
缓存区要做好互斥,要不很容易死锁!

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧