Hello,I am developing an application that has two separate parts, one for
reading of packets and other one for using packets.I am using Live555 to read
incoming packets from source. and after getting packets I want to pocess it
using ffmpeg.Now in order to set different information need to initialize
ffmpeg I need a ffmpeg prober to give me stream information.I am thinking to
write a prober using custom io. in which I can send packet and it will return
me stream info.I don't know where to start can you or somebody help me in right
direction and also if you got some sample code that can help me in this regard,
will be appreciated. Martin, as you have made these custom io changes in rtsp
you probably are best person to ask this, I strongly believe you will reply me
with right answer.
Here is my code that I am using.
//It is Read function That actually read packet data delivered from live555.
static int Read_Packet(void *opaque, uint8_t *buf, int size) {
PacketCollector* packetCollector = (PacketCollector*)opaque; return
packetCollector->read(buf,size); }//GetStreamInfo is function used
to get stream information, i.e Codec information.
void GetStreamInfo(){
const std::shared_ptr<AVIOContext> avioContext(avio_alloc_context(buffer.get(),
maxSize, AVIO_FLAG_READ,
reinterpret_cast<void*>(m_src.get()), &Read_Packet,
nullptr, nullptr), &av_free); AVInputFormat
*inputFormat = NULL; avioContext->seekable = 0;
avioContext->write_flag = 0; if(
av_probe_input_buffer2(avioContext.get() , &iFormat, "rtsp:", NULL, 0, 0 ) < 0
) { std::cerr << "failed to probe input buffer"; }
const auto avFormat =
std::shared_ptr<AVFormatContext>(avformat_alloc_context(),
&avformat_free_context); AVFormatContext* avFormatPtr = avFormat.get();
avFormat->pb = avioContext.get(); avFormatPtr->flags =
AVFMT_FLAG_CUSTOM_IO |AVFMT_NOFILE ; AVDictionary* dect = NULL;
av_dict_set(&dect,"custom_io","1",AV_DICT_DONT_OVERWRITE); ret =
avformat_open_input(&avFormatPtr, "", iFormat, &dect); if(ret < 0)
{ printf("%s", "unable to open more data"); } else
{ printf("%s", "Open successfully.");
av_dump_format(avFormatPtr,0, "", 0); ret =
avformat_find_stream_info(avFormatPtr,NULL); if(ret < 0)
{ printf("%s", "Unable to get stream info");
} av_dump_format(avFormatPtr,0, "", 0); }
}
Please help and reply if you spot any thing wrong or some batter way to do same
thing.
Many Thanks.Kifayat UllahP Think trees before printing this email.
_______________________________________________
ffmpeg-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/ffmpeg-user