zoukankan      html  css  js  c++  java
  • RTSP客户端接收存储数据(live555库中的openRTSP实例)

    一、openRTSP编译运行

    a)windows下编译运行

    还是以mediaServer作为服务端,openRTSP作为客户端

    b)Linux下编译运行

    转自http://kuafu80.blog.163.com/blog/static/122647180201372654556863/

    1:  编译

       (1):  ./genMakefiles           linux
       (2):  make
     
    2: 服务器环境
        服务器端是一个支持RTSP server的H.264的摄像头;
     
    3: 运行 openRTSP
        ./openRTSP  -d  20   -f  20  -w 640  -h  480   -b  400000  "rtsp://192.168.2.239/id=0"
    或 ./openRTSP    -f  20  -w 640  -h  480   -b  400000  "rtsp://192.168.2.239/id=0"
    参数解释;  -d  20   --->程序运行时间,如果没有程序持续从服务器获取视频;
                       -f   20   ----> 帧率
                      -w  640  -h  480 -----> 帧分辨率
                      -b  400000  ---->码率
    4: 如果不修改playCommon.cpp的代码,openRTSP将获取的视频数据通过stdout直接打印到屏幕
     
    5: 如果是自己取裸码流,则可以调用SPS相关的函数,将H264的帧信息告诉解码器,否则无法解码
        unsigned int num=1;
        SPropRecord * sps = parseSPropParameterSets(subsession->fmtp_spropparametersets(),num);
        fileSink = H264VideoFileSink::createNew(*env, outFileName,
                                subsession->fmtp_spropparametersets(),
                                fileSinkBufferSize, oneFilePerFrame);
        struct timeval tv={0,0};
        unsigned char start_code[4] = {0x00, 0x00, 0x00, 0x01};
        fileSink-> addData(start_code, 4, tv);
        fileSink->addData(sps[0].sPropBytes,sps[0].sPropLength,tv);
        delete[] sps;
     
    6: 稍微修改代码让openRTSP只录视频,且保存到指定的文件
        streamURL = argv[1];
          // add by Andy_xi
         createReceivers = True;   // 保存视频
         outputAVIFile = False;   //因为是H264
         videoOnly = True;
         singleMedium = "video";   //只要视频
         //<------end
     
    7: 调试记录
        启动openRTSP后,一定的看到SDP信息中的SPS信息,否则解码器可能不能解码
        a=fmtp:106 profile-level-id=42001E;sprop-parameter-sets=Z0KAKNoB4AiXlQ==,aM48gA==;packetization-mode=0
     
    只要有这个信息,用file  命令看生成h264文件显示如下:
     
    new.h264: JVT NAL sequence, H.264 video, baseline @ L 40
     
     
  • 相关阅读:
    shell 数组遍历加引号和不加引号的区别?
    shell map数据结构的实现
    PyCharm 项目打开窗口设置为当前还是新开一个怎么办?
    python 模拟ssh 登录远程服务器
    python 字节码死磕
    docker相关内容
    Windows7安装 docker-compose的过程
    史上最简单的Docker入门教程
    MySQL触发器使用详解
    存储过程
  • 原文地址:https://www.cnblogs.com/dong1/p/5887342.html
Copyright © 2011-2022 走看看