Streaming Media
-
러스트로 MPEG-4 파일 시스템 라이브러리를 만들어보자.Streaming Media/Media Tech 2021. 7. 12. 13:33
스푼라디오에 재직하던 시절 작성한 "러스트로 MPEG-4 파일 시스템 라이브러리를 만들었던 경험"을 소개합니다. ISO BMFF를 구현한 순수한 러스트 크레이트는 전부 인큐베이팅 수준에 불과했습니다. 미디어 데이터를 읽어서 재생할 수도 인코딩된 데이터를 저장할 수도 없었습니다. 새로운 크레이터를 만들까 고민하다가, 약간이라도 진행된 mp4rs를 선택하여 사용 가능한 수준으로 개선하기로 했습니다. https://medium.com/spoontech/rust로-mpeg-4-파일-시스템-라이브러리를-만들어보자-4dd73e3bf77b 전체 내용은 원문으로 확인하세요. 추가 mp4rs에서 mp4-rust로 이름이 바뀌었다. 코드는 https://github.com/alfg/mp4-rust에서 문서는 https:/..
-
멀티미디어 서비스를 위한 얕은 지식Streaming Media/Media Tech 2017. 12. 21. 10:56
멀티미디어의 특징 데이터가 매우 크다. 문자 데이터와 비교하면 비디오나 오디오 데이터는 엄청나가 크다. 24-bit, 1080p @ 60 fps: 24 × 1920×1080 × 60 = 2.98 Gbit/s. 출처 : Wikidepia, Uncompressed video 방대한 분량의 자료를 저장하고 전송하는 기술이 요구된다. 시간에 민감하다. 멀티미디어 정보의 유효성은 시간과 밀접하다. 시간내에 처리되지 않으면 정보의 품질이 급격히 떨어진다. 실시간 처리와 네트워크 서비스 품질(QoS)이 필요하고 각 매채간의 상호 동기를 해결해야 한다. 인간의 오감으로 수용하는 데이터이다. 멀티미디어는 궁극적으로 인간의 오감(대부분 시각과 청각)으로 수용된다. 이로 인해 약간의 오류를 허용하는 특징이 있다. 이를 활용..
-
VLC 미디어 재생의 데이타 흐름 다이어그램Streaming Media/Media Tools 2016. 12. 16. 14:24
아래는 VLC로 미디어 파일을 재생할 경우 구성되는 요소와 데이터의 흐름을 나타낸 다이어그램이다. read는 받는 쪽에서 데이터를 가져오는 방식이고 send/play는 보내는 쪽에서 밀어내는 방식이다. thread간에는 fifo(queue)로 이용하는 데이터를 전달한다. VLC의 객체 간의 구성을 데이타 흐름과 같이 구성해보면 다음과 같다. 실선은 객체의 부모/자식의 관계, 두꺼운 점선(···)은 데이타의 흐름과 관련된 구성(연결관계), 점선(---)은 객체의 일부 구성(포함관계)을 나타낸다. 2013/06/17 - [Practice/FFmpeg] - FFmpeg 데이타 흐름 다이어그램
-
MPEG-4 파일 시스템의 미디어 샘플과 시간 정보 구하기Streaming Media/Media Tech 2013. 6. 26. 18:09
선행 학습MPEG-4 파일의 구조 개괄 샘플의 정보를 저장하는 박스 미디어 샘플에 관한 정보는 샘플 테이블 박스에서 구한다. 미디어 샘플 테이블 박스는 "stbl"이라는 타입명을 가진다. 이 박스의 위치는 다음과 같다. (중간에 존재하는 다른 박스는 모두 무시하였다. 자세한 내용은 아래 참고 링크에서 확인한다.) moovmvhdtrakmdiaminfstbl stbl 박스는 목적에 맞는 여러 개의 박스를 포함한다.co64 - 64-bits Chunk Offsets Boxctts -Composition Offset Boxstco - Chunk Offsets Box stsd - Sample Descriptionstsc - Sample To Chunk Boxstss - Sync Sample stsz - Samp..
-
FFmpeg으로 트랜스코딩하는 프로그램 만들기Streaming Media/Media Tools 2013. 6. 21. 13:50
선행 학습FFmpeg으로 재생하는 프로그램 만들기 예제 코드 static AVFormatContext *fmt_ctx = NULL; static AVCodecContext *dec_ctx = NULL; static int vst_idx = -1; void open_input_file() { AVCodec *dec; /* open input streams */ avformat_open_input(&fmt_ctx, filename, NULL, NULL); /* select the video stream */ vst_idx = av_find_best_stream(fmt_ctx, AVMEDIA_TYPE_VIDEO, -1, -1, &dec, 0); dec_ctx = fmt_ctx->streams[vst_idx]-..
-
FFmpeg으로 재생하는 프로그램 만들기Streaming Media/Media Tools 2013. 6. 20. 11:30
선행 학습FFmpeg으로 미디어 스트림 열기 예제 코드 static AVFormatContext *fmt_ctx = NULL; void play() { AVStream *st; AVPacket pkt; AVFrame *frm = av_frame_alloc(); int got_frame; while (1) { av_read_frame(fmt_ctx, &pkt); st = fmt_ctx->streams[pkt.stream_index]; avcodec_get_frame_defaults(frm); switch (st->codec->codec_type) { case AVMEDIA_TYPE_AUDIO: avcodec_decode_audio4(st->codec, frm, &got_frame, &pkt); break;..
-
FFmpeg으로 미디어 스트림 열기Streaming Media/Media Tools 2013. 6. 19. 13:34
예제 코드 static AVFormatContext *fmt_ctx = NULL; void open_input_file() { avformat_open_input(&fmt_ctx, filename, NULL, NULL); for (i = 0; i nb_streams; i++) { AVStream *st = fmt_ctx->streams[i]; AVCodec *dec; avcodec_open2(st->codec, dec, NULL); } } void close_input_file() { for (i = 0; i nb_streams; i++) { AVStream *st = fmt_ctx->streams[i]; avcodec_close(st->codec); } avfor..
-
FFmpeg 데이타 흐름 다이어그램Streaming Media/Media Tools 2013. 6. 17. 17:16
요즘에 쓰레드를 사용하지 않고 동작하는 경우는 거의 없다고 본다. 따라서 쓰레드를 사용하는 상태를 가정하여 데이타의 흐름을 다이어그램으로 정리한다. 이 다이어그램에 관한 몇 가지 사전 안내 ffmpeg에 대해서 분석하는 것은 이제 시작이다. 다이어그램이 틀렸을 가능성을 염두한다. ffmpeg의 소스코드는 2013년 5월 정도에 git 으로 받아왔다. 흐름의 추적은 emacs와 gtags를 사용했다. 다이어그램은 dia로 작성했다. 내맘대로 다이어그램이다. 즉, UML이니 뭐니 하는 그런 것이 아니다. 서로 알아보면 그만이지 않는가? 고침 `av_codec_xxx'이 아니라 'avcodec_xxx'이다. (예: av_codec_encode_video2 -> avcodec_encode_video2) 쓰레드를..