精华内容
下载资源
问答
  • rtsp播放
    2020-07-24 14:44:58

    github地址:https://github.com/zxrmmxt/SampleIjkplayerRtspPlay

    使用ijkplayer库,功能单一,只有rtsp播放功能,对播放延迟做了优化

    参考的文章:https://blog.csdn.net/u011686167/article/details/85256101

    github地址:https://github.com/xufuji456/FFmpegAndroid

    更多相关内容
  • android ffmpeg rtsp播放

    2018-12-27 15:06:11
    android 移值ffmpeg源码,实现了ffmpeg实时播放rtsp等文件
  • rtsp demo在HI3516A上成功运行
  • win32 vs2010 vs2013 rtsp播放器,能播放rtsp标准的视频流,多分屏,可暂停等。
  • 利用C#开发 onvif客户端以及rtsp开源的播放库,可实时播放rtsp图像,延时小
  • Android vlc rtsp播放.zip

    2020-04-14 12:12:56
    Android rtsp播放,使用vlc库,网上找测试的地址可以播放。 。
  • rtsp在线播放,websocket

    2020-01-14 17:38:57
    rtsp在线播放,websocket
  • 可以显示进度条、和播放当前时间和总时间。以及拖动进度条实现快进快退和点击暂停播放的效果。 已测试好用, 视频地址可能过期,换一个视频地址就可以。
  • 现在rtsp视频流是前端页面的技术难题,使用该插件可以实现网页实时流显示
  • RTSP到WebRTC 后端kurento-media-server实现rtsp流转webRtc播放
  • html5播放rtsp视频流.zip

    2020-05-27 13:07:53
    html5播放rtsp,需要简单的搭建node.js和ffmpeg环境,直接运行index.js并修改html网页中的url即可
  • golang rtsp 转码到web 无插件播放
  • 本项目基于vlc源码实现rtsp播放视频。 修改了一些代码。 可以显示进度条、和播放当前时间和总时间。以及拖动进度条实现快进快退和点击暂停播放的效果。.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,...
  • android 端 ijkplay_rtsp demo支持rtsp 播放,降低播放延迟 编译日期2018-08-25
  • springboot+websocket+ ffmpeg 实现web无插件多路视频实时播放rtsp
  • rtsp播放h265(hevc)

    千次阅读 2018-07-25 18:59:59
    rtsp来说,要播放h265只要正确解析sdp和rtp包即可,这里分享下h265 sdp&rtp相关知识点,希望有用. 1.H265 Nal Unit Header 简单介绍: H264的Nal Unit头是一个字节,265变成两个字节: F: 1 bit. ...

       对rtsp来说,要播放h265只要正确解析sdp和rtp包即可,这里分享下h265 sdp&rtp相关知识点,希望有用.

       1. H265 Nal Unit Header 简单介绍:

        H264的Nal Unit头是一个字节,265变成两个字节:

         

       
       F: 1 bit. forbidden_zero_bit.  265要求是0,是1的话指示语法违规等.

       Type: 6 bits. Nal类型.  vps是32, sps是33, pps是34, 前缀sei是39. IDR是19和20.

       LayerId: 6 bits. nuh_layer_id. 现在是0,将来可能扩展用.

       TID: 3 bits. nuh_temporal_id_plus1. TemporalId 是TID-1.

       2. SDP 参数介绍:

       2.1 IETF 分配给h265的媒体子类型如下:
       Type name:     video
       Subtype name:  H265
       可选参数: 
          profile-space, tier-flag, profile-id, profile-compatibility-indicator, interop-constraints,level-id,
          sprop-sub-layer-id, recv-sub-layer-id, max-recv-level-id, tx-mode, sprop-vps, sprop-sps, sprop-pps等等, 具体请参考相关
         文档,建议解析sprop-vps, sprop-sps, sprop-pps.
         
        2.2 SDP 举例:
        m=video 0 RTP/AVP 96
        a=rtpmap:96 H265/90000
    a=fmtp:96 profile-space=0;profile-id=0;tier-flag=0;level-id=0;interop-constraints=000000000000;sprop-vps=QAEMAf//AIAAAAMAAAMAAAMAAAMAALUCQA==;sprop-sps=QgEBAIAAAAMAAAMAAAMAAAMAAKACgIAtH+W1kkbQzkkktySqSfKSyA==;sprop-pps=RAHBpVgeSA==
        注意编码名称必须是:H265, Clock rate必须是90000.

       3. RTP 打包格式.

       实际中其实就用到两种格式,一种是一个nal单元打包到一个rtp包中。一种是nal单元比较大,分片打包在多个rtp中.

       3.1 单个Nal单元打包:

      

           PayloadHdr 把 NAL单元头填入就好.

         3.2 Nal单元分片打包:

       

          PayloadHdr还是拷贝NAL单元头,但是要把Type换成49.  FU header 就一个字节,格式如下:

          +---------------+
          |0|1|2|3|4|5|6|7|
         +-+-+-+-+-+-+-+-+
          |S|E|  FuType   |
         +---------------+

         S:为1表示第一个分片。 E:为1表示表示最后一个分片。FuType就是实际的Nal type类型。

         4. 小结:

             h265和h264有很多相似之处,都有sps和pps,用00 00 00 01进行nal 单元分隔. 如果想测试h265 rtsp播放效果,可以从github下载播放器 测试h265播放。 更多问题欢迎交流: 294891451   499687479.

    展开全文
  • 在VUE中以低延迟播放RTSP视频 构建设置 通过本指南在本地主机中设置h5stream # install dependencies npm install # serve with hot reload at localhost:6080 npm run dev # build for production with ...
  • android rtsp播放DEMO

    2014-11-20 15:31:10
    android rtsp播放DEMO 只需改下RTSP地址就可以播放
  • 支持最新浏览器内核,实现了用RTSP协议接入已有流媒体平台或摄像机的视频,通过转码后用WebRTC进行播放,只要支持WebRTC的浏览器或移动端都可以使用。用WebRTC播放监控视频可以处理高版本浏览器不支持插件的情况,且...
  • 新闻综合HD,rtsp://124.75.34.37/PLTV/88888888/224/3221226233/10000100000000060000000000813435_0.smil东方卫视HD,rtsp://124.75.34.37/PLTV/88888888/224/3221226112/00000100000000060000000000037556_0.smil...

    新闻综合HD,rtsp://124.75.34.37/PLTV/88888888/224/3221226233/10000100000000060000000000813435_0.smil

    东方卫视HD,rtsp://124.75.34.37/PLTV/88888888/224/3221226112/00000100000000060000000000037556_0.smil

    电视剧频道HD,rtsp://124.75.34.37/PLTV/88888888/224/3221226220/10000100000000060000000000522062_0.smil

    第一财经HD,rtsp://124.75.34.37/PLTV/88888888/224/3221226231/10000100000000060000000000813433_0.smil

    纪实频道HD,rtsp://124.75.34.37/PLTV/88888888/224/3221226230/10000100000000060000000000646848_0.smil

    娱乐频道HD,rtsp://124.75.34.37/PLTV/88888888/224/3221226219/10000100000000060000000000522063_0.smil

    五星体育HD,rtsp://124.75.34.37/PLTV/88888888/224/3221226234/10000100000000060000000000813434_0.smil

    Knews24,rtsp://124.75.34.37/PLTV/88888888/224/3221226183/00000100000000060000000000087278_2.smil

    教育频道,rtsp://124.75.34.37/PLTV/88888888/224/3221226088/00000100000000060000000000007667_0.smil

    北京卫视HD,rtsp://124.75.34.37/PLTV/88888888/224/3221226087/00000100000000060000000000007666_0.smil

    广东卫视HD,rtsp://124.75.34.37/PLTV/88888888/224/3221226083/00000100000000060000000000005868_0.smil

    江苏卫视HD,rtsp://124.75.34.37/PLTV/88888888/224/3221226110/00000100000000060000000000037546_0.smil

    浙江卫视HD,rtsp://124.75.34.37/PLTV/88888888/224/3221226111/00000100000000060000000000037315_0.smil

    湖南卫视HD,rtsp://124.75.34.37/PLTV/88888888/224/3221226086/00000100000000060000000000005881_0.smil

    黑龙江卫视HD,rtsp://124.75.34.37/PLTV/88888888/224/3221226085/00000100000000060000000000005880_0.smil

    深圳卫视HD,rtsp://124.75.34.37/PLTV/88888888/224/3221226084/00000100000000060000000000005879_0.smil

    劲爆体育HD,rtsp://124.75.34.37/PLTV/88888888/224/3221226104/00000100000000060000000000010162_0.smil

    CCTV-1,rtsp://124.75.34.37/PLTV/88888888/224/3221226079/00000100000000060000000000000305_0.smil

    CCTV-2,rtsp://124.75.34.37/PLTV/88888888/224/3221226078/00000100000000060000000000000321_0.smil

    CCTV-3,rtsp://124.75.34.37/PLTV/88888888/224/3221226109/00000100000000060000000000022679_0.smil

    CCTV-4,rtsp://124.75.34.37/PLTV/88888888/224/3221226082/00000100000000060000000000000558_0.smil

    CCTV-5,rtsp://124.75.34.37/PLTV/88888888/224/3221226105/00000100000000060000000000022370_0.smil

    CCTV-6,rtsp://124.75.34.37/PLTV/88888888/224/3221226106/00000100000000060000000000022371_0.smil

    CCTV-7,rtsp://124.75.34.37/PLTV/88888888/224/3221226155/00000100000000060000000000087195_0.smil

    CCTV-10,rtsp://124.75.34.37/PLTV/88888888/224/3221226157/00000100000000060000000000087197_0.smil

    CCTV-11,rtsp://124.75.34.37/PLTV/88888888/224/3221226166/00000100000000060000000000087198_0.smil

    CCTV-12,rtsp://124.75.34.37/PLTV/88888888/224/3221226159/00000100000000060000000000087199_0.smil

    CCTV-少儿,rtsp://124.75.34.37/PLTV/88888888/224/3221226161/00000100000000060000000000087201_0.smil

    CCTV-新闻,rtsp://124.75.34.37/PLTV/88888888/224/3221226168/00000100000000060000000000087200_0.smil

    CCTV-音乐,rtsp://124.75.34.37/PLTV/88888888/224/3221226170/00000100000000060000000000087202_0.smil

    安徽卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226126/00000100000000060000000000087158_0.smil

    北京卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226145/00000100000000060000000000087185_0.smil

    兵团卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226189/00000100000000060000000000152297_0.smil

    东南卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226121/00000100000000060000000000087159_0.smil

    都市剧场,rtsp://124.75.34.37/PLTV/88888888/224/3221226163/00000100000000060000000000087203_0.smil

    法治天地,rtsp://124.75.34.37/PLTV/88888888/224/3221226162/00000100000000060000000000087194_0.smil

    甘肃卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226131/00000100000000060000000000087169_0.smil

    广东卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226138/00000100000000060000000000087170_0.smil

    广西卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226158/00000100000000060000000000087190_0.smil

    贵州卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226144/00000100000000060000000000087176_0.smil

    哈哈少儿,rtsp://124.75.34.37/PLTV/88888888/224/3221226096/00000100000000060000000000007695_0.smil

    好享购物,rtsp://124.75.34.37/PLTV/88888888/224/3221226260/10000100000000060000000001335174_0.smil

    河北卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226140/00000100000000060000000000087172_0.smil

    河南卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226124/00000100000000060000000000087104_0.smil

    黑龙江卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226133/00000100000000060000000000087171_0.smil

    湖北卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226142/00000100000000060000000000087174_0.smil

    欢笑剧场,rtsp://124.75.34.37/PLTV/88888888/224/3221226146/00000100000000060000000000087178_0.smil

    环球购物,rtsp://124.75.34.37/PLTV/88888888/224/3221226237/10000100000000060000000000838200_0.smil

    吉林卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226125/00000100000000060000000000087163_0.smil

    江苏卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226147/00000100000000060000000000087187_0.smil

    金鹰卡通,rtsp://124.75.34.37/PLTV/88888888/224/3221226229/10000100000000060000000000734085_0.smil

    劲爆体育,rtsp://124.75.34.37/PLTV/88888888/224/3221226148/00000100000000060000000000087180_0.smil

    辽宁卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226153/00000100000000060000000000087193_0.smil

    旅游卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226149/00000100000000060000000000087189_0.smil

    内蒙古卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226135/00000100000000060000000000087173_0.smil

    宁夏卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226152/00000100000000060000000000087184_0.smil

    青海卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226127/00000100000000060000000000087165_0.smil

    全纪实,rtsp://124.75.34.37/PLTV/88888888/224/3221226141/00000100000000060000000000087181_0.smil

    山东卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226160/00000100000000060000000000087192_0.smil

    山西卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226132/00000100000000060000000000087164_0.smil

    陕西卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226129/00000100000000060000000000087167_0.smil

    深圳卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226204/00000100000000060000000000152298_0.smil

    生活时尚,rtsp://124.75.34.37/PLTV/88888888/224/3221226139/00000100000000060000000000087179_0.smil

    时尚购物,rtsp://124.75.34.37/PLTV/88888888/224/3221226273/10000100000000060000000001533614_0.smil

    四川卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226151/00000100000000060000000000087191_0.smil

    体育频道,rtsp://124.75.34.37/PLTV/88888888/224/3221226107/00000100000000060000000000022372_0.smil

    天津卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226123/00000100000000060000000000087161_0.smil

    外语频道,rtsp://124.75.34.37/PLTV/88888888/224/3221226097/00000100000000060000000000007696_0.smil

    西藏卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226134/00000100000000060000000000087166_0.smil

    新疆卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226187/00000100000000060000000000152294_0.smil

    炫动卡通,rtsp://124.75.34.37/PLTV/88888888/224/3221226077/00000100000000060000000000000293_0.smil

    央广购物,rtsp://124.75.34.37/PLTV/88888888/224/3221226228/10000100000000060000000000646845_0.smil

    艺术人文,rtsp://124.75.34.37/PLTV/88888888/224/3221226092/00000100000000060000000000007691_0.smil

    云南卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226136/00000100000000060000000000087168_0.smil

    浙江卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226156/00000100000000060000000000087188_0.smil

    重庆卫视,rtsp://124.75.34.37/PLTV/88888888/224/3221226137/00000100000000060000000000087175_0.smil

    展开全文
  • html 播放rtsp

    2017-02-18 17:53:49
    这是一个通过html播放rtsp流的文件,可以在IE浏览器和 google4.5以下版本的浏览器运行。 主要内容:1.可以设置vlc的视频的缓冲时间, 2.可以设置取RTSP/TCP流
  • 技术背景 无论是Windows平台还是Linux,多路播放诉求非常普遍,比如针对智慧工地、展馆、教育等宏观场景下的摄像头展示,关于RTSP或RTMP直播播放器...目前大牛直播SDK的RTSP播放延迟控制在几百毫秒,VLC在几秒,这个

    技术背景

    无论是Windows平台还是Linux,多路播放诉求非常普遍,比如针对智慧工地、展馆、教育等宏观场景下的摄像头展示,关于RTSP或RTMP直播播放器开发需要注意的点,可参考之前博客,总的来说有以下一些点:

    1. 低延迟:大多数RTSP的播放都面向直播场景,所以,如果延迟过大,比如监控行业,小偷都走了,客户端才看到,或者别人已经按过门铃几秒,主人才看到图像,严重影响体验,所以,低延迟是衡量一个好的RTSP播放器非常重要的指标,目前大牛直播SDK的RTSP播放延迟控制在几百毫秒,VLC在几秒,这个延迟,是长时间的低延迟,比如运行1天、一周、一个月甚至更久;

    2. 音视频同步或跳转:有些开发者为了追求低延迟体验,甚至不做音视频同步,拿到audio video直接播放,导致a/v不同步,还有就是时间戳乱跳;

    3. 支持多实例:一个好的播放器,需要支持同时播放多路音视频数据,比如4-8-9-16-32窗口;

    4. 支持buffer time设置:在一些有网络抖动的场景,播放器需要支持精准的buffer time设置,一般来说,以毫秒计;

    5. H.265的播放和录制:除了H.264,还需要支持H.265,目前市面上的RTSP H.265摄像头越来越多,支持H.265的RTSP播放器迫在眉睫,此外,单纯的播放H.265还不够,还需要可以能把H.265的数据能录制下来;

    6. TCP/UDP模式切换:考虑到好多服务器仅支持TCP或UDP模式,一个好的RTSP播放器需要支持TCP/UDP模式自动切换;

    7. 静音支持:比如,多窗口播放RTSP流,如果每个audio都播放出来,体验非常不好,所以实时静音功能非常必要;

    8. 视频view旋转:好多摄像头由于安装限制,导致图像倒置,所以一个好的RTSP播放器应该支持如视频view实时旋转(0° 90° 180° 270°)、水平反转、垂直反转;

    9. 支持解码后audio/video数据输出(可选):大牛直播SDK接触到好多开发者,希望能在播放的同时,获取到YUV或RGB数据,进行人脸匹配等算法分析,所以音视频回调可选;

    10. 快照:感兴趣或重要的画面,实时截取下来非常必要;

    11. 网络抖动处理(如断网重连):基本功能,不再赘述;

    12. 跨平台:一个好的播放器,跨平台(Windows/Android/iOS)很有必要,起码为了后续扩展性考虑,开发的时候,有这方面的考虑,目前大牛直播SDK的RTSP播放器,完美支持以上平台;

    13. 长期运行稳定性:提到稳定性,好多开发者不以为然,实际上,一个好的产品,稳定是最基本的前提,不容忽视!
    14. 可以录像:播放的过程中,随时录制下来感兴趣的视频片断,存档或其他二次处理;

    15. log信息记录:整体流程机制实时反馈,不多打log,但是不能一些重要的log,如播放过程中出错等;

    16. download速度实时反馈:可以看到实时下载速度反馈,以此来监听网络状态;

    17. 异常状态处理:如播放的过程中,断网、网络抖动、来电话、切后台后返回等各种场景的处理。

    代码实现

    本文以大牛直播SDK(官方)的Linux平台为例,介绍下RTMP或RTSP流多路播放集成。

    int main(int argc, char *argv[])
    {
    	XInitThreads(); // X支持多线程, 必须调用
    
    	NT_SDKLogInit();
    
    	// SDK初始化
    	SmartPlayerSDKAPI player_api;
    	if (!NT_PlayerSDKInit(player_api))
    	{
    		fprintf(stderr, "SDK init failed.\n");
    		return 0;
    	}
    
    	auto display = XOpenDisplay(nullptr);
    	if (!display)
    	{
    		fprintf(stderr, "Cannot connect to X server\n");
    		player_api.UnInit();
    		return 0;
    	}
    
    	auto screen = DefaultScreen(display);
    	auto root = XRootWindow(display, screen);
    
    	XWindowAttributes root_win_att;
    	if (!XGetWindowAttributes(display, root, &root_win_att))
    	{
    		fprintf(stderr, "Get Root window attri failed\n");
    		player_api.UnInit();
    		XCloseDisplay(display);
    		return 0;
    	}
    
    	if (root_win_att.width < 100 || root_win_att.height < 100)
    	{
    		fprintf(stderr, "Root window size error.\n");
    		player_api.UnInit();
    		XCloseDisplay(display);
    		return 0;
    	}
    
    	fprintf(stdout, "Root Window Size:%d*%d\n", root_win_att.width, root_win_att.height);
    
    	int main_w = root_win_att.width / 2, main_h = root_win_att.height/2;
    
    	auto black_pixel = BlackPixel(display, screen);
    	auto white_pixel = WhitePixel(display, screen);
    
    	auto main_wid = XCreateSimpleWindow(display, root, 0, 0, main_w, main_h, 0, white_pixel, black_pixel);
    	if (!main_wid)
    	{
    		player_api.UnInit();
    		XCloseDisplay(display);
    		fprintf(stderr, "Cannot create main windows\n");
    		return 0;
    	}
    
    	XSelectInput(display, main_wid, StructureNotifyMask | KeyPressMask);
    
    	XMapWindow(display, main_wid);
    	XStoreName(display, main_wid, win_base_title);
    
    	std::vector<std::shared_ptr<NT_PlayerSDKWrapper> > players;
    
    	for (auto url: players_url_)
    	{
    		auto i = std::make_shared<NT_PlayerSDKWrapper>(&player_api);
    		i->SetDisplay(display);
    		i->SetScreen(screen);
    		i->SetURL(url);
    		players.push_back(i);
    
    		if ( players.size() > 3 )
    			break;
    	}
    
    	auto border_w = 2;
    
    	std::vector<NT_LayoutRect> layout_rects;
    	SubWindowsLayout(main_w, main_h, border_w, static_cast<int>(players.size()), layout_rects);
    
    	for (auto i = 0; i < static_cast<int>(players.size()); ++i)
    	{
    		assert(players[i]);
    		players[i]->SetWindow(CreateSubWindow(display, screen, main_wid, layout_rects[i], border_w));
    	}
    
    	for (const auto& i : players)
    	{
    		assert(i);
    		if (i->GetWindow())
    			XMapWindow(display, i->GetWindow());
    	}
    
    	for (auto i = 0; i < static_cast<int>(players.size()); ++i)
    	{
    		assert(players[i]);
    		// 第一路不静音, 其他全部静音
    		players[i]->Start(0, i!=0, 1, false);
    		//players[i]->Start(0, false, 1, false);
    	}
    
    	while (true)
    	{
    		while (MY_X11_Pending(display, 10))
    		{
    			XEvent xev;
    			memset(&xev, 0, sizeof(xev));
    			XNextEvent(display, &xev);
    
    			if (xev.type == ConfigureNotify)
    			{
    				if (xev.xconfigure.window == main_wid)
    				{
    					if (xev.xconfigure.width != main_w || xev.xconfigure.height != main_h)
    					{
    						main_w = xev.xconfigure.width;
    						main_h = xev.xconfigure.height;
    
    						SubWindowsLayout(main_w, main_h, border_w, static_cast<int>(players.size()), layout_rects);
    
    						for (auto i = 0; i < static_cast<int>(players.size()); ++i)
    						{
    							if (players[i]->GetWindow())
    							{
    								XMoveResizeWindow(display, players[i]->GetWindow(), layout_rects[i].x_, layout_rects[i].y_, layout_rects[i].w_, layout_rects[i].h_);
    							}
    						}
    					}
    				}
    				else
    				{
    					for (const auto& i: players)
    					{
    						assert(i);
    						if (i->GetWindow() && i->GetWindow() == xev.xconfigure.window)
    						{
    							i->OnWindowSize(xev.xconfigure.width, xev.xconfigure.height);
    						}
    					}
    				}
    			}
    			else if (xev.type == KeyPress)
    			{
    				if (xev.xkey.keycode == XKeysymToKeycode(display, XK_Escape))
    				{
    					fprintf(stdout, "ESC Key Press\n");
    
    					for (const auto& i : players)
    					{
    						i->Stop();
    
    						if (i->GetWindow())
    						{
    							XDestroyWindow(display, i->GetWindow());
    							i->SetWindow(None);
    						}
    					}
    
    					players.clear();
    					
    					XDestroyWindow(display, main_wid);
    					XCloseDisplay(display);
    
    					player_api.UnInit();
    
    					fprintf(stdout, "Close Players....\n");
    					return 0;
    				}
    			}
    		}
    	}
    }

    开始播放封装

    bool NT_PlayerSDKWrapper::Start(int buffer, bool is_mute, int render_scale_mode, bool is_only_dec_key_frame)
    {
    	if (is_playing_)
    		return false;
    
    	if (url_.empty())
    		return false;
    
    	if (!OpenHandle(url_, buffer))
    		return false;
    
    	assert(handle_ && handle_->Handle());
    
    	// 音频参数
    	player_api_->SetMute(handle_->Handle(), is_mute ? 1 : 0);
    	player_api_->SetIsOutputAudioDevice(handle_->Handle(), 1);
    	player_api_->SetAudioOutputLayer(handle_->Handle(), 0); // 使用pluse 或者 alsa播放, 两个可以选择一个
    
    	// 视频参数
    	player_api_->SetVideoSizeCallBack(handle_->Handle(), this, &NT_Player_SDK_WRAPPER_OnVideoSizeHandle);
    	player_api_->SetXDisplay(handle_->Handle(), display_);
    	player_api_->SetXScreenNumber(handle_->Handle(),screen_);
    	player_api_->SetRenderXWindow(handle_->Handle(), window_);
    	player_api_->SetRenderScaleMode(handle_->Handle(), render_scale_mode);
    	player_api_->SetRenderTextureScaleFilterMode(handle_->Handle(), 3);
    
    	player_api_->SetOnlyDecodeVideoKeyFrame(handle_->Handle(), is_only_dec_key_frame ? 1 : 0);
    
    	auto ret = player_api_->StartPlay(handle_->Handle());
    	if (NT_ERC_OK != ret)
    	{
    		ResetHandle();
    		return false;
    	}
    
    	is_playing_ = true;
    
    	return true;
    }
    

    停止播放

    void NT_PlayerSDKWrapper::Stop()
    {
    	if (!is_playing_)
    		return;
    
    	assert(handle_);
    	player_api_->StopPlay(handle_->Handle());
    
    	video_width_ = 0;
    	video_height_ = 0;
    
    	ResetHandle();
    
    	is_playing_ = false;
    }
    

    视频宽高回调

    extern "C" NT_VOID NT_CALLBACK NT_Player_SDK_WRAPPER_OnVideoSizeHandle(NT_HANDLE handle, NT_PVOID user_data,
    	NT_INT32 width, NT_INT32 height)
    {
    	auto sdk_wrapper = reinterpret_cast<NT_PlayerSDKWrapper*>(user_data);
    	if (nullptr == sdk_wrapper)
    		return;
    
    	sdk_wrapper->VideoSizeHandle(handle, width, height);
    }

    实时快照

    extern "C" NT_VOID NT_CALLBACK NT_Player_SDK_WRAPPER_OnCaptureImageCallBack(NT_HANDLE handle, NT_PVOID user_data, NT_UINT32 result, NT_PCSTR file_name)
    {
    	auto sdk_wrapper = reinterpret_cast<NT_PlayerSDKWrapper*>(user_data);
    	if (nullptr == sdk_wrapper)
    		return;
    
    	sdk_wrapper->CaptureImageHandle(handle, result, file_name);
    }
    

    实时静音

    void NT_PlayerSDKWrapper::SetMute(bool is_mute)
    {
    	if (is_playing_ && handle_)
    	{
    		player_api_->SetMute(handle_->Handle(), is_mute?1:0);
    	}
    }

    设置绘制模式

    void NT_PlayerSDKWrapper::SetRenderScaleMode(int render_scale_mode)
    {
    	if (is_playing_ && handle_)
    	{
    		player_api_->SetRenderScaleMode(handle_->Handle(), render_scale_mode);
    	}
    }

    设置只解关键帧

    void NT_PlayerSDKWrapper::SetOnlyDecodeVideoKeyFrame(bool is_only_dec_key_frame)
    {
    	if (is_playing_ && handle_)
    	{
    		player_api_->SetOnlyDecodeVideoKeyFrame(handle_->Handle(), is_only_dec_key_frame ? 1 : 0);
    	}
    }

    Handler管理

    bool NT_PlayerSDKWrapper::OpenHandle(const std::string& url, int buffer)
    {
    	if (handle_)
    	{
    		if (handle_->IsOpened()
    			&& handle_->URL() == url)
    		{
    			return true;
    		}
    	}
    
    	ResetHandle();
    
    	auto handle = std::make_shared<NT_SDK_HandleWrapper>(player_api_);
    
    	if (!handle->Open(url, buffer))
    	{
    		return false;
    	}
    
    	handle_ = handle;
    	handle_->AddEventHandler(shared_from_this());
    
    	return true;
    }
    
    void NT_PlayerSDKWrapper::ResetHandle()
    {
    	if (handle_)
    	{
    		handle_->RemoveHandler(this);
    		handle_.reset();
    	}
    }
    

    录像等其他接口不再赘述,可Windows平台一致。

    总结

    多路RTMP或RTSP播放,涉及到性能和多路之间音视频同步、长时间播放稳定性等问题,Linux平台可参考的资料比较少,可选的方案比较少,感兴趣的可酌情参考。

    展开全文
  • 前端播放rtsp流附件

    2018-07-18 09:50:34
    使用这附件可以在前端播放流媒体(rtsp), 怎么使用在博客上有。
  • 流媒体rtsp播放实例

    热门讨论 2012-09-25 17:06:55
    流媒体有多种形式,例如rtmp,rtsp,mms等。但是rtmp是不支持高清的饿,只有rtsp才是支持播放高清视频的。。
  • vlc页面插件用来播放视频或直播流(rtsp, rtmp), 例子中包含常用的基本操作以及事件处理. 仅用了ie, mozilla的请自行尝试处理. 1. 使用前 确保安装了vlc(安装过程中不要勾掉activeX) 2. 使用ie打开
  • Android 使用videoview播放Rtsp视频 demo

    热门讨论 2016-11-04 11:11:16
    Android 使用videoview播放Rtsp视频 demo http://blog.csdn.net/huanzhongying/article/details/53032909
  • 功能: 1. 从摄像头拉rtsp裸h264流 2. 实时播放 3. 视频流实时转换为Mpeg-Ts 4. 改变码率,改变I帧间隔 5. 断线重连 6. ffmpeg版本4.3
  • VLC在C#的使用方法-RTSP播放文件

    万次阅读 2018-01-09 10:58:01
     IntPtr libvlc_media_new_path_rtsp(IntPtr libvlc_instance,  string  path)   {   IntPtr pMrl = IntPtr.Zero;    try    {    byte [] bytes = Encoding.UTF8.GetBytes...
  • hi3516a——RTSP播放H.264视频流(2)

    千次阅读 2019-04-28 09:58:23
    int RtspServer(RTSP_buffer *rtsp) { fd_set rset,wset; /*读写I/O描述集*/ struct timeval t; int size; static char buffer[RTSP_BUFFERSIZE+1]; /* +1 to control the final '\0'*/ //4096+1 int n; int ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,486
精华内容 9,394
关键字:

rtsp播放