Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

RTSP Streaming on iOS 6 with Xcode 4.6.1

I need to develop an app what is capable of receiving a RTSP Stream. I tried to find solutions/tutorials in the internet for the whole day now, but without any success. I read a lot about using FFMPEG or Live555 (more FFMPEG, also I read that Live555 is not necessary when using the newest version of FFMPEG), but nowhere I looked it was described in a form I could understand, when I found questions on stackoverflow the answers were really short and I could not figure out what they tried to explain. So now I need to ask myself. I used "Homebrew" to download and install FFMPEG, now when I look at my dir /usr/local/ I can see this, the installed files are contained in subfolders of "Cellar" Cellar dir

I also tried to have a look at these projects:RTSPPlay by Mooncatventures and kxmovie by kolyvan.

I did not really figure out how to work with these projects, the Documentation is indefinite and "murky". Well, when I tried to compile these projects the kxmovie failes with errors that are like "missing avformat.h", error missing avformat.h I added the dylibs from the usr/local/cellar/ffmpeg/1.2.1/lib to the project but it seems that this is not the right method. Nearly the same Issue with the RTSPPlay xcodeprj, it gives back the error that an "Entitlements.plist" is missing, after removing the linkings to that file completely I am getting 99+ Apple Mach-O Linker Errors, honestly I could not understand why.

I wanted to try the Live555 too but I cant see through all these obscure and confusing files, again I could not oversee the documentation and how to build the libraries for iphoneos (I read it is the easiest way to receive RTSP Stream but it was the same stack of confusing files as the other projects had)

Maybe if someone tried with these Projects or developed an Application himself could help me with his/her SourceCode or if somebody is seeing through all the Content of FFMPEG / Homebrew made dir's he/she could maybe explain me how to use it, that would probably help me and all the other desperate developers who are searching for a solution.

Just a little edit: I am trying to receive a RTSP H.264 decoded Video Stream.

Thanks in advance, Maurice Arikoglu. (If you need any kind of SourceCode, Links, ScreenShots etc. please let me know)

like image 532
Maurice Avatar asked Jun 27 '13 17:06

Maurice


People also ask

Does iOS support RTSP?

As we all know iOS SDK does not support playing RTSP streams natively. But if you want to play RTSP streams in your applications, you can use iOS VideoKit for doing that. It's as easy as adding a few lines of code to play RTSP streams using iOS VideoKit.

Can RTSP stream audio?

“The Real-Time Streaming Protocol (RTSP) establishes and controls either a single or several time-synchronized streams of continuous media such as audio and video.


2 Answers

For anyone who is searching for a working RTSP Player Library have a look at Durfu's Mooncat Fork I've found online, it is working perfectly fine on iOS 8. There is a sample code included, if you struggle with the implementation I can help you.

like image 162
Maurice Avatar answered Oct 07 '22 09:10

Maurice


I've examined many of those projects that you mentioned, and experienced on those well..

You can use ffmpeg libraries to make a rtsp streaming client, as ffmpeg supports rtsp protocol... But there is an important issue which I've seen in my tests that ffmpeg's rtsp protocol has some important issues when using UDP transport layer for streaming... Even with the latest version (2.01) many RTP packets are dropping during streaming so images become glitchy sometimes... If you use TCP or http transport layer, then it works well...

For live555 project, this library works well with both UDP and TCP transports when streaming rtsp streams.. But ffmpeg is so much powerful/has many capabilities than live555.

If you decide to use ffmpeg then, basically, you should follow the below steps,

  1. make a connection - avformat_open_input
  2. find audio/video codecs - avcodec_find_decoder
  3. open audio/video codecs - avcodec_open2
  4. read encoded packets from file/network stream in a loop - av_read_frame A. a. decode audio packets - avcodec_decode_audio4 b. fill audio buffers with audiounit/audioqueue framework B. a. decode video packets - avcodec_decode_video2 b. convert yuv pictures to rgb pictures - sws_scale or opengles shaders

good luck...

like image 31
Tarum Avatar answered Oct 07 '22 09:10

Tarum