Windows平台如何快速实现RTSP/RTMP直播播放

前段时间,我们在 https://blog.csdn.net/renhui1112/article/details/104143794 提到“RTSP播放器开发过程中需要考虑哪些关键因素”,本次主要介绍,如何调用SDK实现RTSP/RTMP播放能力。
本文以调用大牛直播SDK为例:

demo说明

  • SDK提供C++/C#两套接口,对外提供32/64位库,C++和C#接口一一对应,C#接口比C++接口增加前缀NT_PB_;
  • WIN-PlayerSDK-CPP-Demo:播放端SDK对应的C++接口的demo;
  • WIN-PlayerSDK-CSharp-Demo:播放端SDK对应的C#接口的demo; 播放端SDK支持Win7及以上系统;
  • 本demo基于VS2013开发;
  • 相关接口,可以到 Github 下载。

集成说明

C++头文件:

  • [类型定义]nt_type_define.h
  • [Log定义]smart_log.h
  • [Log定义]smart_log_define.h
  • [base code定义]nt_base_code_define.h
  • [player接口]smart_player_define.h
  • [player参数定义]smart_player_sdk.h

C#头文件:

  • [base code定义]nt_base_code_define.cs
  • [player接口]smart_player_define.cs
  • [player参数定义]smart_player_sdk.cs

到以下目录,拷贝相关lib库到自己系统目录:

  • 32位debug:WIN-PlayerSDK-CSharp-Demo\SmartPlayer\bin\Debug
  • 32位 release:WIN-PlayerSDK-CSharp-Demo\SmartPlayer\bin\Release
  • 64位debug:WIN-PlayerSDK-CSharp-Demo\SmartPlayer\bin\x64\Debug
  • 64位release:WIN-PlayerSDK-CSharp-Demo\SmartPlayer\bin\x64\Release

1 初始化

NT_SP_Init
如需配置log路径,请在NT_SP_Init之前,做如下设置(目录可自行指定):
// 设置日志路径(请确保目录存在)
//String log_path = “D:\playerlog”;
//NTSmartLog.NT_SL_SetPath(log_path);

2 Open生成播放实例

NT_SP_Open:每调用一次Open接口,对应一个播放实例。

3 设置回调事件

① NT_SP_SetEventCallBack:用于回调网络链接状态、buffer状态(开始、buffer比例、结束)、实时带宽等;
② NT_SP_SetVideoSizeCallBack:设置视频分辨率回调;
③ NT_SP_SetVideoFrameCallBack:设置YUV/RGB32数据回调,可用于对接第三方视频分析,或自行绘制等;
④ NT_SP_SetVideoFrameCallBackV2:设置YUV/RGB32数据回调,与NT_SP_SetVideoFrameCallBack接口的不同在于,吐出来的视频数据, 可以指定宽高;
⑤ NT_SP_SetRenderVideoFrameTimestampCallBack:设置绘制视频帧时,视频帧时间戳回调;
⑥ NT_SP_SetAudioPCMFrameCallBack:设置音频PCM帧回调, 吐PCM数据出来,目前每帧大小是10ms;
⑦ NT_SP_SetUserDataCallBack:设置用户数据回调,此接口需要和推送端SDK配套使用,用于返回推送端设定的实时用户数据(如时间戳、经纬度等各种扩展指令或信息);
⑧ NT_SP_SetSEIDataCallBack:设置视频SEI数据回调。

4 设置RTMP/RTSP播放Url

NT_SP_SetURL:支持rtsp/rtmp/本地FLV文件(全路径)

5 查看是否支持D3DRender

设置绘制窗口句柄(可选接口)
① NT_SP_IsSupportD3DRender
② NT_SP_SetRenderWindow
③ NT_SP_GDIDrawRGB32:使用GDI绘制RGB32数据

6 设置回调PCM

NT_SP_SetIsOutputAudioDevice:设置是否播放出声音,这个和静音接口是有区别的,这个接口的主要目的是为了用户设置了外部PCM回调接口后,又不想让SDK播放出声音时使用。

7 RTMP/RTSP播放参数设置

① NT_SP_SetBuffer:设置视频播放缓冲buffer大小,单位:毫秒;
② NT_SP_SetMute:播放过程中,实时静音、取消静音,可播放之前调用,亦或播放过程中实时调用;
③ NT_SP_SetRTSPTcpMode:设置RTSP TCP 模式, 1为TCP, 0为UDP, 此接口仅RTSP有效;
④ NT_SP_SetRtspTimeout:设置RTSP超时时间, timeout单位为秒,必须大于0;
NT_SP_SetRtspAutoSwitchTcpUdp:对于RTSP来说,有些可能支持rtp over udp方式,有些可能支持使用rtp over tcp方式. 为了方便使用,有些场景下可以开启自动尝试切换开关, 打开后如果udp无法播放,sdk会自动尝试tcp, 如果tcp方式播放不了,sdk会自动尝试udp, is_auto_switch_tcp_udp: 如果设置1的话, sdk将在tcp和udp之间尝试切换播放,如果设置为0,则不尝试切换;
⑤ NT_SP_SetFastStartup:设置秒开, 1为秒开, 0为不秒开,此接口用于如RTMP服务器缓存GOP时,酌情使用;
⑥ NT_SP_SetLowLatencyMode:设置低延时播放模式,默认是正常播放模式,mode: 1为低延时模式, 0为正常模式;
⑦ NT_SP_SetRotation:设置视频View旋转,顺时针旋转,degress: 设置0, 90, 180, 270度有效,其他值无效,注意:除了0度,其他角度播放会耗费更多CPU;
⑧ NT_SP_SetFlipVertical:设置视频View上下反转(垂直反转);
⑨ NT_SP_SetFlipHorizontal:设置视频View水平反转;
⑩ NT_SP_SetReportDownloadSpeed:设置下载速度上报, 默认不上报下载速度

  • is_report: 上报开关, 1: 表上报. 0: 表示不上报. 其他值无效.
  • report_interval: 上报时间间隔(上报频率),单位是秒,最小值是1秒1次. 如果小于1且设置了上报,将调用失败
  • 注意:如果设置上报的话,请设置SetEventCallBack, 然后在回调函数里面处理这个事件.
  • 上报事件是:NT_SP_E_EVENT_ID_DOWNLOAD_SPEED
    ⑪ NT_SP_GetDownloadSpeed:主动获取下载速度,speed: 返回下载速度,单位是Byte/s;
    ⑫ NT_SP_SetParam:万能接口, 设置参数, 大多数问题, 这些接口都能解决;
    ⑬ NT_SP_GetParam:万能接口, 得到参数, 大多数问题,这些接口都能解决;
    ⑭ NT_SP_SetKey:设置RTMP加密流的解密key,目前只用来解密rtmp加密流,需与大牛直播SDK RTMP推送端配套使用;
    ⑮ NT_SP_SetDecryptionIV:设置RTMP加密流的解密向量,目前只用来解密rtmp加密流;
    ⑯ NT_SP_SetSDKClientKey:设置授权Key,正式授权Key请联系官方。

8 检测是否支持硬解码

		/** 检查是否支持H264硬解码 * 如果支持的话返回NT_ERC_OK*/[DllImport(@"SmartPlayerSDK.dll")]public static extern UInt32 NT_SP_IsSupportH264HardwareDecoder();/** 检查是否支持H265硬解码* 如果支持的话返回NT_ERC_OK*/[DllImport(@"SmartPlayerSDK.dll")]public static extern UInt32 NT_SP_IsSupportH265HardwareDecoder();/** 设置H264硬解* is_hardware_decoder: 1:表示硬解, 0:表示不用硬解* reserve: 保留参数, 当前传0就好* 成功返回NT_ERC_OK*/[DllImport(@"SmartPlayerSDK.dll")]public static extern UInt32 NT_SP_SetH264HardwareDecoder(IntPtr handle, Int32 is_hardware_decoder, Int32 reserve);/** 设置H265硬解* is_hardware_decoder: 1:表示硬解, 0:表示不用硬解* reserve: 保留参数, 当前传0就好* 成功返回NT_ERC_OK*/[DllImport(@"SmartPlayerSDK.dll")]public static extern UInt32 NT_SP_SetH265HardwareDecoder(IntPtr handle, Int32 is_hardware_decoder, Int32 reserve);

9 RTMP/RTSP播放端-开始播放

NT_SP_StartPlay

10 绘制窗口大小改变

NT_SP_OnWindowSize
如播放窗口大小调整,需调用此接口。

11 RTMP/RTSP拉流端录像

① NT_SP_SetRecorderDirectory:设置录像目录
② NT_SP_SetRecorderFileMaxSize:设置单个文件最大大小
③ NT_SP_SetRecorderFileNameRuler:设置录像文件名生成规则
④ NT_SP_SetRecorderCallBack:设置录像回调接口
⑤ NT_SP_SetRecorderAudioTranscodeAAC:设置录像时音频转AAC编码的开关, aac比较通用,sdk增加其他音频编码(比如speex, pcmu, pcma等)转aac的功能
⑥ NT_SP_SetRecorderVideo:设置是否录视频,默认的话,如果视频源有视频就录,没有就没得录, 但有些场景下可能不想录制视频,只想录音频,所以增加个开关
⑦ NT_SP_SetRecorderAudio:设置是否录音频,默认的话,如果视频源有音频就录,没有就没得录, 但有些场景下可能不想录制音频,只想录视频,所以增加个开关
⑧ NT_SP_StartRecorder:启动录像
⑨ NT_SP_StopRecorder:停止录像

12 RTMP/RTSP拉流端快照(实时调用)

NT_SP_CaptureImage:捕获图片

13 RTMP/RTSP拉流端快速切换URL(实时调用)

NT_SP_SwitchURL:切换URL,其中:switch_pos: 切换到新url以后,设置的播放位置, 默认请填0, 这个只对设置播放位置的点播url有效, 直播url无效

14 用户数据回调

NT_SP_SetUserDataCallBack:设置用户数据回调,用于接收扩展SEI模块发送的用户数据信息

15 SEI数据回调

NT_SP_SetSEIDataCallBack:设置视频sei数据回调,用于接收SEI数据回调

16 设置视频画面填充模式

        /** 设置视频画面的填充模式,如填充整个绘制窗口、等比例填充绘制窗口,如不设置,默认填充整个绘制窗口* handle: 播放句柄* mode: 0: 填充整个绘制窗口; 1: 等比例填充绘制窗口, 默认值是0* 成功返回NT_ERC_OK*/[DllImport(@"SmartPlayerSDK.dll")]public static extern UInt32 NT_SP_SetRenderScaleMode(IntPtr handle, Int32 mode);

17 RTMP/RTSP播放端-停止播放

NT_SP_StopPlay

18 关闭播放实例

NT_SP_Close

19 Uninit

NT_SP_UnInit

20 RTMP/RTSP播放状态Event回调

/*事件ID*/public enum NT_SP_E_EVENT_ID : uint{NT_SP_E_EVENT_ID_BASE = NTBaseCodeDefine.NT_EVENT_ID_SMART_PLAYER_SDK,NT_SP_E_EVENT_ID_CONNECTING			= NT_SP_E_EVENT_ID_BASE | 0x2,	/*连接中*/NT_SP_E_EVENT_ID_CONNECTION_FAILED	= NT_SP_E_EVENT_ID_BASE | 0x3,	/*连接失败*/NT_SP_E_EVENT_ID_CONNECTED			= NT_SP_E_EVENT_ID_BASE | 0x4,	/*已连接*/NT_SP_E_EVENT_ID_DISCONNECTED		= NT_SP_E_EVENT_ID_BASE | 0x5,	/*断开连接*/NT_SP_E_EVENT_ID_NO_MEDIADATA_RECEIVED = NT_SP_E_EVENT_ID_BASE | 0x8,	/*收不到RTMP数据*/NT_SP_E_EVENT_ID_RTSP_STATUS_CODE   = NT_SP_E_EVENT_ID_BASE | 0xB,  /*rtsp status code上报, 目前只上报401, param1表示status code*/NT_SP_E_EVENT_ID_NEED_KEY           = NT_SP_E_EVENT_ID_BASE | 0xC,  /*需要输入解密key才能播放*/NT_SP_E_EVENT_ID_KEY_ERROR          = NT_SP_E_EVENT_ID_BASE | 0xD,  /*解密key不正确*//* 接下来请从0x81开始*/NT_SP_E_EVENT_ID_START_BUFFERING = NT_SP_E_EVENT_ID_BASE | 0x81, /*开始缓冲*/NT_SP_E_EVENT_ID_BUFFERING		 = NT_SP_E_EVENT_ID_BASE | 0x82, /*缓冲中, param1 表示百分比进度*/NT_SP_E_EVENT_ID_STOP_BUFFERING  = NT_SP_E_EVENT_ID_BASE | 0x83, /*停止缓冲*/NT_SP_E_EVENT_ID_DOWNLOAD_SPEED  = NT_SP_E_EVENT_ID_BASE | 0x91, /*下载速度, param1表示下载速度,单位是(Byte/s)*/NT_SP_E_EVENT_ID_PLAYBACK_REACH_EOS = NT_SP_E_EVENT_ID_BASE | 0xa1,     /*播放结束, 直播流没有这个事件,点播流才有*/NT_SP_E_EVENT_ID_RECORDER_REACH_EOS = NT_SP_E_EVENT_ID_BASE | 0xa2,     /*录像结束, 直播流没有这个事件, 点播流才有*/NT_SP_E_EVENT_ID_PULLSTREAM_REACH_EOS = NT_SP_E_EVENT_ID_BASE | 0xa3,   /*拉流结束, 直播流没有这个事件,点播流才有*/NT_SP_E_EVENT_ID_DURATION = NT_SP_E_EVENT_ID_BASE | 0xa8, /*视频时长,如果是直播,则不上报,如果是点播的话, 若能从视频源获取视频时长的话,则上报, param1表示视频时长,单位是毫秒(ms)*/}

21 RTMP/RTSP播放端音视频数据回调

 [StructLayoutAttribute(LayoutKind.Sequential)]public struct NT_SP_PullStreamVideoDataInfo{public Int32 is_key_frame_; /* 1:表示关键帧, 0:表示非关键帧 */public UInt64 timestamp_;	/* 解码时间戳, 单位是毫秒 */public Int32 width_;	/* 一般是0 */public Int32 height_; /* 一般也是0 */public IntPtr parameter_info_; /* 一般是NULL */public UInt32 parameter_info_size_; /* 一般是0 */public UInt64 presentation_timestamp_; /*显示时间戳, 这个值要大于或等于timestamp_, 单位是毫秒*/
}/**拉流吐音频数据时,一些相关的数据*/[StructLayoutAttribute(LayoutKind.Sequential)]public struct NT_SP_PullStreamAuidoDataInfo{public Int32 is_key_frame_; /* 1:表示关键帧, 0:表示非关键帧 */public UInt64 timestamp_;	/* 单位是毫秒 */public Int32 sample_rate_;	/* 一般是0 */public Int32 channel_; /* 一般是0 */public IntPtr parameter_info_; /* 如果是AAC的话,这个是有值的, 其他编码一般忽略 */public UInt32 parameter_info_size_; /*如果是AAC的话,这个是有值的, 其他编码一般忽略 */public UInt64 reserve_; /* 保留  */}

以上是基础的接口说明和调用流程,感兴趣的开发者可以参考下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/553128.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows平台RTSP播放器/RTMP播放器设计需要考虑的几个点

我们在实现Windows平台RTSP播放器或RTMP播放器的时候,需要考虑的点很多,比如多实例设计、多绘制模式兼容、软硬解码支持、快照、RTSP下TCP-UDP自动切换等,以下就其中几个方面,做个大概的探讨。 1. 视频绘制模式 我们在实现Windo…

网易邮箱大师如何定时发送 定时发送邮件方法步骤详解

网易邮箱大师是我们日常使用邮箱的最佳软件,不仅能批量登录邮件,还能定时发送邮件,可谓功能齐全,很多小伙伴不知道如何定时发送邮件,那么接下来小编说的这篇文章肯定会对你有帮助。 操作步骤如下: 1、打开…

Windows平台下如何实现Unity3D下的RTMP推送

好多开发者苦于很难在unity3d下实现RTMP直播推送,本次以大牛直播SDK(Github)的Windows平台RTMP推送模块(以推摄像头为例,如需推屏幕数据,设置相关参数即可)为例,介绍下unity3d的RTMP…

Android平台如何实现屏幕数据采集并推送至RTMP服务器

随着无纸化、智慧教室等场景的普及,好多企业或者开发者开始寻求更高效稳定低延迟的RTMP同屏方案,本文以大牛直播SDK(Github)的同屏demo(对应工程:SmartServicePublisherV2)为例,介绍下如何采集编码推送RTMP…

网易邮箱大师如何注册邮箱 注册邮箱方法步骤介绍

网易邮箱大师是款高效强大的全平台邮箱客户端,支持所有邮箱登录,功能强大,一个PC端就能登录多个邮箱,很多小伙伴不知道如何注册登录邮箱,那么就跟着小编一起来看看如何操作吧。 操作步骤如下: 1、打开网易…

D3D还是GDI? Windows平台播放RTSP或RTMP渲染模式比较

先说结论,Windows平台播放渲染这块,支持D3D的前提下,优先D3D,如果检测到不支持D3D,数据回调上来,GDI模式绘制。 相比GDI模式,D3D绘制更细腻,绘制效率更高,CPU占用低&…

Android投屏(屏幕共享)设计需要考虑的关键因素

许多开发者,在做智慧教室同屏、会议同屏之类的方案时,基于Andriod平台的采集,往往遇到各种各样的问题,以下就几个点,抛砖引玉: 1. 内网环境下,组播还是RTMP? 回答:这个…

微信公众号怎么给微店设置运费

微信小店想要设置运费,该怎么设置呢?今天我们就来看看使用微信公众号设置微店运费的教程。 1、在电脑登录你的微信公众号服务号,确保已经事先开通了微信小店功能 微信公众号怎么给微店设置运费? 2、点击左侧导航栏的微信小店,进去后点击…

RTSP/RTMP播放端录像不可忽视的几个设计要点

很多开发者提到,拉取的摄像机(一般RTSP流)或RTMP流,如果需要录制,需要考虑哪些因素,本文以大牛直播SDK的Windows平台拉流端录像为例(github),做个简单的介绍:…

海康摄像机rtsp地址格式(官方最新版)

★目前海康录像机、网络摄像机,网络球机的RTSP单播取流格式如下(车载录像机不支持RTSP取流): rtsp://用户名:密码IP:554/Streaming/Channels/101 →录像机示例: 取第1个通道的主码流预览 rtsp://admin:hik1234510.…

QQ邮箱怎么发送文件夹 怎样在QQ邮箱里发送压缩文件夹

有很多用户想要知道怎么样才能通过QQ邮箱来发送自己的一些文件压缩包,应该怎么操作呢?不要慌,现在小编就给大家分享一下,下面一起来学习操作步骤吧! 其实,无论何种邮箱都无法发送文件夹,都只能对文件进行操作。如果文…

时光手帐怎么修改作品 时光手帐修改作品封面方法

对于自己在时光手账Pro中的手账本封面是可以随时更改的。那么,怎么在时光手账Pro中更改自己手账封面?下面我使用苹果手机(安卓端操作方法一致)来分享一下具体的操作流程。 首先打开手机,点击进入时光手账Pro。 时光手帐怎么修改作品 时光手帐修改作品…

几款优秀的点播、RTSP/RTMP直播播放器介绍

1.ijkplayer 项目地址: https://github.com/Bilibili/ijkplayer 介绍:Ijkplayer 是Bilibili发布的基于 FFplay 的轻量级 Android/iOS 视频播放器。实现了跨平台功能,API 易于集成;编译配置可裁剪,方便控制安装包大小&…

Android平台RTMP推流或轻量级RTSP服务(摄像头或同屏)编码前数据接入类型总结

很多开发者在做Android平台RTMP推流或轻量级RTSP服务(摄像头或同屏)时,总感觉接口不够用,以大牛直播SDK为例 (Github) 我们来总结下,我们常规需要支持的编码前音视频数据有哪些类型: 1. Android摄像头前后…

作业帮口算批改怎么开 作业帮口算批改如何用

作业帮口算批改功能怎么用?作业帮最近全新改版的消息传的很火,新增了口算批改的功能,很吸引人。但是还有很多用户不是很清楚作业帮口算批改功能怎么用,下面是小编整理的关于作业帮口算批改功能怎么用的相关资讯,快来看看吧! 作业…

RTSP播放器或RTMP播放器常用的事件回调设计

很多开发者在开发RTSP或RTMP播放器的时候,不晓得哪些event回调事件是有意义的,针对此,我们以大牛直播SDK(github)的Android平台RTSP/RTMP直播播放端为例,简单介绍下常用的event id,总的来说&…

Windows平台RTMP多实例推送探讨

之前,我们博客 https://blog.csdn.net/renhui1112/article/details/105624392 提到,Android平台RTMP多实例推送的几种情况探讨,简单来说有以下三种情况: 多路编码,多个实例分别推送到不同的RTMP URL(如And…

Win7蓝屏代码0x000000001e怎么解决

蓝屏问题,是所有系统都会遇到的最普遍的电脑故障问题,电脑蓝屏是因为系统与硬件或软件不兼容冲突引起的,不同的提示代码表示了不同的蓝屏原因,那么Win7蓝屏代码0x000000001e怎么解决?为此问题困扰的用户,请来看看Win7…

开发个好的RTMP播放器到底难在哪里?RTMP播放器对标和考察指标

好多开发者提到,RTMP播放器,不知道有哪些对标和考察指标,以下大概聊聊我们的一点经验,感兴趣的,可以关注 github: 1. 低延迟:大多数RTMP的播放都面向直播场景,如果延迟过大&#xf…

Android平台RTMP/RTSP播放器开发系列之解码和绘制

本文主要抛砖引玉,粗略介绍下Android平台RTMP/RTSP播放器中解码和绘制相关的部分(Github)。 解码 提到解码,大家都知道软硬解,甚至一些公司觉得硬解码已经足够通用,慢慢抛弃软解了,如果考虑到设备匹配,软…