
Recherche avancée
Médias (1)
-
Rennes Emotion Map 2010-11
19 octobre 2011, par
Mis à jour : Juillet 2013
Langue : français
Type : Texte
Autres articles (54)
-
Multilang : améliorer l’interface pour les blocs multilingues
18 février 2011, parMultilang est un plugin supplémentaire qui n’est pas activé par défaut lors de l’initialisation de MediaSPIP.
Après son activation, une préconfiguration est mise en place automatiquement par MediaSPIP init permettant à la nouvelle fonctionnalité d’être automatiquement opérationnelle. Il n’est donc pas obligatoire de passer par une étape de configuration pour cela. -
Encoding and processing into web-friendly formats
13 avril 2011, parMediaSPIP automatically converts uploaded files to internet-compatible formats.
Video files are encoded in MP4, Ogv and WebM (supported by HTML5) and MP4 (supported by Flash).
Audio files are encoded in MP3 and Ogg (supported by HTML5) and MP3 (supported by Flash).
Where possible, text is analyzed in order to retrieve the data needed for search engine detection, and then exported as a series of image files.
All uploaded files are stored online in their original format, so you can (...) -
Contribute to translation
13 avril 2011You can help us to improve the language used in the software interface to make MediaSPIP more accessible and user-friendly. You can also translate the interface into any language that allows it to spread to new linguistic communities.
To do this, we use the translation interface of SPIP where the all the language modules of MediaSPIP are available. Just subscribe to the mailing list and request further informantion on translation.
MediaSPIP is currently available in French and English (...)
Sur d’autres sites (3886)
-
ffmpeg massive error spamming from FritzBox rtsp stream
19 février 2019, par itzaiiroIm trying to offer a rtsp live TV stream via rtmp to my family, since the Fritz Box (which is offering the stream) has only 4 tuners -> at most 4 streams can be watched simultaneously.
Im using ffmpeg to prepare the stream as dash stream and send it to my rtmp nginx. When i run ffmpeg im experiencing heavy image and audio artifacts in the final stream and error spams of doom in the console. I couldn’t find anything specific to my case on google. I read on the internet that AVM barely implemented the rtsp protocoll enough to get it to work with vlc mediaplayer.launch param :
ffmpeg -i "rtsp://192.168.178.1:554/?avm=1&freq=114&bw=8&msys=dvbc&mtype=256qam&sr=6900&specinv=1&pids=0,16,17,18,20,260,543,544,546,548,1621" -sn -vcodec libx264 -vprofile baseline -acodec aac -strict -2 -b:v 500k -minrate 500k -maxrate 500k -bufsize 1000k -g 60 -s 640x360 -f flv rtmp://192.168.178.15/dash/pro_sieben_low -sn -vcodec libx264 -vprofile baseline -acodec aac -strict -2 -b:v 1500k -minrate 1500k -maxrate 1500k -bufsize 3000k -g 60 -s 1280x720 -f flv rtmp://192.168.178.15/dash/pro_sieben_med -sn -vcodec libx264 -vprofile baseline -acodec aac -strict -2 -b:v 5000k -minrate 5000k -maxrate 5000k -bufsize 10000k -g 60 -s 1920x1080 -f flv rtmp://192.168.178.15/dash/pro_sieben_high
ffmpeg output (windows) :
stored in pastebin
https://pastebin.com/p4HAyBi5Is there anyway to get this under control ? The original stream is running good with vlc, but its unwatchable after its out of ffmpeg.
Edit :
I was running/testing this on my windows machine, but my target for this task is a ubuntu 16.04 so here ffmpeg on target with pthread support :ffmpeg -i "rtsp://192.168.178.1:554/?avm=1&freq=114&bw=8&msys=dvbc&mtype=256qam&sr=6900&specinv=1&pids=0,16,17,18,20,260,543,544,546,548,1621" -sn -vcodec libx264 -vprofile baseline -acodec aac -strict -2 -b:v 500k -minrate 500k -maxrate 500k -bufsize 1000k -g 60 -s 640x360 -f flv rtmp://192.168.178.15/dash/pro_sieben_low -sn -vcodec libx264 -vprofile baseline -acodec aac -strict -2 -b:v 1500k -minrate 1500k -maxrate 1500k -bufsize 3000k -g 60 -s 1280x720 -f flv rtmp://192.168.178.15/dash/pro_sieben_med -sn -vcodec libx264 -vprofile baseline -acodec aac -strict -2 -b:v 5000k -minrate 5000k -maxrate 5000k -bufsize 10000k -g 60 -s 1920x1080 -f flv rtmp://192.168.178.15/dash/pro_sieben_high
ffmpeg version 2.8.15-0ubuntu0.16.04.1 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.10) 20160609
configuration: --prefix=/usr --extra-version=0ubuntu0.16.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv
libavutil 54. 31.100 / 54. 31.100
libavcodec 56. 60.100 / 56. 60.100
libavformat 56. 40.101 / 56. 40.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 40.101 / 5. 40.101
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 2.101 / 1. 2.101
libpostproc 53. 3.100 / 53. 3.100
[mpeg2video @ 0x167cde0] Invalid frame dimensions 0x0.
Last message repeated 10 times
[rtsp @ 0x1627c20] Could not find codec parameters for stream 4 (Unknown: none ([5][0][0][0] / 0x0005)): unknown codec
Consider increasing the value for the 'analyzeduration' and 'probesize' options
Input #0, rtsp, from 'rtsp://192.168.178.1:554/?avm=1&freq=114&bw=8&msys=dvbc&mtype=256qam&sr=6900&specinv=1&pids=0,16,17,18,20,260,543,544,546,548,1621':
Metadata:
title : SatIPServer:1 0,0,4
Duration: N/A, start: 33786.528778, bitrate: N/A
Program 12101
Metadata:
service_name : ?▒RTL▒ Television
service_provider: ?Unitymedia
Program 12102
Metadata:
service_name : ?SAT.1
service_provider: ?Unitymedia
Program 12103
Metadata:
service_name : ?ProSieben
service_provider: ?Unitymedia
Stream #0:3: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv), 720x576 [SAR 64:45 DAR 16:9], max. 15000 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
Stream #0:2(deu): Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16p, 192 kb/s (clean effects)
Stream #0:0(deu): Audio: ac3 ([6][0][0][0] / 0x0006), 48000 Hz, 5.1(side), fltp, 384 kb/s (clean effects)
Stream #0:1(deu,deu): Subtitle: dvb_teletext ([6][0][0][0] / 0x0006), 492x250
Stream #0:4: Unknown: none ([5][0][0][0] / 0x0005)
Program 12104
Metadata:
service_name : ?VOX
service_provider: ?Unitymedia
Program 12105
Metadata:
service_name : ?RTL2
service_provider: ?Unitymedia
Program 12106
Metadata:
service_name : ?kabel eins
service_provider: ?Unitymedia
Program 12107
Metadata:
service_name : ?▒S▒uper▒ RTL▒
service_provider: ?Unitymedia
Program 12109
Metadata:
service_name : ?ntv
service_provider: ?Unitymedia
Program 12113
Metadata:
service_name : ?ProSieben MAXX
service_provider: ?Unitymedia
Program 20116
Metadata:
service_name : ?SIXX
service_provider: ?Unitymedia
[libx264 @ 0x182b140] using SAR=1/1
[libx264 @ 0x182b140] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
[libx264 @ 0x182b140] profile Constrained Baseline, level 3.0
[libx264 @ 0x182b140] 264 - core 148 r2643 5c65704 - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - http://www.videolan.org/x264.html - options: cabac=0 ref=3 deblock=1:0:0 analyse=0x1:0x111 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=60 keyint_min=6 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=cbr mbtree=1 bitrate=500 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=500 vbv_bufsize=1000 nal_hrd=none filler=0 ip_ratio=1.40 aq=1:1.00
[libx264 @ 0x16e03c0] using SAR=1/1
[libx264 @ 0x16e03c0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
[libx264 @ 0x16e03c0] profile Constrained Baseline, level 3.1
[libx264 @ 0x16e03c0] 264 - core 148 r2643 5c65704 - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - http://www.videolan.org/x264.html - options: cabac=0 ref=3 deblock=1:0:0 analyse=0x1:0x111 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=60 keyint_min=6 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=cbr mbtree=1 bitrate=1500 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=1500 vbv_bufsize=3000 nal_hrd=none filler=0 ip_ratio=1.40 aq=1:1.00
[libx264 @ 0x16cc880] using SAR=1/1
[libx264 @ 0x16cc880] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
[libx264 @ 0x16cc880] profile Constrained Baseline, level 4.0
[libx264 @ 0x16cc880] 264 - core 148 r2643 5c65704 - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - http://www.videolan.org/x264.html - options: cabac=0 ref=3 deblock=1:0:0 analyse=0x1:0x111 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=60 keyint_min=6 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=cbr mbtree=1 bitrate=5000 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=5000 vbv_bufsize=10000 nal_hrd=none filler=0 ip_ratio=1.40 aq=1:1.00
Output #0, flv, to 'rtmp://192.168.178.15/dash/pro_sieben_low':
Metadata:
title : SatIPServer:1 0,0,4
encoder : Lavf56.40.101
Stream #0:0: Video: h264 (libx264) ([7][0][0][0] / 0x0007), yuv420p, 640x360 [SAR 1:1 DAR 16:9], q=-1--1, 500 kb/s, 25 fps, 1k tbn, 25 tbc
Metadata:
encoder : Lavc56.60.100 libx264
Stream #0:1(deu): Audio: aac ([10][0][0][0] / 0x000A), 48000 Hz, 5.1(side), fltp, 128 kb/s (clean effects)
Metadata:
encoder : Lavc56.60.100 aac
Output #1, flv, to 'rtmp://192.168.178.15/dash/pro_sieben_med':
Metadata:
title : SatIPServer:1 0,0,4
encoder : Lavf56.40.101
Stream #1:0: Video: h264 (libx264) ([7][0][0][0] / 0x0007), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], q=-1--1, 1500 kb/s, 25 fps, 1k tbn, 25 tbc
Metadata:
encoder : Lavc56.60.100 libx264
Stream #1:1(deu): Audio: aac ([10][0][0][0] / 0x000A), 48000 Hz, 5.1(side), fltp, 128 kb/s (clean effects)
Metadata:
encoder : Lavc56.60.100 aac
Output #2, flv, to 'rtmp://192.168.178.15/dash/pro_sieben_high':
Metadata:
title : SatIPServer:1 0,0,4
encoder : Lavf56.40.101
Stream #2:0: Video: h264 (libx264) ([7][0][0][0] / 0x0007), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], q=-1--1, 5000 kb/s, 25 fps, 1k tbn, 25 tbc
Metadata:
encoder : Lavc56.60.100 libx264
Stream #2:1(deu): Audio: aac ([10][0][0][0] / 0x000A), 48000 Hz, 5.1(side), fltp, 128 kb/s (clean effects)
Metadata:
encoder : Lavc56.60.100 aac
Stream mapping:
Stream #0:3 -> #0:0 (mpeg2video (native) -> h264 (libx264))
Stream #0:0 -> #0:1 (ac3 (native) -> aac (native))
Stream #0:3 -> #1:0 (mpeg2video (native) -> h264 (libx264))
Stream #0:0 -> #1:1 (ac3 (native) -> aac (native))
Stream #0:3 -> #2:0 (mpeg2video (native) -> h264 (libx264))
Stream #0:0 -> #2:1 (ac3 (native) -> aac (native))
Press [q] to stop, [?] for help
RTP: missed 2137 packets.0 q=26.0 q=23.0 size= 238kB time=00:00:04.91 bitrate= 397.3kbits/s
[rtsp @ 0x1627c20] PES packet size mismatch
[mpeg2video @ 0x16d72c0] invalid mb type in I Frame at 0 16
[mpeg2video @ 0x16d72c0] invalid mb type in I Frame at 0 17
[mpeg2video @ 0x16d72c0] invalid mb type in I Frame at 0 18
[mpeg2video @ 0x16d72c0] invalid mb type in I Frame at 0 19
[mpeg2video @ 0x16d72c0] ac-tex damaged at 0 20
[mpeg2video @ 0x16d72c0] ac-tex damaged at 0 21
[mpeg2video @ 0x16d72c0] ac-tex damaged at 0 22
[mpeg2video @ 0x16d72c0] ac-tex damaged at 0 23
[mpeg2video @ 0x16d72c0] ac-tex damaged at 17 11
[mpeg2video @ 0x16d72c0] ac-tex damaged at 0 24
[mpeg2video @ 0x16d72c0] ac-tex damaged at 0 25
[mpeg2video @ 0x16d72c0] ac-tex damaged at 0 26
[mpeg2video @ 0x16d72c0] ac-tex damaged at 0 27
[mpeg2video @ 0x16d72c0] invalid mb type in I Frame at 0 31
[mpeg2video @ 0x16d72c0] invalid mb type in I Frame at 0 32
[mpeg2video @ 0x16d72c0] invalid mb type in I Frame at 0 33
[mpeg2video @ 0x16d72c0] invalid mb type in I Frame at 0 34
[mpeg2video @ 0x16d72c0] invalid mb type in I Frame at 0 35
[mpeg2video @ 0x16d72c0] Warning MVs not available
[mpeg2video @ 0x16d72c0] concealing 1125 DC, 1125 AC, 1125 MV errors in I frame
RTP: missed 11 packets
RTP: missed 37 packets
[ac3 @ 0x1676bc0] exponent out-of-range
[ac3 @ 0x1676bc0] error decoding the audio block
[ac3 @ 0x1676bc0] frame sync error
Error while decoding stream #0:0: Invalid data found when processing input
[ac3 @ 0x1676bc0] exponent out-of-range
[ac3 @ 0x1676bc0] error decoding the audio block
RTP: missed 21 packets
RTP: missed 32 packets
[mpeg2video @ 0x16d72c0] ac-tex damaged at 1 4
[mpeg2video @ 0x16d72c0] Warning MVs not available
[mpeg2video @ 0x16d72c0] concealing 1080 DC, 1080 AC, 1080 MV errors in B frame
[mpeg2video @ 0x16d72c0] 00 motion_type at 21 27
[mpeg2video @ 0x16d72c0] 00 motion_type at 2 26
[mpeg2video @ 0x16d72c0] 00 motion_type at 0 27
[mpeg2video @ 0x16d72c0] invalid cbp -1 at 2 1
[mpeg2video @ 0x16d72c0] 00 motion_type at 5 2
[mpeg2video @ 0x16d72c0] skip with previntra
[mpeg2video @ 0x16d72c0] 00 motion_type at 2 4
[mpeg2video @ 0x16d72c0] slice mismatch
[mpeg2video @ 0x16d72c0] 00 motion_type at 1 6
[mpeg2video @ 0x16d72c0] ac-tex damaged at 3 7
[mpeg2video @ 0x16d72c0] slice mismatch
[mpeg2video @ 0x16d72c0] 00 motion_type at 37 9
[mpeg2video @ 0x16d72c0] 00 motion_type at 1 10
[mpeg2video @ 0x16d72c0] mb incr damaged
[mpeg2video @ 0x16d72c0] 00 motion_type at 1 31
[mpeg2video @ 0x16d72c0] 00 motion_type at 5 32
[mpeg2video @ 0x16d72c0] 00 motion_type at 1 33
[mpeg2video @ 0x16d72c0] mb incr damaged
[mpeg2video @ 0x16d72c0] ac-tex damaged at 26 35
[mpeg2video @ 0x16d72c0] Warning MVs not available
[mpeg2video @ 0x16d72c0] concealing 945 DC, 945 AC, 945 MV errors in B frame
[rtsp @ 0x1627c20] PES packet size mismatchze= 294kB time=00:00:05.27 bitrate= 457.1kbits/s
[ac3 @ 0x1676bc0] frame sync error
Error while decoding stream #0:0: Invalid data found when processing input
[ac3 @ 0x1676bc0] exponent out-of-range
[ac3 @ 0x1676bc0] error decoding the audio block
[ac3 @ 0x1676bc0] frame sync error
Error while decoding stream #0:0: Invalid data found when processing input
RTP: missed 38 packets25.0 q=26.0 q=22.0 size= 320kB time=00:00:11.18 bitrate= 234.3kbits/s
RTP: missed 18 packets
RTP: missed 9 packets
RTP: missed 21 packets
RTP: missed 9 packets
[rtsp @ 0x1627c20] PES packet size mismatch
[ac3 @ 0x1676bc0] exponent out-of-range
[ac3 @ 0x1676bc0] error decoding the audio block
[ac3 @ 0x1676bc0] frame sync error
Error while decoding stream #0:0: Invalid data found when processing input
[ac3 @ 0x1676bc0] bandwidth code = 63 > 60
[ac3 @ 0x1676bc0] error decoding the audio block
RTP: missed 13 packets
[mpeg2video @ 0x16d72c0] mb incr damaged
[mpeg2video @ 0x16d72c0] ac-tex damaged at 3 6
[mpeg2video @ 0x16d72c0] 00 motion_type at 1 16
[mpeg2video @ 0x16d72c0] ac-tex damaged at 0 17
[mpeg2video @ 0x16d72c0] 00 motion_type at 5 21
[mpeg2video @ 0x16d72c0] 00 motion_type at 3 27
[mpeg2video @ 0x16d72c0] invalid cbp -1 at 7 32
[mpeg2video @ 0x16d72c0] ac-tex damaged at 8 32
[mpeg2video @ 0x16d72c0] slice mismatch
Last message repeated 2 times
[mpeg2video @ 0x16d72c0] Warning MVs not available
[mpeg2video @ 0x16d72c0] concealing 810 DC, 810 AC, 810 MV errors in P frame
RTP: missed 44 packets
[rtsp @ 0x1627c20] PES packet size mismatch
[ac3 @ 0x1676bc0] frame sync error
Error while decoding stream #0:0: Invalid data found when processing input
[ac3 @ 0x1676bc0] exponent out-of-range0 size= 338kB time=00:00:11.43 bitrate= 242.2kbits/s
[ac3 @ 0x1676bc0] error decoding the audio block
RTP: missed 35 packets
Last message repeated 1 times
RTP: missed 31 packets
[ac3 @ 0x1676bc0] frame sync error
Error while decoding stream #0:0: Invalid data found when processing input
[ac3 @ 0x1676bc0] exponent out-of-range
[ac3 @ 0x1676bc0] error decoding the audio block
[ac3 @ 0x1676bc0] frame sync error
Error while decoding stream #0:0: Invalid data found when processing input
RTP: missed 48 packets
[mpeg2video @ 0x16d72c0] ac-tex damaged at 5 23
[mpeg2video @ 0x16d72c0] mb incr damaged
[mpeg2video @ 0x16d72c0] 00 motion_type at 17 24
[mpeg2video @ 0x16d72c0] slice mismatch
Last message repeated 1 times
[mpeg2video @ 0x16d72c0] ac-tex damaged at 5 27
[mpeg2video @ 0x16d72c0] skip with previntra
[mpeg2video @ 0x16d72c0] 00 motion_type at 15 29
[mpeg2video @ 0x16d72c0] 00 motion_type at 8 31
[mpeg2video @ 0x16d72c0] 00 motion_type at 13 32
[mpeg2video @ 0x16d72c0] 00 motion_type at 22 33
[mpeg2video @ 0x16d72c0] 00 motion_type at 20 34
[mpeg2video @ 0x16d72c0] 00 motion_type at 17 35
[mpeg2video @ 0x16d72c0] Warning MVs not available
[mpeg2video @ 0x16d72c0] concealing 543 DC, 543 AC, 543 MV errors in B frame
[mpeg2video @ 0x16d72c0] 00 motion_type at 16 1
[mpeg2video @ 0x16d72c0] ac-tex damaged at 11 13
[mpeg2video @ 0x16d72c0] invalid mb type in P Frame at 4 7
[mpeg2video @ 0x16d72c0] 00 motion_type at 2 8
[mpeg2video @ 0x16d72c0] invalid cbp 0 at 0 19
[mpeg2video @ 0x16d72c0] invalid cbp 0 at 0 20
[mpeg2video @ 0x16d72c0] 00 motion_type at 9 21
[mpeg2video @ 0x16d72c0] ac-tex damaged at 2 22
[mpeg2video @ 0x16d72c0] 00 motion_type at 10 23
[mpeg2video @ 0x16d72c0] slice mismatch
[mpeg2video @ 0x16d72c0] invalid mb type in P Frame at 1 25
[mpeg2video @ 0x16d72c0] invalid cbp 0 at 38 26
[mpeg2video @ 0x16d72c0] invalid mb type in P Frame at 3 27
[mpeg2video @ 0x16d72c0] invalid mb type in P Frame at 22 28
[mpeg2video @ 0x16d72c0] 00 motion_type at 16 29
[mpeg2video @ 0x16d72c0] ac-tex damaged at 5 30
[mpeg2video @ 0x16d72c0] 00 motion_type at 14 31
[mpeg2video @ 0x16d72c0] ac-tex damaged at 2 32
[mpeg2video @ 0x16d72c0] invalid mb type in P Frame at 19 9
[mpeg2video @ 0x16d72c0] invalid mb type in P Frame at 11 10
[mpeg2video @ 0x16d72c0] ac-tex damaged at 13 11
[mpeg2video @ 0x16d72c0] ac-tex damaged at 8 12
[mpeg2video @ 0x16d72c0] 00 motion_type at 33 13
[mpeg2video @ 0x16d72c0] ac-tex damaged at 8 14
[mpeg2video @ 0x16d72c0] invalid cbp -1 at 6 15
[mpeg2video @ 0x16d72c0] invalid cbp -1 at 15 19
[mpeg2video @ 0x16d72c0] 00 motion_type at 9 18
[mpeg2video @ 0x16d72c0] mb incr damaged
[mpeg2video @ 0x16d72c0] invalid cbp -1 at 15 21
[mpeg2video @ 0x16d72c0] 00 motion_type at 13 21
[mpeg2video @ 0x16d72c0] invalid cbp 0 at 16 22
[mpeg2video @ 0x16d72c0] ac-tex damaged at 5 23
[mpeg2video @ 0x16d72c0] ac-tex damaged at 4 24
[mpeg2video @ 0x16d72c0] mb incr damaged
[mpeg2video @ 0x16d72c0] 00 motion_type at 7 26
[mpeg2video @ 0x16d72c0] slice mismatch
[mpeg2video @ 0x16d72c0] 00 motion_type at 9 13
[mpeg2video @ 0x16d72c0] ac-tex damaged at 44 14
[mpeg2video @ 0x16d72c0] invalid cbp 0 at 2 15
[mpeg2video @ 0x16d72c0] mb incr damaged
Last message repeated 1 times
[mpeg2video @ 0x16d72c0] 00 motion_type at 34 18
[mpeg2video @ 0x16d72c0] 00 motion_type at 15 19
[mpeg2video @ 0x16d72c0] mb incr damaged
[mpeg2video @ 0x16d72c0] 00 motion_type at 8 21
[mpeg2video @ 0x16d72c0] ac-tex damaged at 14 22
[mpeg2video @ 0x16d72c0] invalid cbp -1 at 9 23
[mpeg2video @ 0x16d72c0] invalid cbp 0 at 4 24
[mpeg2video @ 0x16d72c0] mb incr damaged
[mpeg2video @ 0x16d72c0] slice mismatch
Last message repeated 1 times
[mpeg2video @ 0x16d72c0] mb incr damaged
[mpeg2video @ 0x16d72c0] ac-tex damaged at 25 29
[mpeg2video @ 0x16d72c0] invalid cbp 0 at 14 30
[mpeg2video @ 0x16d72c0] mb incr damaged
Last message repeated 1 times
[mpeg2video @ 0x16d72c0] 00 motion_type at 35 33
[mpeg2video @ 0x16d72c0] slice mismatch
[mpeg2video @ 0x16d72c0] Warning MVs not available
[mpeg2video @ 0x16d72c0] concealing 1350 DC, 1350 AC, 1350 MV errors in P frame
[flv @ 0x16d7c40] Failed to update header with correct duration.:00:12.12 bitrate= 241.4kbits/s
[flv @ 0x16d7c40] Failed to update header with correct filesize.
[flv @ 0x16df5a0] Failed to update header with correct duration.
[flv @ 0x16df5a0] Failed to update header with correct filesize.
[flv @ 0x16cbe00] Failed to update header with correct duration.
[flv @ 0x16cbe00] Failed to update header with correct filesize.
frame= 136 fps= 12 q=-1.0 Lq=-1.0 q=-1.0 size= 633kB time=00:00:13.24 bitrate= 391.8kbits/s
video:7049kB audio:272kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
[libx264 @ 0x182b140] frame I:4 Avg QP:19.84 size: 33269
[libx264 @ 0x182b140] frame P:132 Avg QP:21.93 size: 3136
[libx264 @ 0x182b140] mb I I16..4: 6.9% 0.0% 93.1%
[libx264 @ 0x182b140] mb P I16..4: 0.1% 0.0% 0.7% P16..4: 32.0% 11.6% 4.4% 0.0% 0.0% skip:51.1%
[libx264 @ 0x182b140] coded y,uvDC,uvAC intra: 91.1% 88.6% 67.5% inter: 14.8% 20.2% 1.5%
[libx264 @ 0x182b140] i16 v,h,dc,p: 35% 15% 3% 47%
[libx264 @ 0x182b140] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 31% 19% 9% 6% 7% 8% 7% 7% 7%
[libx264 @ 0x182b140] i8c dc,h,v,p: 45% 20% 28% 7%
[libx264 @ 0x182b140] ref P L0: 80.5% 11.2% 8.4%
[libx264 @ 0x182b140] kb/s:369.61
[libx264 @ 0x16e03c0] frame I:4 Avg QP:19.81 size: 77367
[libx264 @ 0x16e03c0] frame P:132 Avg QP:21.64 size: 9825
[libx264 @ 0x16e03c0] mb I I16..4: 16.2% 0.0% 83.8%
[libx264 @ 0x16e03c0] mb P I16..4: 0.6% 0.0% 1.2% P16..4: 34.1% 9.5% 2.9% 0.0% 0.0% skip:51.8%
[libx264 @ 0x16e03c0] coded y,uvDC,uvAC intra: 76.8% 77.3% 41.8% inter: 11.9% 20.4% 0.7%
[libx264 @ 0x16e03c0] i16 v,h,dc,p: 38% 18% 7% 37%
[libx264 @ 0x16e03c0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 30% 22% 10% 5% 7% 7% 7% 6% 6%
[libx264 @ 0x16e03c0] i8c dc,h,v,p: 47% 21% 26% 6%
[libx264 @ 0x16e03c0] ref P L0: 80.8% 12.1% 7.1%
[libx264 @ 0x16e03c0] kb/s:1085.42
[libx264 @ 0x16cc880] frame I:4 Avg QP:15.79 size:181630
[libx264 @ 0x16cc880] frame P:132 Avg QP:18.21 size: 32848
[libx264 @ 0x16cc880] mb I I16..4: 13.7% 0.0% 86.3%
[libx264 @ 0x16cc880] mb P I16..4: 1.3% 0.0% 2.7% P16..4: 36.0% 14.2% 4.4% 0.0% 0.0% skip:41.4%
[libx264 @ 0x16cc880] coded y,uvDC,uvAC intra: 72.4% 70.6% 41.8% inter: 17.3% 24.9% 1.5%
[libx264 @ 0x16cc880] i16 v,h,dc,p: 33% 21% 6% 39%
[libx264 @ 0x16cc880] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 30% 23% 9% 5% 8% 7% 7% 6% 5%
[libx264 @ 0x16cc880] i8c dc,h,v,p: 44% 21% 27% 8%
[libx264 @ 0x16cc880] ref P L0: 80.3% 12.7% 7.0%
[libx264 @ 0x16cc880] kb/s:3420.59 -
How to fix ffmpeg's official tutorials03 bug that sound does't work well ? [on hold]
31 janvier 2019, par xiaodaiI want to make a player with ffmpeg and sdl. The tutorial I used is this though I have resampled the audio from decode stream, the sound still plays with loud noise.
I have no ideas to fix it anymore.
I used the following :
- the latest ffmpeg and sdl1
- Visual Studio 2010
// tutorial03.c
// A pedagogical video player that will stream through every video frame as fast as it can
// and play audio (out of sync).
//
// This tutorial was written by Stephen Dranger (dranger@gmail.com).
//
// Code based on FFplay, Copyright (c) 2003 Fabrice Bellard,
// and a tutorial by Martin Bohme (boehme@inb.uni-luebeckREMOVETHIS.de)
// Tested on Gentoo, CVS version 5/01/07 compiled with GCC 4.1.1
//
// Use the Makefile to build all examples.
//
// Run using
// tutorial03 myvideofile.mpg
//
// to play the stream on your screen.
extern "C"{
#include <libavcodec></libavcodec>avcodec.h>
#include <libavformat></libavformat>avformat.h>
#include <libswscale></libswscale>swscale.h>
#include <libavutil></libavutil>channel_layout.h>
#include <libavutil></libavutil>common.h>
#include <libavutil></libavutil>frame.h>
#include <libavutil></libavutil>samplefmt.h>
#include "libswresample/swresample.h"
#include <sdl></sdl>SDL.h>
#include <sdl></sdl>SDL_thread.h>
};
#ifdef __WIN32__
#undef main /* Prevents SDL from overriding main() */
#endif
#include
#define SDL_AUDIO_BUFFER_SIZE 1024
#define MAX_AUDIO_FRAME_SIZE 192000
struct SwrContext *audio_swrCtx;
FILE *pFile=fopen("output.pcm", "wb");
FILE *pFile_stream=fopen("output_stream.pcm","wb");
int audio_len;
typedef struct PacketQueue {
AVPacketList *first_pkt, *last_pkt;
int nb_packets;
int size;
SDL_mutex *mutex;
SDL_cond *cond;
} PacketQueue;
PacketQueue audioq;
int quit = 0;
void packet_queue_init(PacketQueue *q) {
memset(q, 0, sizeof(PacketQueue));
q->mutex = SDL_CreateMutex();
q->cond = SDL_CreateCond();
}
int packet_queue_put(PacketQueue *q, AVPacket *pkt) {
AVPacketList *pkt1;
if(av_dup_packet(pkt) < 0) {
return -1;
}
pkt1 = (AVPacketList *)av_malloc(sizeof(AVPacketList));
if(!pkt1) {
return -1;
}
pkt1->pkt = *pkt;
pkt1->next = NULL;
SDL_LockMutex(q->mutex);
if(!q->last_pkt) {
q->first_pkt = pkt1;
}
else {
q->last_pkt->next = pkt1;
}
q->last_pkt = pkt1;
q->nb_packets++;
q->size += pkt1->pkt.size;
SDL_CondSignal(q->cond);
SDL_UnlockMutex(q->mutex);
return 0;
}
static int packet_queue_get(PacketQueue *q, AVPacket *pkt, int block) {
AVPacketList *pkt1;
int ret;
SDL_LockMutex(q->mutex);
for(;;) {
if(quit) {
ret = -1;
break;
}
pkt1 = q->first_pkt;
if(pkt1) {
q->first_pkt = pkt1->next;
if(!q->first_pkt) {
q->last_pkt = NULL;
}
q->nb_packets--;
q->size -= pkt1->pkt.size;
*pkt = pkt1->pkt;
av_free(pkt1);
ret = 1;
break;
} else if(!block) {
ret = 0;
break;
} else {
SDL_CondWait(q->cond, q->mutex);
}
}
SDL_UnlockMutex(q->mutex);
return ret;
}
int audio_decode_frame(AVCodecContext *aCodecCtx, uint8_t *audio_buf, int buf_size) {
static AVPacket pkt;
static uint8_t *audio_pkt_data = NULL;
static int audio_pkt_size = 0;
static AVFrame frame;
int len1, data_size = 0;
for(;;) {
while(audio_pkt_size > 0) {
int got_frame = 0;
len1 = avcodec_decode_audio4(aCodecCtx, &frame, &got_frame, &pkt);
if(len1 < 0) {
/* if error, skip frame */
audio_pkt_size = 0;
break;
}
audio_pkt_data += len1;
audio_pkt_size -= len1;
data_size = 0;
/*
au_convert_ctx = swr_alloc();
au_convert_ctx=swr_alloc_set_opts(au_convert_ctx,out_channel_layout, out_sample_fmt, out_sample_rate,
in_channel_layout,pCodecCtx->sample_fmt , pCodecCtx->sample_rate,0, NULL);
swr_init(au_convert_ctx);
swr_convert(au_convert_ctx,&out_buffer, MAX_AUDIO_FRAME_SIZE,(const uint8_t **)pFrame->data , pFrame->nb_samples);
*/
if( got_frame ) {
audio_swrCtx=swr_alloc();
audio_swrCtx=swr_alloc_set_opts(audio_swrCtx, // we're allocating a new context
AV_CH_LAYOUT_STEREO,//AV_CH_LAYOUT_STEREO, // out_ch_layout
AV_SAMPLE_FMT_S16, // out_sample_fmt
44100, // out_sample_rate
aCodecCtx->channel_layout, // in_ch_layout
aCodecCtx->sample_fmt, // in_sample_fmt
aCodecCtx->sample_rate, // in_sample_rate
0, // log_offset
NULL); // log_ctx
int ret=swr_init(audio_swrCtx);
int out_samples = av_rescale_rnd(swr_get_delay(audio_swrCtx, aCodecCtx->sample_rate) + 1024, 44100, aCodecCtx->sample_rate, AV_ROUND_UP);
ret=swr_convert(audio_swrCtx,&audio_buf, MAX_AUDIO_FRAME_SIZE,(const uint8_t **)frame.data ,frame.nb_samples);
data_size =
av_samples_get_buffer_size
(
&data_size,
av_get_channel_layout_nb_channels(AV_CH_LAYOUT_STEREO),
ret,
AV_SAMPLE_FMT_S16,
1
);
fwrite(audio_buf, 1, data_size, pFile);
//memcpy(audio_buf, frame.data[0], data_size);
swr_free(&audio_swrCtx);
}
if(data_size <= 0) {
/* No data yet, get more frames */
continue;
}
/* We have data, return it and come back for more later */
return data_size;
}
if(pkt.data) {
av_free_packet(&pkt);
}
if(quit) {
return -1;
}
if(packet_queue_get(&audioq, &pkt, 1) < 0) {
return -1;
}
audio_pkt_data = pkt.data;
audio_pkt_size = pkt.size;
}
}
void audio_callback(void *userdata, Uint8 *stream, int len) {
AVCodecContext *aCodecCtx = (AVCodecContext *)userdata;
int /*audio_len,*/ audio_size;
static uint8_t audio_buf[(MAX_AUDIO_FRAME_SIZE * 3) / 2];
static unsigned int audio_buf_size = 0;
static unsigned int audio_buf_index = 0;
//SDL_memset(stream, 0, len);
while(len > 0) {
if(audio_buf_index >= audio_buf_size) {
/* We have already sent all our data; get more */
audio_size = audio_decode_frame(aCodecCtx, audio_buf, audio_buf_size);
if(audio_size < 0) {
/* If error, output silence */
audio_buf_size = 1024; // arbitrary?
memset(audio_buf, 0, audio_buf_size);
} else {
audio_buf_size = audio_size;
}
audio_buf_index = 0;
}
audio_len = audio_buf_size - audio_buf_index;
if(audio_len > len) {
audio_len = len;
}
memcpy(stream, (uint8_t *)audio_buf , audio_len);
//SDL_MixAudio(stream,(uint8_t*)audio_buf,audio_len,SDL_MIX_MAXVOLUME);
fwrite(audio_buf, 1, audio_len, pFile_stream);
len -= audio_len;
stream += audio_len;
audio_buf_index += audio_len;
audio_len=len;
}
}
int main(int argc, char *argv[]) {
AVFormatContext *pFormatCtx = NULL;
int i, videoStream, audioStream;
AVCodecContext *pCodecCtx = NULL;
AVCodec *pCodec = NULL;
AVFrame *pFrame = NULL;
AVPacket packet;
int frameFinished;
//float aspect_ratio;
AVCodecContext *aCodecCtx = NULL;
AVCodec *aCodec = NULL;
SDL_Overlay *bmp = NULL;
SDL_Surface *screen = NULL;
SDL_Rect rect;
SDL_Event event;
SDL_AudioSpec wanted_spec, spec;
struct SwsContext *sws_ctx = NULL;
AVDictionary *videoOptionsDict = NULL;
AVDictionary *audioOptionsDict = NULL;
if(argc < 2) {
fprintf(stderr, "Usage: test <file>\n");
exit(1);
}
// Register all formats and codecs
av_register_all();
if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER)) {
fprintf(stderr, "Could not initialize SDL - %s\n", SDL_GetError());
exit(1);
}
// Open video file
if(avformat_open_input(&pFormatCtx, argv[1]/*"file.mov"*/, NULL, NULL) != 0) {
return -1; // Couldn't open file
}
// Retrieve stream information
if(avformat_find_stream_info(pFormatCtx, NULL) < 0) {
return -1; // Couldn't find stream information
}
// Dump information about file onto standard error
av_dump_format(pFormatCtx, 0, argv[1], 0);
// Find the first video stream
videoStream = -1;
audioStream = -1;
for(i = 0; i < pFormatCtx->nb_streams; i++) {
if(pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO &&
videoStream < 0) {
videoStream = i;
}
if(pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO &&
audioStream < 0) {
audioStream = i;
}
}
if(videoStream == -1) {
return -1; // Didn't find a video stream
}
if(audioStream == -1) {
return -1;
}
aCodecCtx = pFormatCtx->streams[audioStream]->codec;
// Set audio settings from codec info
wanted_spec.freq = 44100;
wanted_spec.format = AUDIO_S16SYS;
wanted_spec.channels = av_get_channel_layout_nb_channels(AV_CH_LAYOUT_STEREO);;
wanted_spec.silence = 0;
wanted_spec.samples = 1024;
wanted_spec.callback = audio_callback;
wanted_spec.userdata = aCodecCtx;
if(SDL_OpenAudio(&wanted_spec, &spec) < 0) {
fprintf(stderr, "SDL_OpenAudio: %s\n", SDL_GetError());
return -1;
}
aCodec = avcodec_find_decoder(aCodecCtx->codec_id);
if(!aCodec) {
fprintf(stderr, "Unsupported codec!\n");
return -1;
}
avcodec_open2(aCodecCtx, aCodec, &audioOptionsDict);
// audio_st = pFormatCtx->streams[index]
packet_queue_init(&audioq);
SDL_PauseAudio(0);
// Get a pointer to the codec context for the video stream
pCodecCtx = pFormatCtx->streams[videoStream]->codec;
// Find the decoder for the video stream
pCodec = avcodec_find_decoder(pCodecCtx->codec_id);
if(pCodec == NULL) {
fprintf(stderr, "Unsupported codec!\n");
return -1; // Codec not found
}
// Open codec
if(avcodec_open2(pCodecCtx, pCodec, &videoOptionsDict) < 0) {
return -1; // Could not open codec
}
// Allocate video frame
pFrame = av_frame_alloc();
// Make a screen to put our video
#ifndef __DARWIN__
screen = SDL_SetVideoMode(pCodecCtx->width, pCodecCtx->height, 0, 0);
#else
screen = SDL_SetVideoMode(pCodecCtx->width, pCodecCtx->height, 24, 0);
#endif
if(!screen) {
fprintf(stderr, "SDL: could not set video mode - exiting\n");
exit(1);
}
// Allocate a place to put our YUV image on that screen
bmp = SDL_CreateYUVOverlay(pCodecCtx->width,
pCodecCtx->height,
SDL_YV12_OVERLAY,
screen);
sws_ctx =
sws_getContext
(
pCodecCtx->width,
pCodecCtx->height,
pCodecCtx->pix_fmt,
pCodecCtx->width,
pCodecCtx->height,
PIX_FMT_YUV420P,
SWS_BILINEAR,
NULL,
NULL,
NULL
);
// Read frames and save first five frames to disk
i = 0;
while(av_read_frame(pFormatCtx, &packet) >= 0) {
// Is this a packet from the video stream?
if(packet.stream_index == videoStream) {
// Decode video frame
avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished,
&packet);
// Did we get a video frame?
if(frameFinished) {
SDL_LockYUVOverlay(bmp);
AVPicture pict;
pict.data[0] = bmp->pixels[0];
pict.data[1] = bmp->pixels[2];
pict.data[2] = bmp->pixels[1];
pict.linesize[0] = bmp->pitches[0];
pict.linesize[1] = bmp->pitches[2];
pict.linesize[2] = bmp->pitches[1];
// Convert the image into YUV format that SDL uses
sws_scale
(
sws_ctx,
(uint8_t const * const *)pFrame->data,
pFrame->linesize,
0,
pCodecCtx->height,
pict.data,
pict.linesize
);
SDL_UnlockYUVOverlay(bmp);
rect.x = 0;
rect.y = 0;
rect.w = pCodecCtx->width;
rect.h = pCodecCtx->height;
SDL_DisplayYUVOverlay(bmp, &rect);
SDL_Delay(40);
av_free_packet(&packet);
}
} else if(packet.stream_index == audioStream) {
packet_queue_put(&audioq, &packet);
} else {
av_free_packet(&packet);
}
// Free the packet that was allocated by av_read_frame
SDL_PollEvent(&event);
switch(event.type) {
case SDL_QUIT:
quit = 1;
SDL_Quit();
exit(0);
break;
default:
break;
}
}
// Free the YUV frame
av_free(pFrame);
/*swr_free(&audio_swrCtx);*/
// Close the codec
avcodec_close(pCodecCtx);
fclose(pFile);
fclose(pFile_stream);
// Close the video file
avformat_close_input(&pFormatCtx);
return 0;
}
</file>I hope to play normally.
-
How to fix ffmpeg's offical tutorials03 bug that sound does't work well ?
31 janvier 2019, par xiaodaiI want to learn to make a player with ffmpeg and sdl. The tutorial I used is this.[http://dranger.com/ffmpeg/tutorial03.html] Though I have resampled the audio from decode stream, the sound still plays with loud noise.
I have no ideas to fix it anymore.
I used the following :
- the latest ffmpeg and sdl1
- Visual Studio 2010
// tutorial03.c
// A pedagogical video player that will stream through every video frame as fast as it can
// and play audio (out of sync).
//
// This tutorial was written by Stephen Dranger (dranger@gmail.com).
//
// Code based on FFplay, Copyright (c) 2003 Fabrice Bellard,
// and a tutorial by Martin Bohme (boehme@inb.uni-luebeckREMOVETHIS.de)
// Tested on Gentoo, CVS version 5/01/07 compiled with GCC 4.1.1
//
// Use the Makefile to build all examples.
//
// Run using
// tutorial03 myvideofile.mpg
//
// to play the stream on your screen.
extern "C"{
#include <libavcodec></libavcodec>avcodec.h>
#include <libavformat></libavformat>avformat.h>
#include <libswscale></libswscale>swscale.h>
#include <libavutil></libavutil>channel_layout.h>
#include <libavutil></libavutil>common.h>
#include <libavutil></libavutil>frame.h>
#include <libavutil></libavutil>samplefmt.h>
#include "libswresample/swresample.h"
#include <sdl></sdl>SDL.h>
#include <sdl></sdl>SDL_thread.h>
};
#ifdef __WIN32__
#undef main /* Prevents SDL from overriding main() */
#endif
#include
#define SDL_AUDIO_BUFFER_SIZE 1024
#define MAX_AUDIO_FRAME_SIZE 192000
struct SwrContext *audio_swrCtx;
FILE *pFile=fopen("output.pcm", "wb");
FILE *pFile_stream=fopen("output_stream.pcm","wb");
int audio_len;
typedef struct PacketQueue {
AVPacketList *first_pkt, *last_pkt;
int nb_packets;
int size;
SDL_mutex *mutex;
SDL_cond *cond;
} PacketQueue;
PacketQueue audioq;
int quit = 0;
void packet_queue_init(PacketQueue *q) {
memset(q, 0, sizeof(PacketQueue));
q->mutex = SDL_CreateMutex();
q->cond = SDL_CreateCond();
}
int packet_queue_put(PacketQueue *q, AVPacket *pkt) {
AVPacketList *pkt1;
if(av_dup_packet(pkt) < 0) {
return -1;
}
pkt1 = (AVPacketList *)av_malloc(sizeof(AVPacketList));
if(!pkt1) {
return -1;
}
pkt1->pkt = *pkt;
pkt1->next = NULL;
SDL_LockMutex(q->mutex);
if(!q->last_pkt) {
q->first_pkt = pkt1;
}
else {
q->last_pkt->next = pkt1;
}
q->last_pkt = pkt1;
q->nb_packets++;
q->size += pkt1->pkt.size;
SDL_CondSignal(q->cond);
SDL_UnlockMutex(q->mutex);
return 0;
}
static int packet_queue_get(PacketQueue *q, AVPacket *pkt, int block) {
AVPacketList *pkt1;
int ret;
SDL_LockMutex(q->mutex);
for(;;) {
if(quit) {
ret = -1;
break;
}
pkt1 = q->first_pkt;
if(pkt1) {
q->first_pkt = pkt1->next;
if(!q->first_pkt) {
q->last_pkt = NULL;
}
q->nb_packets--;
q->size -= pkt1->pkt.size;
*pkt = pkt1->pkt;
av_free(pkt1);
ret = 1;
break;
} else if(!block) {
ret = 0;
break;
} else {
SDL_CondWait(q->cond, q->mutex);
}
}
SDL_UnlockMutex(q->mutex);
return ret;
}
int audio_decode_frame(AVCodecContext *aCodecCtx, uint8_t *audio_buf, int buf_size) {
static AVPacket pkt;
static uint8_t *audio_pkt_data = NULL;
static int audio_pkt_size = 0;
static AVFrame frame;
int len1, data_size = 0;
for(;;) {
while(audio_pkt_size > 0) {
int got_frame = 0;
len1 = avcodec_decode_audio4(aCodecCtx, &frame, &got_frame, &pkt);
if(len1 < 0) {
/* if error, skip frame */
audio_pkt_size = 0;
break;
}
audio_pkt_data += len1;
audio_pkt_size -= len1;
data_size = 0;
/*
au_convert_ctx = swr_alloc();
au_convert_ctx=swr_alloc_set_opts(au_convert_ctx,out_channel_layout, out_sample_fmt, out_sample_rate,
in_channel_layout,pCodecCtx->sample_fmt , pCodecCtx->sample_rate,0, NULL);
swr_init(au_convert_ctx);
swr_convert(au_convert_ctx,&out_buffer, MAX_AUDIO_FRAME_SIZE,(const uint8_t **)pFrame->data , pFrame->nb_samples);
*/
if( got_frame ) {
audio_swrCtx=swr_alloc();
audio_swrCtx=swr_alloc_set_opts(audio_swrCtx, // we're allocating a new context
AV_CH_LAYOUT_STEREO,//AV_CH_LAYOUT_STEREO, // out_ch_layout
AV_SAMPLE_FMT_S16, // out_sample_fmt
44100, // out_sample_rate
aCodecCtx->channel_layout, // in_ch_layout
aCodecCtx->sample_fmt, // in_sample_fmt
aCodecCtx->sample_rate, // in_sample_rate
0, // log_offset
NULL); // log_ctx
int ret=swr_init(audio_swrCtx);
int out_samples = av_rescale_rnd(swr_get_delay(audio_swrCtx, aCodecCtx->sample_rate) + 1024, 44100, aCodecCtx->sample_rate, AV_ROUND_UP);
ret=swr_convert(audio_swrCtx,&audio_buf, MAX_AUDIO_FRAME_SIZE,(const uint8_t **)frame.data ,frame.nb_samples);
data_size =
av_samples_get_buffer_size
(
&data_size,
av_get_channel_layout_nb_channels(AV_CH_LAYOUT_STEREO),
ret,
AV_SAMPLE_FMT_S16,
1
);
fwrite(audio_buf, 1, data_size, pFile);
//memcpy(audio_buf, frame.data[0], data_size);
swr_free(&audio_swrCtx);
}
if(data_size <= 0) {
/* No data yet, get more frames */
continue;
}
/* We have data, return it and come back for more later */
return data_size;
}
if(pkt.data) {
av_free_packet(&pkt);
}
if(quit) {
return -1;
}
if(packet_queue_get(&audioq, &pkt, 1) < 0) {
return -1;
}
audio_pkt_data = pkt.data;
audio_pkt_size = pkt.size;
}
}
void audio_callback(void *userdata, Uint8 *stream, int len) {
AVCodecContext *aCodecCtx = (AVCodecContext *)userdata;
int /*audio_len,*/ audio_size;
static uint8_t audio_buf[(MAX_AUDIO_FRAME_SIZE * 3) / 2];
static unsigned int audio_buf_size = 0;
static unsigned int audio_buf_index = 0;
//SDL_memset(stream, 0, len);
while(len > 0) {
if(audio_buf_index >= audio_buf_size) {
/* We have already sent all our data; get more */
audio_size = audio_decode_frame(aCodecCtx, audio_buf, audio_buf_size);
if(audio_size < 0) {
/* If error, output silence */
audio_buf_size = 1024; // arbitrary?
memset(audio_buf, 0, audio_buf_size);
} else {
audio_buf_size = audio_size;
}
audio_buf_index = 0;
}
audio_len = audio_buf_size - audio_buf_index;
if(audio_len > len) {
audio_len = len;
}
memcpy(stream, (uint8_t *)audio_buf , audio_len);
//SDL_MixAudio(stream,(uint8_t*)audio_buf,audio_len,SDL_MIX_MAXVOLUME);
fwrite(audio_buf, 1, audio_len, pFile_stream);
len -= audio_len;
stream += audio_len;
audio_buf_index += audio_len;
audio_len=len;
}
}
int main(int argc, char *argv[]) {
AVFormatContext *pFormatCtx = NULL;
int i, videoStream, audioStream;
AVCodecContext *pCodecCtx = NULL;
AVCodec *pCodec = NULL;
AVFrame *pFrame = NULL;
AVPacket packet;
int frameFinished;
//float aspect_ratio;
AVCodecContext *aCodecCtx = NULL;
AVCodec *aCodec = NULL;
SDL_Overlay *bmp = NULL;
SDL_Surface *screen = NULL;
SDL_Rect rect;
SDL_Event event;
SDL_AudioSpec wanted_spec, spec;
struct SwsContext *sws_ctx = NULL;
AVDictionary *videoOptionsDict = NULL;
AVDictionary *audioOptionsDict = NULL;
if(argc < 2) {
fprintf(stderr, "Usage: test <file>\n");
exit(1);
}
// Register all formats and codecs
av_register_all();
if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER)) {
fprintf(stderr, "Could not initialize SDL - %s\n", SDL_GetError());
exit(1);
}
// Open video file
if(avformat_open_input(&pFormatCtx, argv[1]/*"file.mov"*/, NULL, NULL) != 0) {
return -1; // Couldn't open file
}
// Retrieve stream information
if(avformat_find_stream_info(pFormatCtx, NULL) < 0) {
return -1; // Couldn't find stream information
}
// Dump information about file onto standard error
av_dump_format(pFormatCtx, 0, argv[1], 0);
// Find the first video stream
videoStream = -1;
audioStream = -1;
for(i = 0; i < pFormatCtx->nb_streams; i++) {
if(pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO &&
videoStream < 0) {
videoStream = i;
}
if(pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO &&
audioStream < 0) {
audioStream = i;
}
}
if(videoStream == -1) {
return -1; // Didn't find a video stream
}
if(audioStream == -1) {
return -1;
}
aCodecCtx = pFormatCtx->streams[audioStream]->codec;
// Set audio settings from codec info
wanted_spec.freq = 44100;
wanted_spec.format = AUDIO_S16SYS;
wanted_spec.channels = av_get_channel_layout_nb_channels(AV_CH_LAYOUT_STEREO);;
wanted_spec.silence = 0;
wanted_spec.samples = 1024;
wanted_spec.callback = audio_callback;
wanted_spec.userdata = aCodecCtx;
if(SDL_OpenAudio(&wanted_spec, &spec) < 0) {
fprintf(stderr, "SDL_OpenAudio: %s\n", SDL_GetError());
return -1;
}
aCodec = avcodec_find_decoder(aCodecCtx->codec_id);
if(!aCodec) {
fprintf(stderr, "Unsupported codec!\n");
return -1;
}
avcodec_open2(aCodecCtx, aCodec, &audioOptionsDict);
// audio_st = pFormatCtx->streams[index]
packet_queue_init(&audioq);
SDL_PauseAudio(0);
// Get a pointer to the codec context for the video stream
pCodecCtx = pFormatCtx->streams[videoStream]->codec;
// Find the decoder for the video stream
pCodec = avcodec_find_decoder(pCodecCtx->codec_id);
if(pCodec == NULL) {
fprintf(stderr, "Unsupported codec!\n");
return -1; // Codec not found
}
// Open codec
if(avcodec_open2(pCodecCtx, pCodec, &videoOptionsDict) < 0) {
return -1; // Could not open codec
}
// Allocate video frame
pFrame = av_frame_alloc();
// Make a screen to put our video
#ifndef __DARWIN__
screen = SDL_SetVideoMode(pCodecCtx->width, pCodecCtx->height, 0, 0);
#else
screen = SDL_SetVideoMode(pCodecCtx->width, pCodecCtx->height, 24, 0);
#endif
if(!screen) {
fprintf(stderr, "SDL: could not set video mode - exiting\n");
exit(1);
}
// Allocate a place to put our YUV image on that screen
bmp = SDL_CreateYUVOverlay(pCodecCtx->width,
pCodecCtx->height,
SDL_YV12_OVERLAY,
screen);
sws_ctx =
sws_getContext
(
pCodecCtx->width,
pCodecCtx->height,
pCodecCtx->pix_fmt,
pCodecCtx->width,
pCodecCtx->height,
PIX_FMT_YUV420P,
SWS_BILINEAR,
NULL,
NULL,
NULL
);
// Read frames and save first five frames to disk
i = 0;
while(av_read_frame(pFormatCtx, &packet) >= 0) {
// Is this a packet from the video stream?
if(packet.stream_index == videoStream) {
// Decode video frame
avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished,
&packet);
// Did we get a video frame?
if(frameFinished) {
SDL_LockYUVOverlay(bmp);
AVPicture pict;
pict.data[0] = bmp->pixels[0];
pict.data[1] = bmp->pixels[2];
pict.data[2] = bmp->pixels[1];
pict.linesize[0] = bmp->pitches[0];
pict.linesize[1] = bmp->pitches[2];
pict.linesize[2] = bmp->pitches[1];
// Convert the image into YUV format that SDL uses
sws_scale
(
sws_ctx,
(uint8_t const * const *)pFrame->data,
pFrame->linesize,
0,
pCodecCtx->height,
pict.data,
pict.linesize
);
SDL_UnlockYUVOverlay(bmp);
rect.x = 0;
rect.y = 0;
rect.w = pCodecCtx->width;
rect.h = pCodecCtx->height;
SDL_DisplayYUVOverlay(bmp, &rect);
SDL_Delay(40);
av_free_packet(&packet);
}
} else if(packet.stream_index == audioStream) {
packet_queue_put(&audioq, &packet);
} else {
av_free_packet(&packet);
}
// Free the packet that was allocated by av_read_frame
SDL_PollEvent(&event);
switch(event.type) {
case SDL_QUIT:
quit = 1;
SDL_Quit();
exit(0);
break;
default:
break;
}
}
// Free the YUV frame
av_free(pFrame);
/*swr_free(&audio_swrCtx);*/
// Close the codec
avcodec_close(pCodecCtx);
fclose(pFile);
fclose(pFile_stream);
// Close the video file
avformat_close_input(&pFormatCtx);
return 0;
}
</file>I hope to play normally.