HuHeng

Results 16 comments of HuHeng

你这个厉害了,补充了httpflv和gopcache功能,和阿里流媒体服务器一样的,阿里的估计也是这么改的

why mediasoup received rtx who's origin seq number greater than the max RTP sequence number?

The memory leak is likely caused by uncontrolled output speed in asynchronous decoding, resulting in memory growth. You may consider using `bmf.bmf_sync.process` as an alternative or switch to the graph...

Could you please provide a minimal reproducible example?

可以考虑封装一个bmf module,这个bmf module可以将pcm数据包封装成一个个bmf AudioFrame结构,然后包装成bmf Packet输出。这个module可以对接bmf内置的ffmpeg_encoder模块。 如果你的网络流式数据包能通过ffmpeg拉取,并且需要解码,也可以直接使用bmf内置的ffmpeg_decoder模块做拉流并解码输出的模块。 可以参考一下bmf/demo/broadcaster这个示例。 里面包含如何将pcm构建成为AudioFrame(audiomix.py),如何用ffmpeg_decoder和ffmpeg_encoder进行流的拉取和推送,如何用bmf组建一个graph pipeline。 bmf/test下还有很多关于如何编写模块的示例可以参考。

可以考虑实现一个bmf 模块,比如叫做WSAudioSourceModule,这个模块实现接收websoceket传递过来的PCM数据包并包装成bmf AudioFrame输出,你可以使用python,golang或者cpp实现这个模块。视频源可以使用ffmpeg_decoder module解码文件输出视频流,编码合成实时流可以使用ffmpeg_encoder模块,WSAudioSourceModule和ffmpeg_decoder module, ffmpeg_encoder module 组成一个graph实现这个场景。

https://babitmf.github.io/docs/bmf/api/api_in_cpp/audio_frame/,可以参考一下文档里的AudioFrame的数据结构和API。 里面包括AudioFrame的构造函数。

是一帧,data是list结构,list长度表示声道数量。

比如双声道的音频,需要存储到一个numpy.array中,它的shape应该是[2, samples], 每个元素类型是np.int16, 你的双声道pcm转换成这样一个numpy.array。然后通过下面的调用转换成为一个AudioFrame ``` data = [] for m in pcm_array: data.append(mp.from_numpy(m)) Log.log(LogLevel.DEBUG, "..........data: ", data.class) audio_frame = AudioFrame(data, sdk.kLAYOUT_STEREO) ``` 有兴趣可以加飞书用户群: https://applink.feishu.cn/client/chat/chatter/add_by_link?link_token=3a1la8f6-55fc-4ad4-bdf0-2ec17edd692a

这个应该是个format参数,可以写在ffmpeg_decoder模块传参时增加这个参数试试,dec_params内没有被模块显式处理的参数会被透传到avformat_open_input/avcodec_open2接口内的option参数里。 "dec_params:{"rtsp_transport":"tcp"}"