使用libvlc_media_add_option录制文件无音频,是Bug还是操作有误?
问题分析与解决方案
这不是libvlc的已知Bug,是你的参数配置和编码兼容性问题,具体修正如下:
1. 修复Sout参数语法错误
你的sout选项末尾缺少闭合的},这会导致libvlc解析输出配置时出错,直接影响音频流的正常处理。
2. 处理音频编码兼容性问题
你的RTSP流音频采用G726编码,而MP4容器对G726的支持性极差,需要通过转码将音频转为MP4兼容的编码(比如AAC),同时确保捕获并处理视频、音频双流。
修改后的代码示例
void __fastcall TForm1::Button1Click(TObject *Sender) { libvlc_instance_t* instance = libvlc_new(0, NULL); libvlc_media_t* VlcMedia; VlcMedia = libvlc_media_new_location(instance,"rtsp://yourid:yourpassword@192.168.0.253:554/nphMpeg4/g726-640x480"); media_player = libvlc_media_player_new_from_media(VlcMedia); // 修正语法错误,添加转码步骤:音频转AAC,视频保留原编码,同时输出到面板显示和本地文件 libvlc_media_add_option(VlcMedia,":sout=#transcode{vcodec=h264,acodec=aac,ab=128,channels=2,samplerate=44100}:duplicate{dst=display,dst=std{access=file,mux=mp4,dst=test.mp4}}"); libvlc_media_release(VlcMedia); libvlc_media_player_set_hwnd(media_player,Panel2->Handle); libvlc_media_player_play(media_player); }
额外排查点
- 先确认原RTSP流本身包含音频:用VLC桌面播放器打开该RTSP地址,检查是否有声音。如果原流就没有音频,录制文件自然也不会有音频。
- 若转码后仍有问题,可以尝试调整转码参数,比如将
acodec改为mp3,对应容器mux保持mp4(MP4支持MP3音频)或改为avi。
内容的提问来源于stack exchange,提问作者nao
相关产品推荐
相关产品推荐

