From: Uma M. <gu...@gm...> - 2009-02-08 09:01:31
|
Need help with avifile library usage with network stream. For an academic project, we are streaming encoded media from server to client and decoding on the client. The stream is sent through a network virtual channel(RDP) and received on client. We wish to use avifile library to decode while it is being received, and render. We treat the program receiving the network stream as server and create a serversocket. As the client (decoding thread) connects to it, open a stream using fdopen() on the socket descriptor and fwrite() into it. Could av_open_input_file() with tcp url of the server(receiving program) be used to connect, open and decode on the client program? The code will be like this: Receiving program (Server): Media_process(STREAM s) { create serversocket; bind(); // localhost, some-port listen(); sock = accept(); fp = fdopen(sock, "wb"); fwrite(s->data, ...,fp); ..... } Decoding thread (Client): { AVFormatContext *ic; av_open_input_file(&ic, "tcp:localhost:port", NULL, 0, NULL); decode(); render(); } We have tried to follow the source code of avifile library since we couldnt find any documentation or sample code about usage. Seems like tcp url will invoke tcp_open() and corresponding read() functions. But it doesnt seem to work. How do we link the decoding program with the received stream? What is the way to handle this requirement? Would greatly appreciate any help and pointers or some example code. Thanks, Uma. |
From: Zdenek K. <zde...@gm...> - 2009-02-25 09:12:52
|
Ooops sorrry Somehow forget to answer and the mail got lost in mailbox ;) 2009/2/8 Uma Maheswari <gu...@gm...>: > Need help with avifile library usage with network stream. > > For an academic project, we are streaming encoded media from > server to client and decoding on the client. The stream is > sent through a network virtual channel(RDP) and received on client. > We wish to use avifile library to decode while it is being > received, and render. Hmmm - not really sure if the avifile is actually very useful here - I would probably strongly propose to use ffmpeg project directly. Avifile is rather old mostly obsoleted project which I'm now seldomly updating and just testing some ideas I have - but because time is always missing it's very slowly moving :) > > We treat the program receiving the network stream as server and create a > serversocket. As the client (decoding thread) connects to it, open a stream > using fdopen() on the socket descriptor and fwrite() into it. > Could av_open_input_file() with tcp url of the server(receiving program) > be used to connect, open and decode on the client program? > > The code will be like this: > > Receiving program (Server): > Media_process(STREAM s) > { > create serversocket; > bind(); // localhost, some-port > listen(); > sock = accept(); > fp = fdopen(sock, "wb"); > fwrite(s->data, ...,fp); > ..... > } > > Decoding thread (Client): > { > AVFormatContext *ic; > av_open_input_file(&ic, "tcp:localhost:port", NULL, 0, NULL); > decode(); > render(); > } I think you are already using ffmpeg calls here :) so you really should try ffmpeg project list and its documentation > > We have tried to follow the source code of avifile library since we > couldnt find > any documentation or sample code about usage. Seems like tcp url will invoke > tcp_open() and corresponding read() functions. But it doesnt seem to work. Yep - documentation is usually only the source code and sample code examples. > > How do we link the decoding program with the received stream? What is the way > to handle this requirement? Would greatly appreciate any help and pointers or > some example code. I think ffmpeg project has quite a lot of documentation - also not - a lot of documentation is generated via 'doxygen' tool (same for avifile - it will create some files which describe at least top most classes). If you are still unable to move forward - try to ask me again. Bye Zdenek |