流媒体开发:使用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 文件是否可以正常播放,画面是否是预期的屏幕共享画面。

目录
相关文章
全网首发:gstreamer如何接入RTSP流(IP摄像头)的代码范例
全网首发:gstreamer如何接入RTSP流(IP摄像头)的代码范例
734 0
|
监控 开发工具 C++
Windows平台RTMP/RTSP播放器如何实现实时音量调节
RTMP或RTSP直播播放音量调节,主要用于多实例(多窗口)播放场景下,比如同时播放4路RTMP或RTSP流,如果音频全部打开,几路audio同时打开,可能会影响用户体验,我们通用的做法是支持播放端实时静音,更细粒度的做法是可以实时调节每一路RTMP/RTSP流的音量。
258 0
|
5月前
|
Linux Android开发 iOS开发
Windows平台RTSP|RTMP播放器如何实现实时录像功能
Windows平台RTSP、RTMP播放器实时录像接口设计,实际上,除了Windows平台,我们Linux、Android、iOS平台也是一样的设计,单纯的录像模块,如果做的全面,也不是一两个接口可以搞定的
124 1
|
6月前
|
监控 开发工具 数据安全/隐私保护
Windows平台如何实现多路RTSP|RTMP流合成后录像或转发RTMP服务
本文介绍了在Windows平台上实现多路RTSP/RTMP视频流的合并技术。主要应用场景包括驾考、全景摄像头以及多路会议录制等。技术实现上,文章详细展示了如何使用特定的SDK来解码并回调YUV或RGB数据,再将这些数据按照图层形式进行合成。示例代码中给出了初始化参数、设置视频帧回调函数、以及如何配置不同图层的具体步骤。最终,合成后的视频可以推送到RTMP服务器、注入到本地RTSP服务,或是直接录制为MP4文件。此外,还提供了添加实时文字水印的方法,并展示了四路视频流合成后的“四宫格”效果。
155 0
|
9月前
|
编解码 API 开发工具
FFmpeg获取音视频流信息
FFmpeg获取音视频流信息
196 1
FFmpeg获取音视频流信息
|
9月前
|
C# 数据安全/隐私保护 开发者
Windows平台RTMP推送|轻量级RTSP服务录像模块如何支持中文路径?
Windows平台RTMP推送|轻量级RTSP服务录像模块如何支持中文路径?
|
计算机视觉 流计算
Mac下HLS流视频分析与实践
Mac下HLS流视频分析与实践
93 1
|
存储 编解码 缓存
海康摄像头开发笔记(一):连接防爆摄像头、配置摄像头网段、设置rtsp码流、播放rtsp流、获取rtsp流、调优rtsp流播放延迟以及录像存储
Hik防爆摄像头录像,因为防爆摄像头会有对应的APP软件,与普通的网络摄像头和球机不一样,默认认为它不可以通过web网页配置,所以弄了个来实测确认。经测试实际上也是可以通过web网页配置(与网络摄像头基本是一致的,在码流方面可能会有些不一样),然后提取rtsp流的,界面与球机无异,只是没有球机的云台控制功能,但是界面上也是有的。
海康摄像头开发笔记(一):连接防爆摄像头、配置摄像头网段、设置rtsp码流、播放rtsp流、获取rtsp流、调优rtsp流播放延迟以及录像存储
|
vr&ar 开发工具 图形学
Windows平台Unity3d下如何同时播放多路RTSP或RTMP流
好多开发者在做AR、VR或者教育类产品时,苦于如何在windows平台构建一个稳定且低延迟的RTSP或者RTMP播放器,如果基于Unity3d完全重新开发一个播放器,代价大、而且周期长,不适合快速出产品,我们认为当前最好的方式就是集成现有Native平台上成熟稳定播放器,回调rgb/yuv数据到上层,上层做绘制即可。
154 1
|
数据采集 编解码 图形学
Unity实现Camera和Audio数据的低延迟RTMP推送技术探讨
关于Unity实现RTMP直播推送技术方案,之前零散的写过几篇介绍,得到了好多开发者的关注。以Android平台为例,目前视频这块,我们demo实现的是Camera数据的采集,然后编码投递到底层,如果设备没有性能瓶颈,可达到高帧率(60帧)均匀的RTMP推送效果。
115 0