流媒体开发:使用blackhole+wireshark+h264extractor+vlc调试媒体流

简介: 介绍一种高效媒体流调试手段。

背景描述

最近在做 SIP 媒体转发服务时遇到了这样的问题:在某种场景下,服务器下行转发的屏幕共享流,SIP 端并没有正确解码并显示画面。

可能原因

  1. 媒体转发服务上行收到的媒体流不是屏幕共享流。
  2. 媒体转发服务器转发过程异常,导致最终转发的媒体流不是屏幕共享流。
  3. SIP 端未收到 sps/pps/idr,导致解码失败。
  4. sip/bfcp 协议的整体交互流程存在问题。
  5. 其他原因。

调试思路

  1. 如果是转发过程异常导致最终转发的媒体流是错误的,可以对比服务器上行接收与下行转发的 RTP 包的 ssrc、包长度、包数量是否一致以及验证转发的目标端口是否正确,或者将最终转发的数据包 dump 成可以播放的 h264 文件来验证问题。
  2. 如果是上行接收的媒体流是错误的,同样可以将上行接收的数据包 dump 成 h264 文件来验证问题。

注意,能够 dump 成可播放的 h264 文件的前提是:媒体流必须是解密后的明文数据。那么问题来了,如果服务器上行接收与下行转发的媒体流都是加密的,那么把媒体数据 dump 成 264 文件的想法是不是不可行呢?其实,在上行收流解密之后以及最终转发加密之前的整个过程,媒体流完全是解密的,我们可以在这个过程的一些关键节点将这些解密后的数据发送到本机某个端口(blackhole),比如 127.0.0.1:10000,并配合 wireshark 抓取这些解密的媒体数据(如果使用本地回环地址,记得要把 wireshark 的抓包接口设置为 Loopback)。

调试手段

下面介绍一种使用 blackhole + wireshark + h264extractor + vlc 调试媒体流的有效手段。

blackhole + wireshark

blackhole 的思路在上文已经提到,需要开发者自己编码实现,非常简单,可以参考 srs
实现 blackhole 后,就可以在媒体转发过程中的任意节点将明文数据发送到 blackhole,并配合 wireshark 抓取解密后的媒体流。

h264extractor

wireshark 插件,将抓取后的明文数据包 dump 成 h264 文件。

注意,一定要将过滤出的特定分组的数据包保存到单独的 pcap 文件再使用插件去 dump 264 文件。

h264extractor 插件安装地址
h264extractor 插件安装教程

init.lua 文件在 mac 下的路径为:/Applications/Wireshark.app/Contents/Resources/share/wireshark,不过 mac 下的 wireshark 使用该插件会报错,还是建议在 windows 下的 wireshark 中安装并使用该插件。

vlc

验证 dump 好的 h264 文件是否可以正常播放,画面是否是预期的屏幕共享画面。

目录
相关文章
wireshark解析rtp协议,流媒体中的AMR/H263/H264包的方法
抓到完整的流媒体包之后,用wireshark打开,其中的包可能不会自动映射成RTP+AMR/H263/H264的包,做如下修改操作即可:1.  把UDP 包解析成RTP/RTCP包。选中UDP包,右键,选择Decode As,选RTP2.  把RTP Payload映射成实际的媒体格式。
2925 0
|
1月前
|
缓存 视频直播 Linux
FFmpeg开发笔记(四十三)使用SRS开启SRT协议的视频直播服务
《FFmpeg开发实战》书中介绍了轻量级流媒体服务器MediaMTX,适合测试但不适用于生产环境。SRS是一款国产开源服务器,支持RTMP、SRT等协议,适合生产使用。要启用SRS的SRT推流,需配置`srt.conf`,开启SRT服务并配置端口。在确保FFmpeg集成libsrt后,拉流则使用类似但带有`m=request`的地址。在Windows上,同样需要集成libsrt的FFmpeg来使用ffplay拉流。SRS的日志确认了推拉流的成功。书中提供更深入的FFmpeg开发知识。
91 2
FFmpeg开发笔记(四十三)使用SRS开启SRT协议的视频直播服务
|
1月前
|
监控 开发工具 数据安全/隐私保护
Windows平台如何实现多路RTSP|RTMP流合成后录像或转发RTMP服务
本文介绍了在Windows平台上实现多路RTSP/RTMP视频流的合并技术。主要应用场景包括驾考、全景摄像头以及多路会议录制等。技术实现上,文章详细展示了如何使用特定的SDK来解码并回调YUV或RGB数据,再将这些数据按照图层形式进行合成。示例代码中给出了初始化参数、设置视频帧回调函数、以及如何配置不同图层的具体步骤。最终,合成后的视频可以推送到RTMP服务器、注入到本地RTSP服务,或是直接录制为MP4文件。此外,还提供了添加实时文字水印的方法,并展示了四路视频流合成后的“四宫格”效果。
|
2月前
|
编解码
FFmpeg开发笔记(三十七)分析SRS对HLS协议里TS包的插帧操作
《FFmpeg开发实战》书中讲解了音视频封装格式,重点介绍了TS,因其固定长度和独立解码特性,常用于HLS协议。HLS通过m3u8文件指示客户端播放TS分片。SRS服务器在转换MP4至TS时,会在每个TS包头添加SPS和PPS帧,保证解码完整性。这一过程在SrsIngestHlsOutput::on_ts_video函数中体现,调用write_h264_sps_pps和write_h264_ipb_frame完成。详细实现涉及SrsRawH264Stream::mux_sequence_header函数,遵循ISO标准写入SPS和PPS NAL单元。
60 0
FFmpeg开发笔记(三十七)分析SRS对HLS协议里TS包的插帧操作
|
3月前
|
数据安全/隐私保护 索引 Python
详尽分享视频相关的hls协议、VLC播放器、m3u文件的播放
详尽分享视频相关的hls协议、VLC播放器、m3u文件的播放
72 0
|
4月前
|
C# 数据安全/隐私保护 开发者
Windows平台RTMP推送|轻量级RTSP服务录像模块如何支持中文路径?
Windows平台RTMP推送|轻量级RTSP服务录像模块如何支持中文路径?
|
9月前
|
计算机视觉 流计算
Mac下HLS流视频分析与实践
Mac下HLS流视频分析与实践
74 1
|
vr&ar 开发工具 图形学
Windows平台Unity3d下如何同时播放多路RTSP或RTMP流
好多开发者在做AR、VR或者教育类产品时,苦于如何在windows平台构建一个稳定且低延迟的RTSP或者RTMP播放器,如果基于Unity3d完全重新开发一个播放器,代价大、而且周期长,不适合快速出产品,我们认为当前最好的方式就是集成现有Native平台上成熟稳定播放器,回调rgb/yuv数据到上层,上层做绘制即可。
129 1
|
Windows 内存技术
实战--虚拟机用ffmpeg采集音频设备,并用rtmp推流
实战--虚拟机用ffmpeg采集音频设备,并用rtmp推流
183 0
|
测试技术
如何使用AMR M分析rtp流中的amr语音
笔者分享最近找到一款amr工具amr master。该工具结合wireshark可以网卡包中的amr语音流转出.amr文件,采用vlc player可以进行播放。
如何使用AMR M分析rtp流中的amr语音