온라인 라디오 방송국에서 스트리밍 오디오 피드를 다운로드하려고 합니다.MP3 샤우트캐스트 피드로 운영되던 방송국이 이제는 AAC HTTP 오디오 피드로 업그레이드되었습니다..
자동차를 타기 위해 스테이션을 리핑하기 위해 터미널에서 "streamripper"를 사용하곤 했지만,이제 Streamripper가 새 스트림을 추출하지 못합니다.. 나는 스트림리퍼가 지원하지 않는 스트림에 대해 현재 방송국이 http 청크 전송 인코딩을 활용하고 있다고 확신합니다.
나는 방송국의 웹 플레이어에서 오디오 피드를 분리하는 새로운 솔루션을 생각해 냈습니다.cURL을 활용하여 피드를 오디오 파일로 추출하고 있습니다.나는 나와 함께 가져갈 수 있습니다.
하지만cURL이 끝없이 기록되어야 하는데 계속해서 "완료" 메시지가 표시됩니다.. 최대 시간 매개변수를 43200초(12시간)로 설정했지만 파일 크기가 다양해졌습니다. 일반적으로 각 결과 파일은 1시간을 넘지 않습니다. 때로는 한 시간 이상이 걸릴 수도 있습니다. 파일 크기와 시간이 다릅니다. 잠시 후 파일이 "중단/완료"되며 cURL 기록을 다시 시작하려면 스크립트를 사용해야 합니다. 하루에 2번(12시간마다)만 녹음해야 하는데 프랙탈 녹음의 큰 폴더가 생겼습니다. cURL 전송의 자세한 내용을 보면 "cURL 연결이 그대로 유지됩니다"로 끝납니다. cURL 로그에는 오류가 없으므로cURL이 "다시 연결"을 시도하고 스트림이 완료되었다고 생각하더라도 동일한 파일로 계속 구문 분석하도록 하는 방법을 잘 모르겠습니다.
나는 또한 "wget"과 "Jdownloader"를 사용해 보았습니다., 둘 다 동일한 결과를 가지며 짧은 시간 후에 완료됩니다.
본질적으로 강제로 다시 연결하고 덮어쓰지 않고 동일한 파일을 계속 다운로드하기 위해 무엇을 할 수 있는지 잘 모르겠습니다.
녹음이 "중단"되지 않도록 하려면 어떻게 해야 합니까? 강제로 다시 연결되도록 할 수 있는 방법이 있나요? 아니면 cURL 전송 속도가 0으로 떨어지더라도 cURL에게 대기하도록 지시하는 방법이 있을까요?
어떤 생각이라도 높이 평가하겠습니다.
감사합니다
답변1
cURL이 "다시 연결"을 시도하고 스트림이 완료되었다고 생각하더라도 동일한 파일로 계속 구문 분석하도록 강제하는 방법
일반적인 방법( 에만 국한되지 않음 curl
)은 다음과 같습니다.
while true; do curl -o - … ; done >file
요점은 curl
stdout에 쓰는 것입니다. 다시 시작하는 횟수에 관계없이 전체 루프를 파일로 리디렉션합니다. 이렇게 하면 여러 연속 프로세스의 출력이 curl
연결되어 단일 파일로 이동됩니다.
12시간 동안 실행하려면:
timeout 12h sh -c 'while true; do curl -o - … ; done >file'
논스톱으로 실행하고 12시간마다 새 파일을 생성하려면 다음을 수행하세요.
while true; do
timeout 12h sh -c 'while true; do curl -o - … ; done >"audio_feed_$(date +%Y-%m-%d_%T)"'
done
요청 시 새 파일을 시작하려면 현재 파일 timeout
이나 sh
그 하위 파일을 종료하면 됩니다.
참고 때때로 몇 초의 누락이 있지만 연결되어 있는 스트림이 재생 가능한 파일이 될지는 알 수 없습니다. 나는 네트워크를 통해 실시간으로 스트리밍되도록 설계된 프로토콜/컨테이너/코덱이 누락된 조각 이후에 다시 동기화할 수 있을 것으로 기대합니다. 이는 데이터가 서버에서 나오든 파일에서 나오든 관계없이 작동합니다. 캡처하려는 스트림이 이와 같은 경우 나중에 재생하는 동안(하나가 curl
종료되고 다음 스트림이 아직 인계되지 않은 타임스탬프에서) "콘텐츠 누락"을 경험하게 되지만 이 "딸꾹질"이 플레이어를 중지해서는 안 됩니다. 그러한 스트림을 처리하는 방법을 실제로 알고 있습니다.