diff --git a/src/zm_ffmpeg_camera.cpp b/src/zm_ffmpeg_camera.cpp index 69144004c..374c5b9e5 100644 --- a/src/zm_ffmpeg_camera.cpp +++ b/src/zm_ffmpeg_camera.cpp @@ -102,7 +102,11 @@ int FfmpegCamera::PrimeCapture() mVideoStreamId = -1; for ( int i=0; i < mFormatContext->nb_streams; i++ ) { +#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,2,1) + if ( mFormatContext->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO ) +#else if ( mFormatContext->streams[i]->codec->codec_type == CODEC_TYPE_VIDEO ) +#endif { mVideoStreamId = i; break; diff --git a/src/zm_mpeg.cpp b/src/zm_mpeg.cpp index fbdf6b91e..5dd4c176b 100644 --- a/src/zm_mpeg.cpp +++ b/src/zm_mpeg.cpp @@ -90,7 +90,11 @@ void VideoStream::SetupCodec( int colours, int width, int height, int bitrate, d #endif c->codec_id = of->video_codec; +#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,2,1) + c->codec_type = AVMEDIA_TYPE_VIDEO; +#else c->codec_type = CODEC_TYPE_VIDEO; +#endif /* put sample parameters */ c->bit_rate = bitrate; @@ -217,7 +221,11 @@ void VideoStream::OpenStream() /* open the output file, if needed */ if ( !(of->flags & AVFMT_NOFILE) ) { +#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,2,1) + if ( avio_open(&ofc->pb, filename, URL_WRONLY) < 0 ) +#else if ( url_fopen(&ofc->pb, filename, URL_WRONLY) < 0 ) +#endif { Fatal( "Could not open '%s'", filename ); } @@ -281,7 +289,11 @@ VideoStream::~VideoStream() { /* close the output file */ #if ZM_FFMPEG_SVN +#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,2,1) + avio_close(ofc->pb); +#else url_fclose(ofc->pb); +#endif #else url_fclose(&ofc->pb); #endif @@ -343,7 +355,11 @@ double VideoStream::EncodeFrame( uint8_t *buffer, int buffer_size, bool add_time AVPacket pkt; av_init_packet( &pkt ); +#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,2,1) + pkt.flags |= AV_PKT_FLAG_KEY; +#else pkt.flags |= PKT_FLAG_KEY; +#endif pkt.stream_index = ost->index; pkt.data = (uint8_t *)opicture_ptr; pkt.size = sizeof(AVPicture); @@ -370,7 +386,11 @@ double VideoStream::EncodeFrame( uint8_t *buffer, int buffer_size, bool add_time pkt.pts= av_rescale_q( c->coded_frame->pts, c->time_base, ost->time_base ); #endif if(c->coded_frame->key_frame) +#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,2,1) + pkt.flags |= AV_PKT_FLAG_KEY; +#else pkt.flags |= PKT_FLAG_KEY; +#endif pkt.stream_index = ost->index; pkt.data = video_outbuf; pkt.size = out_size; diff --git a/src/zm_remote_camera_rtsp.cpp b/src/zm_remote_camera_rtsp.cpp index 73c93a810..77cc9d669 100644 --- a/src/zm_remote_camera_rtsp.cpp +++ b/src/zm_remote_camera_rtsp.cpp @@ -124,7 +124,11 @@ int RemoteCameraRtsp::PrimeCapture() // Find the first video stream int videoStream=-1; for ( int i = 0; i < formatContext->nb_streams; i++ ) - if ( formatContext->streams[i]->codec->codec_type == CODEC_TYPE_VIDEO ) +#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,2,1) + if ( formatContext->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO ) +#else + if ( formatContext->streams[i]->codec->codec_type == CODEC_TYPE_VIDEO ) +#endif { videoStream = i; break; diff --git a/src/zm_rtsp.cpp b/src/zm_rtsp.cpp index dcf1878da..fdfceec2a 100644 --- a/src/zm_rtsp.cpp +++ b/src/zm_rtsp.cpp @@ -335,7 +335,11 @@ int RtspThread::run() for ( int i = 0; i < mFormatContext->nb_streams; i++ ) { SessionDescriptor::MediaDescriptor *mediaDesc = sessDesc->getStream( i ); +#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,2,1) + if ( mFormatContext->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO ) +#else if ( mFormatContext->streams[i]->codec->codec_type == CODEC_TYPE_VIDEO ) +#endif { trackUrl += "/"+mediaDesc->getControlUrl(); rtpClock = mediaDesc->getClock(); diff --git a/src/zm_sdp.cpp b/src/zm_sdp.cpp index f34c39732..ebb593caf 100644 --- a/src/zm_sdp.cpp +++ b/src/zm_sdp.cpp @@ -23,6 +23,44 @@ #include "zm_sdp.h" +#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,2,1) +SessionDescriptor::StaticPayloadDesc SessionDescriptor::smStaticPayloads[] = { + { 0, "PCMU", AVMEDIA_TYPE_AUDIO, CODEC_ID_PCM_MULAW, 8000, 1 }, + { 3, "GSM", AVMEDIA_TYPE_AUDIO, CODEC_ID_NONE, 8000, 1 }, + { 4, "G723", AVMEDIA_TYPE_AUDIO, CODEC_ID_NONE, 8000, 1 }, + { 5, "DVI4", AVMEDIA_TYPE_AUDIO, CODEC_ID_NONE, 8000, 1 }, + { 6, "DVI4", AVMEDIA_TYPE_AUDIO, CODEC_ID_NONE, 16000, 1 }, + { 7, "LPC", AVMEDIA_TYPE_AUDIO, CODEC_ID_NONE, 8000, 1 }, + { 8, "PCMA", AVMEDIA_TYPE_AUDIO, CODEC_ID_PCM_ALAW, 8000, 1 }, + { 9, "G722", AVMEDIA_TYPE_AUDIO, CODEC_ID_NONE, 8000, 1 }, + { 10, "L16", AVMEDIA_TYPE_AUDIO, CODEC_ID_PCM_S16BE, 44100, 2 }, + { 11, "L16", AVMEDIA_TYPE_AUDIO, CODEC_ID_PCM_S16BE, 44100, 1 }, + { 12, "QCELP", AVMEDIA_TYPE_AUDIO, CODEC_ID_QCELP, 8000, 1 }, + { 13, "CN", AVMEDIA_TYPE_AUDIO, CODEC_ID_NONE, 8000, 1 }, + { 14, "MPA", AVMEDIA_TYPE_AUDIO, CODEC_ID_MP2, -1, -1 }, + { 14, "MPA", AVMEDIA_TYPE_AUDIO, CODEC_ID_MP3, -1, -1 }, + { 15, "G728", AVMEDIA_TYPE_AUDIO, CODEC_ID_NONE, 8000, 1 }, + { 16, "DVI4", AVMEDIA_TYPE_AUDIO, CODEC_ID_NONE, 11025, 1 }, + { 17, "DVI4", AVMEDIA_TYPE_AUDIO, CODEC_ID_NONE, 22050, 1 }, + { 18, "G729", AVMEDIA_TYPE_AUDIO, CODEC_ID_NONE, 8000, 1 }, + { 25, "CelB", AVMEDIA_TYPE_VIDEO, CODEC_ID_NONE, 90000, -1 }, + { 26, "JPEG", AVMEDIA_TYPE_VIDEO, CODEC_ID_MJPEG, 90000, -1 }, + { 28, "nv", AVMEDIA_TYPE_VIDEO, CODEC_ID_NONE, 90000, -1 }, + { 31, "H261", AVMEDIA_TYPE_VIDEO, CODEC_ID_H261, 90000, -1 }, + { 32, "MPV", AVMEDIA_TYPE_VIDEO, CODEC_ID_MPEG1VIDEO, 90000, -1 }, + { 32, "MPV", AVMEDIA_TYPE_VIDEO, CODEC_ID_MPEG2VIDEO, 90000, -1 }, + { 33, "MP2T", AVMEDIA_TYPE_DATA, CODEC_ID_MPEG2TS, 90000, -1 }, + { 34, "H263", AVMEDIA_TYPE_VIDEO, CODEC_ID_H263, 90000, -1 }, + { -1, "", AVMEDIA_TYPE_UNKNOWN, CODEC_ID_NONE, -1, -1 } +}; + +SessionDescriptor::DynamicPayloadDesc SessionDescriptor::smDynamicPayloads[] = { + { "MP4V-ES", AVMEDIA_TYPE_VIDEO, CODEC_ID_MPEG4 }, + { "mpeg4-generic", AVMEDIA_TYPE_AUDIO, CODEC_ID_AAC }, + { "H264", AVMEDIA_TYPE_VIDEO, CODEC_ID_H264 }, + { "AMR", AVMEDIA_TYPE_AUDIO, CODEC_ID_AMR_NB } +}; +#else SessionDescriptor::StaticPayloadDesc SessionDescriptor::smStaticPayloads[] = { { 0, "PCMU", CODEC_TYPE_AUDIO, CODEC_ID_PCM_MULAW, 8000, 1 }, { 3, "GSM", CODEC_TYPE_AUDIO, CODEC_ID_NONE, 8000, 1 }, @@ -59,6 +97,7 @@ SessionDescriptor::DynamicPayloadDesc SessionDescriptor::smDynamicPayloads[] = { { "H264", CODEC_TYPE_VIDEO, CODEC_ID_H264 }, { "AMR", CODEC_TYPE_AUDIO, CODEC_ID_AMR_NB } }; +#endif SessionDescriptor::ConnInfo::ConnInfo( const std::string &connInfo ) : mTtl( 16 ), @@ -298,10 +337,17 @@ AVFormatContext *SessionDescriptor::generateFormatContext() const AVStream *stream = av_new_stream( formatContext, i ); Debug( 1, "Looking for codec for %s payload type %d / %s", mediaDesc->getType().c_str(), mediaDesc->getPayloadType(), mediaDesc->getPayloadDesc().c_str() ); +#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,2,1) + if ( mediaDesc->getType() == "video" ) + stream->codec->codec_type = AVMEDIA_TYPE_VIDEO; + else if ( mediaDesc->getType() == "audio" ) + stream->codec->codec_type = AVMEDIA_TYPE_AUDIO; +#else if ( mediaDesc->getType() == "video" ) stream->codec->codec_type = CODEC_TYPE_VIDEO; else if ( mediaDesc->getType() == "audio" ) stream->codec->codec_type = CODEC_TYPE_AUDIO; +#endif if ( mediaDesc->getPayloadType() < PAYLOAD_TYPE_DYNAMIC ) { diff --git a/src/zm_sdp.h b/src/zm_sdp.h index f2ba77532..bf5bc02b3 100644 --- a/src/zm_sdp.h +++ b/src/zm_sdp.h @@ -40,7 +40,7 @@ protected: { int payloadType; const char payloadName[6]; - enum CodecType codecType; + enum AVMediaType codecType; enum CodecID codecId; int clockRate; int autoChannels; @@ -49,7 +49,7 @@ protected: struct DynamicPayloadDesc { const char payloadName[32]; - enum CodecType codecType; + enum AVMediaType codecType; enum CodecID codecId; //int clockRate; //int autoChannels;