lipku / LiveTalking

Real time interactive streaming digital human
https://livetalking-doc.readthedocs.io/
Apache License 2.0
3.92k stars 561 forks source link

看不懂大老是怎么把视频做成 流的~~ #275

Open gg22mm opened 1 month ago

gg22mm commented 1 month ago

图片 图片 看不懂是怎么回事~~

Heaverno commented 1 month ago

俺也一样!

gg22mm commented 1 month ago

大老是个流 操作高手中的高手~~ 正看啃代码,云里雾里的,我盲猜是通过队列来实现 音频与视频同步的。 ~~ , 感觉这块好复杂呀, 要是有个精简的例子就好了 。或是有别的更简单的方式~~

//不管是音频还是视频帧,都放队里中 video_track._queue.put(new_frame) frame = await self._queue.get()

res_frame_queue.put((res_frame,__mirror_index(length,index),audio_frames[i2:i2+2])) res_frame,idx,audio_frames = self.res_frame_queue.get(block=True, timeout=1)

Heaverno commented 1 month ago

俺也不懂!

ThornbirdZhang commented 1 month ago

一点浅见:process_frames承接同一个文件的inference函数的输出,在有数据时将人脸合成到原有图片上,否则采用原有视频的图片处理。然后将图片与视频合并放在audio与video track(webrtc.py) 中,计算时间戳,走webrtc channel发送。同步是基于图像帧数(25fps)与音频帧数(50fps)。所以那边会有个2倍的音频处理。

lipku commented 1 month ago

简单的例子看看aiortc里的example

gg22mm commented 1 month ago

一点浅见:process_frames承接同一个文件的inference函数的输出,在有数据时将人脸合成到原有图片上,否则采用原有视频的图片处理。然后将图片与视频合并放在audio与video track(webrtc.py) 中,计算时间戳,走webrtc channel发送。同步是基于图像帧数(25fps)与音频帧数(50fps)。所以那边会有个2倍的音频处理。

没做你说的这一步: 《然后将图片与视频合并放在audio》, 作者直接用图片了。 ~~ , 说白了就是直接推图片,一秒25张,与声音25帧到队列,然后从队列渲染到页面,然后接着从50开始依次循环..,没有牵扯到合并,合并就慢了. ~~不过我 想想都麻烦

作者是全网一个把视频与音频做成流来推送的,非常有创新 ,不过我感觉好麻烦呀