Пример #1
0
        /// <summary>
        /// 处理RTSP视频I帧
        /// </summary>
        /// <param name="channelPtr"></param>
        /// <param name="frameInfoPtr"></param>
        /// <param name="pBuf"></param>
        /// <returns></returns>
        private int ProcessVideoFrame_I(IntPtr channelPtr, IntPtr frameInfoPtr, IntPtr pBuf)
        {
            //获取通道信息
            _channel_info channelInfo = (_channel_info)Marshal.PtrToStructure(channelPtr, typeof(_channel_info));

            //获取帧信息
            EasyTypes.EASY_FRAME_INFO frameInfo = (EasyTypes.EASY_FRAME_INFO)Marshal.PtrToStructure(frameInfoPtr, typeof(EasyTypes.EASY_FRAME_INFO));
            //RTMP初始化
            if (!this.rtmpClient.IsInit)
            {
                //启动 rtmp
                var retRtmp = this.StartRtmp();
                if (!retRtmp.Key)
                {
                    return(0);
                }
                EasyTypes.EASY_MEDIA_INFO_T mediaInfo = EasyTypes.Create_EASY_MEDIA_INFO_T();
                mediaInfo.u32VideoFps           = channelInfo.fMediainfo.u32VideoFps;
                mediaInfo.u32AudioSamplerate    = channelInfo.fMediainfo.u32AudioSamplerate;    /* 音频采样率 */
                mediaInfo.u32AudioChannel       = channelInfo.fMediainfo.u32AudioChannel;       /* 音频通道数 */
                mediaInfo.u32AudioBitsPerSample = channelInfo.fMediainfo.u32AudioBitsPerSample; /* 音频采样精度 */
                //媒体信息
                retRtmp = this.rtmpClient.InitMetadata(mediaInfo);
                if (!retRtmp.Key)
                {
                    //return;
                }
            }
            EasyTypes.EASY_AV_Frame avFrame = new EasyTypes.EASY_AV_Frame();
            avFrame.u32AVFrameFlag = EasyTypes.EASY_SDK_VIDEO_FRAME_FLAG;
            avFrame.u32AVFrameLen  = frameInfo.length;
            avFrame.pBuffer        = pBuf;
            avFrame.u32VFrameType  = EasyTypes.EASY_SDK_VIDEO_FRAME_I;
            //发送数据包
            var ret = this.rtmpClient.SendPacket(avFrame);

            if (!ret.Key)
            {
                //return;
            }
            return(0);
        }
Пример #2
0
 /// <summary>
 /// 创建RTMP推送的参数信息
 /// </summary>
 /// <param name="mediaInfo"> 流媒体信息 </param>
 /// <param name="bufferKSize"> 缓冲区大小 </param>
 /// <returns></returns>
 public KeyValuePair <bool, string> InitMetadata(EasyTypes.EASY_MEDIA_INFO_T mediaInfo, int bufferKSize = 1024)
 {
     if (!this.IsInit)
     {
         return(new KeyValuePair <bool, string>(false, "RTMP 未创建!"));
     }
     try
     {
         int ret = IsWindows ? EasyRTMP_InitMetadata_Win32(this.RtmpHandle, mediaInfo, bufferKSize) : EasyRTMP_InitMetadata_Linux(this.RtmpHandle, mediaInfo, bufferKSize);
         if (ret == 0)
         {
             return(new KeyValuePair <bool, string>(true, "RTMP 创建媒体成功!"));
         }
         else
         {
             return(new KeyValuePair <bool, string>(false, string.Format("RTMP 创建媒体失败,错误代码:{0}", ret)));
         }
     }
     catch (System.Exception e)
     {
         return(new KeyValuePair <bool, string>(false, e.Message));
     }
 }
Пример #3
0
 private extern static int EasyRTMP_InitMetadata_Linux(IntPtr handle, EasyTypes.EASY_MEDIA_INFO_T pstruStreamInfo, int bufferKSize);