从闭路电视摄像机直播

时间:2016-03-05 05:57:45

标签: ios objective-c rtsp live-streaming

我想点击按钮时从cctv相机流式传输。我已经非常努力地尝试了但是还没能解决它。

代码构建成功,但只显示一个黑屏 - 没有来自相机的流。

代码:

(IBAction)StreamFromCamera:(id)sender {

NSURL *url=[NSURL URLWithString:@"rtsp://192.168.1.100/user=admin&password=123&channel=6&stream=0.sdp?"];
   _player=[[MPMoviePlayerController alloc]initWithContentURL:url];
   _player.view.frame=CGRectMake(0, 20, self.view.frame.size.width,300);
   [self.view addSubview:_player.view];
   [_player play];

}

2 个答案:

答案 0 :(得分:0)

IOS不支持开箱即用的Rtsp。您必须使用或编写库才能接收要解码和播放的流和视频工具箱。

答案 1 :(得分:0)

我已经使用FFmpeg 2.8通过RTSP协议接收H.264数据,效果很好。让我简要介绍一下处理步骤:

  1. 接收RTSP数据包
  2. 使用FFmpeg或Video Toolbox对视频数据包进行解码,然后通过OpenGL ES进行渲染,如果视频的像素格式为yuv格式,则可帮助我们将YUV转换为RGB。
  3. 使用FFmpeg解码音频数据包,然后使用音频队列或音频单元播放它们。
  4. 关于FFmpeg的简单设置代码喜欢这个:

    AVFormatContext *fmtCtx = avformat_alloc_context();
    avformat_open_input(&fmtCtx, server, NULL, &dic);
    avformat_find_stream_info(fmtCtx, NULL);
    av_dump_format(fmtCtx, 0, NULL, 0);
    // find out stream index, sample code:
    AVCodecContext *videoCodecCtx = NULL;
    int videoStreamIndex = -1;
    for (int i = 0 ; i < fmtCtx->nb_streams; i++) {
        if (AVMEDIA_TYPE_VIDEO == fmtCtx->streams[i]->codec->codec_type) {
            videoCodecCtx = fmtCtx->streams[i]->codec;
            videoStreamIndex = i;
            break;
        }
    }
    AVPacket packet, *pkt = &packet;
    // loop av_read_frame and grap AVPacket to Video Toolbox pipeline, 
    // data structure transfers like this: 
    // AVPacket.data -> CMBlockBuffer -> CMSamplerBuffer -> VTDecompressionDecodeFrame
    // get your CVPixelBuffer from Video Toolbox Decode callback function.