private void Btn_Play_Click(object sender, EventArgs e) { var isPlay = (sender as Button).Text == "播放"; if (isPlay) { int ret = -1; var streamURI = string.IsNullOrEmpty(StreamURI.Text) ? "rtsp://*****:*****@192.168.90.32:554/h264/ch1/main/av_stream" : StreamURI.Text; EASY_CHANNEL_SOURCE_TYPE_ENUM sourceType = GetSourceTypeByStreamURI(streamURI); bool overtcpType = tcpCheck.CheckState == CheckState.Checked; int queueSize = sourceType == EASY_CHANNEL_SOURCE_TYPE_ENUM.EASY_CHANNEL_SOURCE_TYPE_HLS ? 1024 * 1024 * 5 : 1024 * 1024 * 2; channelID = PlayerSDK.LibEasyPlayerPro_OpenStream(palyerHandle, sourceType, streamURI, MEDIA_TYPE.MEDIA_TYPE_VIDEO | MEDIA_TYPE.MEDIA_TYPE_AUDIO | MEDIA_TYPE.MEDIA_TYPE_EVENT, RealProCallBack, IntPtr.Zero, overTcp: overtcpType, queueSize: (uint)queueSize); ret = PlayerSDK.LibEasyPlayerPro_StartPlayStream(palyerHandle, channelID, this.playerPanel.Handle, renderFormat); //PlayerSDK.LibEasyPlayerPro_SetPlayFrameCache(palyerHandle, channelID, 6); if (ret == 0) { PlayerSDK.LibEasyPlayerPro_StartPlaySound(palyerHandle, channelID); this.Btn_Play.Text = "停止"; } } else { int ret = PlayerSDK.LibEasyPlayerPro_StopPlayStream(palyerHandle, channelID); if (ret == 0) { this.Btn_Play.Text = "播放"; channelID = -1; this.playerPanel.Refresh(); } } }
/// <summary> /// 打开一路码流,返回一个可用的通道 ID /// </summary> /// <param name="playerHandle">PLAYER_HANDLE句柄.</param> /// <param name="channelType">通道源类型.</param> /// <param name="streamURI">有效的源地址.</param> /// <param name="mediaType">媒体类型【媒体类型 MEDIA_TYPE_VIDEO | MEDIA_TYPE_AUDIO | MEDIA_TYPE_EVENT)】 暂保留.</param> /// <param name="callback">回调函数.</param> /// <param name="userPtr">用户自定义指针.</param> /// <param name="reconnection">是否重连【1表示无限次重连,0表示不重连,大于1表示指定次数重连(需小于1000)】默认1.</param> /// <param name="queueSize">缓冲队列大小, 需大于1024*512.默认1024 * 512 * 2</param> /// <param name="rtpOverTcp">true 为tcp,否则为udp.默认1</param> /// <param name="multiplex">true:复用源,即打开同一个url时,到前端的连接只有一个;false:不复用, 打开多少个url,就有多少个连接*默认true /// <returns>可用的通道 ID.</returns> public static int LibEasyPlayerPro_OpenStream(IntPtr playerHandle, EASY_CHANNEL_SOURCE_TYPE_ENUM channelType, string streamURI, MEDIA_TYPE mediaType, EasyPlayerProCallBack callback, IntPtr userPtr, uint reconnection = 1, uint queueSize = 1024 * 512 * 2, bool overTcp = true, bool multiplex = true) { int ret = LibEasyPlayerPro_OpenStream(playerHandle, channelType, streamURI, overTcp ? (byte)1 : (byte)0, mediaType, callback, userPtr, reconnection, 0, queueSize, multiplex ? (uint)1 : (uint)0); return(ret); }
private static extern int LibEasyPlayerPro_OpenStream(IntPtr playerHandle, EASY_CHANNEL_SOURCE_TYPE_ENUM channelType, string streamURI, byte rtpOverTcp, MEDIA_TYPE mediaType, EasyPlayerProCallBack callback, IntPtr userPtr, uint reconnection, uint heartbeatType, uint queueSize, uint multiplex);