
나는 (아주 큰) 파일 세트를 가지고 있습니다.H264에MPEG TS컨테이너. 시간 제약으로 인해 이 콘텐츠를 트랜스코딩하지 않고 원활한 스트리밍으로 다시 패키징해야 합니다(트랜스코딩이 너무 오래 걸립니다).
나는 ffmpeg를 사용하여 이 작업을 수행하는 방법을 알아내려고 노력해 왔습니다. 작업에 적합한 2개의 서로 다른 먹서가 있는 것 같습니다. 저는 'smoothstreaming' 다중화기와 'ismv' 다중화기를 모두 사용해 보았으나 둘 다 문제에 봉착했습니다.
ffmpeg -i input.mpg -codec copy -f smoothstreaming ss_out
이로 인해 다음 오류가 발생합니다.
ffmpeg 버전 N-79695-g675cfb2 Copyright (c) 2000-2016 FFmpeg 개발자 gcc 5.3.1(Debian 5.3.1-14) 20160409로 구축됨 구성: libavutil 55.23.100 / 55.23.100 libav코덱 57. 38.100 / 57. 38.100 libav형식 57. 35.100 / 57. 35.100 libav장치 57.0.101 / 57.0.101 libavfilter 6. 44.100 / 6. 44.100 libswscale 4. 1.100 / 4. 1.100 libswresample 2. 0.101 / 2. 0.101 'input.mpg'에서 #0, mpegts를 입력합니다. 지속 시간: 01:28:41.98, 시작: 2.040000, 비트 전송률: 2500kb/s 프로그램 1 스트림 #0:0[0x1e1]: 비디오: h264(기본) ([27][0][0][0] / 0x001B), yuv420p, 720x576 [SAR 16:11 DAR 20:11], 25fps, 25 tbr, 90,000tbn 스트림 #0:1[0x1e2](eng): 오디오: mp2 ([4][0][0][0] / 0x0004), 48000Hz, 스테레오, s16p, 192kb/s [smoothstreaming @ 0x2616340] AVStream.codec을 사용하여 코덱 매개변수를 멀티플렉서에 전달하는 것은 더 이상 사용되지 않습니다. 대신 AVStream.codecpar을 사용하세요. 마지막 메시지가 1번 반복되었습니다. [부드러운 스트리밍 @ 0x2616340] 스트림 0에 비트 전송률이 설정되지 않았습니다. #0, 부드러운 스트리밍을 'ss_out'으로 출력: 메타데이터: 인코더 : Lavf57.35.100 스트림 #0:0: 비디오: h264 ([33][0][0][0] / 0x0021), yuv420p, 720x576 [SAR 16:11 DAR 20:11], q=2-31, 25fps, 25 조, 50조 스트림 #0:1(eng): 오디오: mp2 (i[0][0][0] / 0x0069), 48000Hz, 스테레오, 192kb/s 스트림 매핑: 스트림 #0:0 -> #0:0 (복사) 스트림 #0:1 -> #0:1(복사) 출력 파일 #0의 헤더를 쓸 수 없습니다(잘못된 코덱 매개변수?): 잘못된 인수
내가 시도한 또 다른 방법은 ffmpeg를 사용하여 ismv로 패키징하는 것입니다.
ffmpeg -i input.mpg -c copy -movflags isml+frag_keyframe -f ismv ss_out.ismv
지금까지는 잘 작동하지만 매니페스트 파일을 생성하려면 ismindex 도구가 필요하지만 실패합니다.
ismindex -n ss_out ss_out.ismv
Unable to read the MFRA atom in ss_out.ismv (mfra size mismatch)
내가 뭔가 잘못하고 있는 걸까요, 아니면 입력 파일에 문제가 있는 걸까요?
답변1
따라서 내 질문에 대해 내가 생각한 두 가지 가능한 솔루션 중 둘 다 작동할 수 있지만 최종 결과는 다릅니다.
ISMV 다중화기 + isminindex
나에게 필요한 것은 서버측 파일 세트(.ism, .ismc, .ismv)였습니다. 이를 달성하기 위해 다음 두 가지 작업을 수행했습니다.
ffmpeg -i input.mpg -c:v copy -c:a aac -b:a 192k -movflags frag_keyframe -f ismv ss_out.ismv
위 명령은 비디오 스트림을 트랜스코딩하지 않고 복사하고 오디오를 AAC로 트랜스코딩한 다음(ffmpeg와 ismindex 둘 다 MP2 오디오에도 신경 쓰지 않는 것처럼 보임) .ismv로 패키징합니다.
ismindex -n ss_out ss_out.ismv
그런 다음 ismindex 도구를 사용하여 필요한 .ism 및 .ismc 파일을 생성할 수 있습니다.
여기서 얻은 파일은 미디어 서비스를 사용하여 IIS를 통해 스트리밍할 수 있었습니다.
부드러운 스트리밍 다중화기
또한 결국 작동하도록 '부드러운 스트리밍' 다중화기를 얻었는데, 요령은 입력으로 .ismv 파일도 필요하다는 것입니다. 그래서 먼저 위와 동일한 ffmpeg 명령을 실행한 후 ffmpeg를 다시 사용하여 'smoothstreaming' 다중화기로 다시 패키징할 수 있었습니다.
하지만 이 솔루션에서 제가 겪은 문제는 기존 웹 서버가 원활한 스트리밍을 수행하는 데 필요한 파일이 생성된다는 것입니다. 따라서 비디오 조각이 분할되고 청크당 메타데이터가 있습니다. 이는 일반적으로 스트리밍 서버에서 처리됩니다.